查看原文
其他

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

2017-02-17 夏尔康 R语言中文社区

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


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


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


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


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



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)



从上图,可以知道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")


这幅图说明了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值



#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这三个变量


夏尔康,天善智能社区专家。

Blog:https://ask.hellobi.com/blog/xiaerkang



微信回复关键字即可学习

回复 R              R语言快速入门免费视频 
回复 统计          统计方法及其在R中的实现
回复 用户画像   民生银行客户画像搭建与应用 
回复 大数据      大数据系列免费视频教程
回复 可视化      利用R语言做数据可视化
回复 数据挖掘   数据挖掘算法原理解释与应用
回复 机器学习   R&Python机器学习入门 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存