分别使用岭回归和Lasso解决上面回归问题
当回归存在多重共线性的时候,可以使用最小二乘,岭回归,Lasso回归, 但当X的秩不存在的时候或变量的数量少于样本的数量是,作为无偏差估计的最小二乘就不适用,岭回归和Lasso回归更合适。
过程:
1、加载数据做中心化后做线性回归:
可以看到线性回归方程很不显著,存在多重共线性,下面做多重共线性检验:
数值为2009,远大于1000,存在严重多重共线性
2、下面做岭回归
从上面可以知道X3有正变为负,对多重共线性的影响最大,将其剔除
剩余三个变量都符合,下面做k值筛选
K值选取0.1,下面做岭回归
模型非常显著
3、下面尝试用Lasso回归
CP最小的时候为最优,是3.共有变量X1,X2,X4,与岭回归的一致
从上面可以看出,岭回归和Lasso回归得到相同的结果。
源码:
data1<-data.frame(
X1=c( 7, 1, 11, 11, 7, 11, 3, 1, 2, 21, 1, 11, 10),
X2=c(26, 29, 56, 31, 52, 55, 71, 31, 54, 47, 40, 66, 68),
X3=c( 6, 15, 8, 8, 6, 9, 17, 22, 18, 4, 23, 9, 8),
X4=c(60, 52, 20, 47, 33, 22, 6, 44, 22, 26, 34, 12, 12),
Y =c(78.5, 74.3, 104.3, 87.6, 95.9, 109.2, 102.7, 72.5,
93.1,115.9, 83.8, 113.3, 109.4)
)
library(MASS)<br>data1<-scale(data1)
lm.sol<-lm(y~.,data=data1)
summary(lm.sol)
kappa(cor(data1[1:5]),exact = TRUE)
lm.ridge(Y~.,data=data1)
plot(lm.ridge(Y~.,data=data1,lambda=seq(0,0.1,0.001)))
lm.ridge(Y~.-X3,data=data1)
plot(lm.ridge(Y~.-X3,data=data1,lambda=seq(0,0.1,0.001)))
select(lm.ridge(y~.-X3,data=data3,lambda=seq(0,0.1,0.001)))
library(ridge)
lm.rlr<-linearRidge(y~.-X3,data=data3,lambda =0.1)
summary(lm.rlr)
library(lars)
x=as.matrix(data1[,1:4])
y=as.matrix(data1[,5])
lm.lar=lars(x,y,type='lar')
lm.lar
plot(lm.lar)
summary(lm.lar)