分享

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

 勤悦轩 2017-11-27

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


为什么我们老说多重共线性呢?那是,因为我们在研究数据的时候总会不行制止的泛起多维度的数据,这时候高纬度的数据就会泛起多重共线性,变量选择等;所以如何消除多重共线性确定最佳模型,是回归分析的一个重点,我们一般使用的最小二乘法预计在处置惩罚多重共线性上有太大的局限性或者说让人不满意吧,第一个就是预测的精度,第二个就是模型解释性;目前处置惩罚多重共线性的常用要领有几个:主身分回归,岭回归,适应性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这三个变量

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多