kf=read.csv('d:/kf.csv') # 读取康复数据
kf
sl=as.matrix(kf[,1:3]) #生成生理指标矩阵
xl=as.matrix(kf[,4:6]) #生成训练指标矩阵
x=sl
x
y=xl
y
x0=scale(x)
x0
y0=scale(y)
y0
m=t(x0)%*%y0%*%t(y0)%*%x0
m
eigen(m)
w1=eigen(m)$vectors[,1]
v1=t(y0)%*%x0%*%w1/sqrt(as.matrix(eigen(m)$values)[1,])
v1
t1=x0%*%w1 #第一对潜变量得分向量
t1 # 以上为第一步(1)分别提取两变量组的第一对成分,并使之相关性达最大。
u1=y0%*%v1
u1 #第一对潜变量得分向量
library("pracma")
α1=inv(t(t1)%*%t1)%*%t(t1)%*%x0 #也可由t(x0)%*%t1/norm(t1,'2')^2算得α1 #α1在pls中称为模型效应负荷量
β1=inv(t(t1)%*%t1)%*%t(t1)%*%y0 #也可由t(y0)%*%t1/norm(t1,'2')^2算得β1
t(x0)%*%t1/norm(t1,'2')^2 # norm(t1,'2')为svd(t1)即t1的最大奇异值,也可用sqrt(t(t1)%*%t1)求得
t(y0)%*%t1/norm(t1,'2')^2 # 以上为第二步(2)建立y对T1的回归及x对T1的回归。
α1
β1
lm(x0~t1) #验证α1即为x0做应变量,t1做自变量的最小二回归的t1的回归系数(分别为weight、waist和pulse的回归系数,共3个)
lm(y0~t1) #验证β1即为y0做应变量,t1做自变量的最小二回归的t1的回归系数(分别为chins、situps和jumps的回归系数,共3个)
B=t(x0)%*%u1%*%inv(t(t1)%*%x0%*%t(x0)%*%u1)%*%t(t1)%*%y0 #保留第一对潜变量对应的标准化自变量x和标准化应变量y的pls回归系数矩阵(该矩阵公式参见‘KernelPartialLeastSquaresRegressionin Reproducing KernelHilbert Space’p102)

B
library("pls")
pls1=plsr(y0~x0,ncomp=1,validation='LOO',jackknife=T)
coef(pls1) #上式中B的求解等价于R的pls包中保留一个主成分的结果,系数为标准化回归系数,可以通过逆标准化过程还原为原始自变量x和应变量y的回归系数。以下保留2个主成分的结果中有具体逆标准化过程。
px0=t1%*%α1 #求x0的预测值矩阵
E1=x0-px0 #求x0的残差矩阵
py0=t1%*%β1 #求y0的预测值矩阵
F1=y0-py0 # #求y0的残差矩阵   
m2=t(E1)%*%F1%*%t(F1)%*%E1 #(3)用残差阵E1和F1代替x0和y0重复以上步骤。
eigen(m2)
w2=eigen(m2)$vectors[,1]
w2
v2=t(F1)%*%E1%*%w2/sqrt(as.matrix(eigen(m2)$values)[1,])
v2
t2=E1%*%w2
t2
u2=F1%*%v2
u2
α2=inv(t(t2)%*%t2)%*%t(t2)%*%E1 #也可由t(E1)%*%t2/norm(t2,'2')^2算得α2
β2=inv(t(t2)%*%t2)%*%t(t2)%*%F1 #也可由t(F1)%*%t2/norm(t2,'2')^2算得β2
α2
β2
library("pls")
pls1=plsr(y0~x0,ncomp=2,validation='LOO',jackknife=T) #以下为R中pls包运算结果,显示回归结果(包括预测值误差平方和PRESS与变异解释度),与上述纯算法结果进行对比和补充, 
summary(pls1) #其中对于解释变量潜变量T1对应变量y的总变异解释的比例为chins(23.26%)、situps(35.06%)和jumps(4.14%)等价于SAS中对y的综合结果20.9447≈mean(23.26%,35.06%,4.14%)四舍五入造成的。2 comps列显示的为引入第二解释变量潜变量后的对应变量y的总变异解释的比例。
coef(pls1) #以应变量situps为例得situps关于各自变量的回归方程(*表示标准化):situps*=-0.13846688weight*-0.52444579waist*-0.08542029pulse* 据此标准化回归方程可以推导出原始变量y与x的回归方程:(situps-mean(situps))/sd(situps)=-0.13846688*(weight-mean(weight))/sd(weight)-0.52444579*(waist-mean(waist))/sd(waist)-0.08542029*(pulse-mean(pulse))/sd(pulse)——>situps=sd(situps)[-0.13846688*(weight-mean(weight))/sd(weight)-0.52444579*(waist-mean(waist))/sd(waist)-0.08542029*(pulse-mean(pulse))/sd(pulse)]+mean(waist)
sd(y[,2])*-0.1384668393/sd(x[,1]) #weight的回归系数
sd(y[,2])*-0.52444579/sd(x[,2]) #waist的回归系数
sd(y[,2])*-0.08542029/sd(x[,3]) #pulse的回归系数
sd(y[,2])*(-0.13846688*-mean(x[,1])/sd(x[,1])+-0.52444579*-mean(x[,2])/sd(x[,2])+-0.08542029*-mean(x[,3])/sd(x[,3]))+mean(y[,2]) #原始变量y与x的回归方程截距
model="SITUPS=612.56712-0.35088WEIGHT-10.24768WAIST-0.74122PULSE——耶!与SAS给出的结果完全一致。"
model
jack.test(pls1) #即对coef(pls1)生成的系数进行假设检验
scores(pls1) #即求第一解释潜变量的得分向量t1=x0%*%w1和第二解释变量潜变量的得分向量t2=E1%*%w2
loadings(pls1) #即求α1
plot(pls1)
validationplot(pls1) #validationplot()函数可以画出PLS模型在不同主成分数下对应的RMSEP(由留一交叉验证法算得的均方预测误差根)
predict(pls1) #即求py0=t1%*%β1
#关于决定系数算法还需研究

