人们总能通过普通最小二乘回归进行数据的分析和预测。当选取的解释变量过多而样本很少时,无法使用普通最小二乘法进行建模。

r语言怎么分析双因素(R语言多自变量多因变量)(1)

R软件是一款具有强大统计分析功能的开源软件,利用R软件进行偏最小二乘回归建模,可以得到理想的模型,并能够对回归系数进行显著性检验,帮助人们发现变量的主要影响因素。

设有q个因变量{y1,y2,…,yq}和p个自变量{x1,x2,…,xp},观测了n个样本点,由此构成了自变量与因变量的数据表Xn×p和Yn×q。

偏最小二乘回归分别在X与Y中提取出成分t1与u1(即:t1、u1分别是x1,x2,…,xp、y1,y2,…,yq的线性组合)。

若选取成分的个数过多,会很容易出现过度拟合的问题,因此需要一个有效的原则来确定成分的个数。采用类似抽样测试的工作方式,把所有样本点分成两部分:第一部分用来重新拟合一个偏最小二乘模型,第二部分的样本点作为测试数据;带入拟合模型中求得预测值误差平方和PRESS=∑((yi-y^i)^2)。再以这种方式重复g次,直到所有的样本都被预测了一次,最后把每个样本的预测误差平方和加总,称为PRESS。

常见的交叉验证方法有“留一验证”,“K折交叉验证”,“Holdout验证”等方法,选取一种方法分别求出第1~r个成分对应的PRESS值,取PRESS最小的或者PRESS几乎不再变化的成分个数作为最终模型选取的成分个数m。

首先需要在加载R的程序包pls;pls包是由Bjrn-HelgeMevik,RonWehrens和Kristian Hovde Liland创建,专门用来做偏最小二乘回归的程序包。

代码如下:

>library("pls",lib.loc="C:/ProgramFiles/R/R-2.15.1/library")

再导入自变量和因变量的样本数据,并且使用scale()函数将数据进行标准化消除量纲的影响。记标准化之后的自变量为X,因变量为Y,进行PLS回归的代码如下:

>pls1<-plsr(Y~X,validation="LOO",jackknife=TRUE)#进行偏最小二乘回归,模型存为对象pls1

>summary(pls1,what="all")#显示回归结果(包括PRESS与变异解释度)。

其中,validation="LOO"表示使用留一交叉验证计算PRESS,jackknife=TRUE表示使用jackknife法估计回归系数方差(为后面的显著性检验做准备)。在没给定成分个数的情况下,会默认使用所有的主成分进行回归,因此需要在选择的成分个数尽可能小的前提下,选择使PRESS最小或几乎不变的成分个数。假设选定了成分个数为m,重新进行回归,并对回归系数假设检验,代码如下:

>pls2<-plsr(Y~X,ncomp=m,validation="LOO",jackknife=TRUE)#“ncomp=m”表示模型成分个数为m>jack。test(pls2)另外还可以使用coef()函数得到回归系数,scores()得到得分矩阵,loadings()得到载荷矩阵,predict()得到对应样本的预测值,以及plot()函数将结果以图的形式展现。

建模过程Step1:导入数据,并进行数据的标准化:

>G1<-read.csv("K:\\WORK\\论文\\R\\grape.csv")

>W1<-read.csv("K:\\WORK\\论文\\R\\wine.csv")

>X<-scale(G1)

>Y<-scale(W1)得到的自变量X是27×59的矩阵,X1~X59依次代表指标。

Step2:进行初步偏最小二乘回归:>pls1<-plsr(Y~X,ncomp=10,validation="LOO",jackknife=TRUE)

>summary(pls1,what="all")#注:R中默认最多只能显示25个主成分对应的各项结果,此处已达到最大个数25)。

r语言怎么分析双因素(R语言多自变量多因变量)(2)

其中CV即为不同主成分个数对应的PRESS,adjcv为调整后的PRESS,“TRAINING:%varianceexplained”一栏为主成分对各变量的累积贡献率。由结果可知,主成分个数为3个时,模型在经过留一交叉验证法后求得的PRESS总和最小,随着成分个数的增加,PRESS值也没有太大改变,并且3个成分对各个因变量的累积贡献率也基本达到了85%,因此定下回归的成分个数m=3。

Step3:根据成分数m=3,建立最终模型:

>pls2<-plsr(Y~X,ncomp=3,validation="LOO",jackknife=TRUE)

>coef(pls2)#得到回归系数得到回归系数后,便能写出各因变量对所有解释变量的回归方程。

使用validationplot()函数可以画出PLS模型在不同主成分数下对应的RMSEP(由留一交叉验证法算得的均方预测误差根),对初始模型的结果进行画图。

r语言怎么分析双因素(R语言多自变量多因变量)(3)

纵坐标“RMESP”表示均方预测误差根,横坐标为不同模型的成分个数;大部分因变量在成分数为3时对应的均方误差根最小,证明选择3个成分参与建模是正确的。使用predplot(pls2)函数画出最终模型的预测效果图。纵坐标为各因变量的预测值,横坐标为各因变量的实际测量值;散点集中分布在主对角线上则说明预测效果很好。预测图(对应15个因变量)的散点大致都分布在对角线上,说明最终模型的拟合效果较好。Y8对应的散点图几乎是一条垂直的线,预测很糟糕;查阅原始数据得知第26个样本点的Y8原始值是1.6239,远大于其他只有0.02左右的数据,因此26号样本为模型的强影响点,它使得对Y8的拟合效果很差;可以考虑将其剔除重新进行预测。

对于其他的变量,可以直观的看出效果是不错的。

r语言怎么分析双因素(R语言多自变量多因变量)(4)

使用jack.test()函数进行检验,挑出与通过检验的回归系数对应的自变量。

r语言怎么分析双因素(R语言多自变量多因变量)(5)

通过显著性检验可以知道各因变量(指标)受哪些自变量(理化指标)的影响较大,及其受影响程度。由表2可知,对因变量Y1而言,对其有显著影响的自变量有X19、X21、X27DPPH、X28、X29、X37、X40,并且均是对其有正向的影响。有正向影响是显然成立的,此处也通过了显著性检验,因此可初步判断此模型与实际相符,对于其他影响显著的变量便是给了一个探索点,可以通过别的方法深入探讨。同理于其他14个因变量,显著性检验可以初步了解到各因变量的受影响因素。#开源软件##R语言##R软件#

,