数据分析中常见的七种回归分析以及R语言实现(五)---套索回归

浏览: 3036

l套索回归,这个回归模型有些新颖,要写个详细的介绍估计要写好长,受限于水平,就写个普及文,所以这里就稍微简答的介绍一下;

为什么我们老说多重共线性呢?那是,因为我们在研究数据的时候总会不可避免的出现多维度的数据,这时候高纬度的数据就会出现多重共线性,变量选择等;所以如何消除多重共线性确定最佳模型,是回归分析的一个重点,我们一般使用的最小二乘法估计在处理多重共线性上有太大的局限性或者说让人不满意吧,第一个就是预测的精度,第二个就是模型解释性;目前处理多重共线性的常用方法有几个:主成分回归,岭回归,适应性lasso回归和偏最小二乘回归等;

套索回归模型和的作用和岭回归有些类似,都是为了减少自变量的多重共线性的影响的一种建模方法;这个方法和岭回归不同的是,它在参数估计的同时能够实现自变量精简的估计方法,其实质就是加一定的约束条件,就是用模型的回归系数的绝对值函数作为惩罚(正则化项)来压缩模型系数,使得一些回归系数变小,将绝对值较小或者影响因子较小的自变量的回归系数置为零,这样做的后果和岭回归有些类似,就是牺牲了一定的估计偏差,但是能降低预测的方差从而提高预测的精准性;

在使用套索回归做预测的时候我们首先需要将数据集进行中心标准处理,这样是为了消除不同的量纲带来的其他影响;是自变量们满足均值为零0,方差为1;

这里在一次引用一下岭回归的谢佳标老师的代码,有点不好意思了,哈哈,大家自己脑补微信用手晤面流泪的表情;不过这次的话我加一点解释给大家,不然不太好看懂;

Clipboard Image.png

cement <- 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))

cement

##    X1 X2 X3 X4     Y

## 1   7 26  6 60  78.5

## 2   1 29 15 52  74.3

## 3  11 56  8 20 104.3

## 4  11 31  8 47  87.6

## 5   7 52  6 33  95.9

## 6  11 55  9 22 109.2

## 7   3 71 17  6 102.7

## 8   1 31 22 44  72.5

## 9   2 54 18 22  93.1

## 10 21 47  4 26 115.9

## 11  1 40 23 34  83.8

## 12 11 66  9 12 113.3

## 13 10 68  8 12 109.4

lm.sol <- lm(Y ~ ., data = cement)

summary(lm.sol)

## 

## Call:

## lm(formula = Y ~ ., data = cement)

## 

## Residuals:

##    Min     1Q Median     3Q    Max 

## -3.175 -1.671  0.251  1.378  3.925 

## 

## Coefficients:

##             Estimate Std. Error t value Pr(>|t|)  

## (Intercept)   62.405     70.071    0.89    0.399  

## X1             1.551      0.745    2.08    0.071 .

## X2             0.510      0.724    0.70    0.501  

## X3             0.102      0.755    0.14    0.896  

## X4            -0.144      0.709   -0.20    0.844  

## ---

## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

## 

## Residual standard error: 2.45 on 8 degrees of freedom

## Multiple R-squared:  0.982,  Adjusted R-squared:  0.974 

## F-statistic:  111 on 4 and 8 DF,  p-value: 4.76e-07

# 从结果看,截距和自变量的相关系数均不显著。

# 利用car包中的vif()函数查看各自变量间的共线情况

library(car)

vif(lm.sol)#计算方差膨胀因子

##     X1     X2     X3     X4 

##  38.50 254.42  46.87 282.51

# 从结果看,各自变量的VIF值都超过10,存在多重共线性,其中,X2与X4的VIF值均超过200.

plot(X2 ~ X4, col = "red", data = cement)

Clipboard Image.png

从上图,可以知道x2,x4呈现线性分布;

library(lars)#这个是我们用套索回归的包,该包还含有最小角回归

## Loaded lars 1.2

x = as.matrix(cement[, 1:4])#将X转换成矩阵

y = as.matrix(cement[, 5])#将Y转换成矩阵

(laa = lars(x, y, type = "lar"))  #lars函数值只用于矩阵型数据

## 

## Call:

## lars(x = x, y = y, type = "lar")

Clipboard Image.png

这幅图说明了lasso回归中系数随着参数滨化而变化

## R-squared: 0.982 

## Sequence of LAR moves:

##      X4 X1 X2 X3

## Var   4  1  2  3

## Step  1  2  3  4

# 由此可见,LASSO的变量选择依次是X4,X1,X2,X3

plot(laa)  #绘出图

#这里选择模型有两种方法,一个是K折交叉验证,cp值两种方法,这里用了CP,K折交叉验证就是将数##据集分为K等份,k-1份用来拟合数据,最后一份作为测试集,得到拟合和测试集的均方误差,做平均#,然后选择均方误差最小的那个模型;

#cp值统计量也是评价回归的一个准则:如果从k个自变量中选取P个参与回归,则cp值

图片.png

#SSE就是我们常说的残差平方和;

summary(laa)  #给出Cp值

## LARS/LAR

## Call: lars(x = x, y = y, type = "lar")

##   Df  Rss     Cp

## 0  1 2716 442.92

## 1  2 2219 361.95

## 2  3 1918 313.50

## 3  4   48   3.02

## 4  5   48   5.00

# 根据课上对Cp含义的解释(衡量多重共线性,其值越小越好),我们取到第3步,使得Cp值最小,也就是选择X4,X1,X2这三个变量

这里代码全部COPY谢佳标老师的,我只是给了一点解释

推荐 7
本文由 夏尔康 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

3 个评论

支持
这里的Rss 就是选择出来的变量对整个模型的解释度吗?可以细化到每个变量的贡献率吗?求大神指教!
residual sum of squares 你可以百度一下这个英文,这是简写

要回复文章请先登录注册