目录
一、数据
二、共线性检查
三、岭回归
四、lasso回归
五、适应性lasso回归
六、偏最小二乘回归
一、数据
糖尿病数据(diabetes.csv)包含在R程序包的lars中,是关于糖尿病的血液等化验指标。除了因变量y之外,还有两个自变量矩阵,前者经过标准化,后者包括前者及一些交互作用。
可以使用以下代码将数据保存为csv文件方便调用
#install.packages("lars")
library(lars)
data(diabetes) #加载数据
write.csv(diabetes,"diabetes.csv",row.names = FALSE)
二、共线性检查
在多元回归中,当两个或更多的自变量有些相关的时候,就可能出现多重共线性的情况。这种情况严重的时候,模型或数据的微小变化有可能造成系数估计的较大变化,使结果模型不稳定,也不易解释。
有一些关于多重共线性的度量,其中之一使容忍度(tolerance)或方差膨胀因子(VIF)【两者等价】
容忍度太小(按照一些文献,小于0.2或0.1)或VIF太大(如5或10),则有多重共线性的问题
还有一个是条件数,常用表示,大于15时有共线性问题,大于30时说明共线性严重
VIF可以通过程序包car的函数vif()得到,条件数可用R固有的函数kappa()得到
w=read.csv("diabetes.csv")
#w[,1:10]为x,w[,11]为y,w[,12:75]为x2
kappa(w[,12:75])
library(carData)
library(car)
vif(lm(y~.,w[,11:75]))
计算结果显示,数据x2的条件数=11427.09,x2最大的5个VIF都大于60000,共线性十分严重,因此直接修正,不尝试简单回归。
三、岭回归
普通最小二乘回归寻求使残差平方和最小的系数β,岭回归加入一个惩罚项
来约束系数。使得残差平方和小,又不能使得系数太膨胀,这里需要确认系数λ。
w=read.csv("diabetes.csv")
library(ridge)
a=linearRidge(y~.,data=w[,11:75])
summary(a)
这里显示岭回归参数(5.363159)以及各个变量的系数。
四、lasso回归
原理上和岭回归相似,但是惩罚项不是系数的平方而是绝对值,在约束条件
下,需满足
lasso回归不像岭回归那样把系数缩小,而是筛选掉一些系数。可以用k折交叉验证(CV)选择平均方误差最小的模型,也可以用Mallows Cp统计量来评价回归,即如果从k个自变量中选取p个参与回归,则Cp统计量的定义为:
对于糖尿病数据,使用lars程序包,代码如下:
#lasso回归
library(lars)
#lars函数只用于矩阵型数据
#自变量和因变量变为矩阵
x=as.matrix(w[,1:10])
y=as.matrix(w[,11])
x2=as.matrix(w[,12:75])
laa=lars(x2,y)
plot(laa)
summary(laa) #给出cp值
cva=cv.lars(x2,y,K=10) #10折交叉验证
best=cva$index[which.min(cva$cv)] #选合适值
coef=coef.lars(laa,mode="fraction",s=best)#使CV最小步时的系数
#plot(coef)
coef[coef!=0] #CV所选自变量
min(laa$Cp) #答案为15
coef1=coef.lars(laa,mode="step",s=15)
#plot(coef1)
coef1[coef1!=0] #Cp所选自变量
图1中,上面数据代表迭代次数,右边代表最终选择的变量。
图2中,可以看出应选取的λ值小于0.1的一半。
通过coef[coef!=0]和coef1[coef1!=0]查看由CV和Cp所确定的变量
五、适应性lasso回归
是lasso回归的改进模型,其系数β同样要满足
它的惩罚项是系数绝对值的加权平均,即约束条件
,其中
,γ>0是一个调整参数,适用于很大范围的损失函数及惩罚条件,岭回归和lasso回归仅仅是其方法的特例。这里使用包msgps,不仅包括适应性lasso(alasso)回归,还包括弹性网络和广义弹性网络等方法。程序包基于广义路径搜索方法寻求最优参数。
对于糖尿病的例子,有如下代码:
#适应性lasso回归
x=as.matrix(w[,1:10])
#y是向量
y=w[,11]
x2=as.matrix(w[,12:75])
library(msgps)
al=msgps(x2,y,penalty="alasso",gamma=1,lambda=0)
summary(al)
plot(al)
输出结果显示γ=45.41。各个准则的值和自由度为:
不同情况下参数的变化:
六、偏最小二乘回归
偏最小二乘回归类似于主成分回归。它在因变量(如果也有多个变量组成)和自变量中各自寻找一个因子(成分),条件是这两个因子在其他可能的成分中最相关,然后再选中的这一对因子的正交空间再选一对最相关的因子,直到这些对因子具有充分代表性(可用交叉验证)
使用包pls,该包也可做主成分分析,一些研究发现(Wold et al.,1984,Gartwaite,1994)偏最小二乘回归在预测上优于普通最小二乘回归及主成分回归。在观测数据相对较少(甚至少于变量数目)时,偏最小二乘回归依然可以使用。主成分回归的计算完全类似,只需把下面的函数plsr()换成pcr()。
#偏最小二乘回归
library(pls)
ap=plsr(y~x2,64,validation="CV") #求出所有可能的64个因子
ap$loadings #看代表性,前28个因子可以代表76.4%的方差
ap$coef #看各个因子作为原变量的线性组合系数
validationplot(ap) #根据CV所用准则最优的原则挑选因子
RMSEP(ap);MSEP(ap);R2(ap) #不同准则在不同因子数量的值
5个因子时RMSEP最小,用其他准则,如MSEP和R2都选择了5个因子