转自:http://my.oschina.net/u/1272414/blog/214881

偏最小二乘回归分析建模步骤的R实现(康复俱乐部20名成员测试数据)+补充pls回归系数矩阵的算法实现的更多相关文章

  1. 【数学建模】偏最小二乘回归分析(PLSR)

    PLSR的基本原理与推导,我在这篇博客中有讲过. 0.偏最小二乘回归集成了多元线性回归.主成分分析和典型相关分析的优点,在建模中是一个更好的选择,并且MATLAB提供了完整的实现,应用时主要的问题是: ...

  2. 【建模应用】PLS偏最小二乘回归原理与应用

    @author:Andrew.Du 声明:本文为原创,转载请注明出处:http://www.cnblogs.com/duye/p/9031511.html,谢谢. 一.前言 1.目的: 我写这篇文章的 ...

  3. 偏最小二乘回归(PLSR)- 1 概览

    1. 概览 偏最小二乘算法,因其仅仅利用数据X和Y中部分信息(partial information)来建模,所以得此名字.其总体处理框架体现在下面两图中. 建议先看第2部分,对pls算法有初步了解后 ...

  4. 偏最小二乘回归(PLSR)- 2 标准算法(NIPALS)

    1 NIPALS 算法 Step1:对原始数据X和Y进行中心化,得到X0和Y0.从Y0中选择一列作为u1,一般选择方差最大的那一列. 注:这是为了后面计算方便,如计算协方差时,对于标准化后的数据,其样 ...

  5. 预测分析建模 Python与R语言实现

    预测分析建模 Python与R语言实现 目录 前言 第1章 分析与数据科学1第2章 广告与促销10第3章 偏好与选择24第4章 购物篮分析31第5章 经济数据分析42第6章 运营管理56第7章 文本分 ...

  6. Python 建模步骤

    #%% #载入数据 .查看相关信息 import pandas as pd import numpy as np from sklearn.preprocessing import LabelEnco ...

  7. 【数学建模】day08-数理统计III

    2. 回归分析 回归分析与曲线拟合区分. 曲线拟合是,根据得到的若干有关变量的一组数据,寻找因变量与(一个或几个)自变量之间的一个函数,使这个函数对那组数据拟合得好.通常,函数的形式可以由经验.先验知 ...

  8. 数据质量、特征分析及一些MATLAB函数

    MATLAB数据分析工具箱 MATLAB工具箱主要含有的类别有: 数学类.统计与优化类.信号处理与通信类.控制系统设计与分析类.图像处理类.测试与测量类.计算金融类.计算生物类.并行计算类.数据库访问 ...

  9. 建模分析之机器学习算法(附python&R代码)

    0序 随着移动互联和大数据的拓展越发觉得算法以及模型在设计和开发中的重要性.不管是现在接触比较多的安全产品还是大互联网公司经常提到的人工智能产品(甚至人类2045的的智能拐点时代).都基于算法及建模来 ...

随机推荐

  1. 在ASP dot Net Core MVC中用Controllers调用你的Asp dotnet Core Web API 实现CRUD到远程数据库中,构建你的分布式应用(附Git地址)

    本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...

  2. "fatal: protocol error: bad line length character: No This"

    git clone 远程地址时候出现 "fatal: protocol error: bad line length character: No This" 错误 在stackov ...

  3. LinkCode 整数排序II

    http://www.lintcode.com/zh-cn/problem/sort-integers-ii/ 题目 给一组整数,按照升序排序.使用归并排序,快速排序,堆排序或者任何其他 O(n lo ...

  4. HTML5 进阶系列:indexedDB 数据库

    前言 在 HTML5 的本地存储中,有一种叫 indexedDB 的数据库,该数据库是一种存储在客户端本地的 NoSQL 数据库,它可以存储大量的数据.从上篇:HTML5 进阶系列:web Stora ...

  5. PPT素才搜索简谈

    PPT已经是大部分公司工作汇报.培训.年度总结等不可缺少的办公软件.下面介绍一些关于PPT素才搜索的方法. 第一:模板    1.搜索大法--filetype:对应的文档格式 在关键词后添加这样一段文 ...

  6. 解析http协议的url

    package util; import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamRea ...

  7. ELK菜鸟手记 (三) - X-Pack权限控制之给Kibana加上登录控制以及index_not_found_exception问题解决

    0. 背景 我们在使用ELK进行日志记录的时候,通过网址在Kibana中查看我们的应用程序(eg: Java Web)记录的日志, 但是默认是任何客户端都可以访问Kibana的, 这样就会造成很不安全 ...

  8. phpmyadmin 免登陆

    第一步: 打开 phpmyadmin/libraries/plugins/auth/AuthenticationCookie.class.php 找到 authCheck 和 authSetUser ...

  9. PHP获取Post的原始数据方法小结(POST无变量名)

    From : http://blog.csdn.net/hotdigger/article/details/6456240   一般我们都用$_POST或$_REQUEST两个预定义变量来接收POST ...

  10. hdu2444二分图最大匹配+判断二分图

    There are a group of students. Some of them may know each other, while others don't. For example, A ...