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. codevs2019 Uva10029 递变阶梯

    提交地址:[codevs][Uva] 题目描述  递变是指通过增加.减少或改变单词x中的一个字母,使它变成字典中的另一个单词y.比如将dig变成dog,将dog变成do都是递变.递变阶梯是一个按字典序 ...

  2. 在ASP.NET MVC4中配置Castle

    ---恢复内容开始--- Castle是针对.NET平台的一个非常优秀的开源项目,重点是开源的哦.它在NHibernate的基础上进一步封装,其原理基本与NHibernate相同,但它较好地解决NHi ...

  3. 【caffe-windows】 caffe-master 之 训练自己数据集(图片转换成lmdb or leveldb)

    前期准备: 文件夹train:此文件夹中按类别分好子文件夹,各子文件夹里存放相应图片 文件夹test:同train,有多少类就有多少个子文件夹 trainlabels.txt : 存的是训练集的标签  ...

  4. java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)

    /*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返 ...

  5. 关于用jQuery的animate方法实现的动画在IE中失效的原因以及解决方法

    这几天在学jQuery,本身还只是一个新手,写了一个简单的动画--圆形头像的缩放.本身是用Firefox进行调试的,一切进行的很顺利,缩放可以按照预期执行,结果拿到IE上去之后,发现缩放动画失效了.后 ...

  6. 【日常】C++ 的那些“坑” —— delete 与 析构函数 与 virtual 的 9 个小例子

    C++中有无数的坑,但毕竟-- 今天就踩到了,也算是基本问题了,记录一下,顺便以后可以考考自己.你也可以猜猜答案,大牛绕行. 0x1 先看这个: #include <stdio.h> #i ...

  7. Git操作指南

    请访问以下网址,很详细,今天偷个懒记录一下,之后有时间再来补全吧! https://git-scm.com/book/zh/v2

  8. 导出Mysql数据库中的数据

    使用mysqldump 指令: D:\>mysqldump -u root -proot bookStore>bookStore.sql

  9. 看我如何从一个APK到最终拿下域管理权限

    本文我将向大家介绍在企业网络中使用个人智能手机,会给我们企业网络造成怎样的潜在威胁?事实证明,想要欺骗一位企业内部的员工并让其安装恶意应用程序,其实并不困难.一旦成功,攻击者就可以突破企业内网的防护机 ...

  10. 为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?

    B树: B+树 1) B+-tree的磁盘读写代价更低 B+-tree的内部结点并没有指向关键字具体信息的指针.因此其内部结点相对B 树更小.如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所 ...