转载是一种动力 分享是一种美德
上篇文章就多重共线性的发现及检验进行了详细的介绍。接下来我们分几篇文章讲一下多元共线性处理常用的方法。
逐步回归(Stepwise Regression)是常用的消除多重共线性、选择“最佳”模型的方法,其本质上在解释变量中筛选对因变量有显著影响的变量,已达到最优。逐步回归法在筛选变量方面较为理想,克服了变量多重共线性和解释的优良有效性,在地学、气象、材料和医学等领域应用广泛。
模型用法:
step(object,scope,scale=,
direction=c("both","backward","forward"),
trace=1,keep=NULL,steps=1000,k=2,)
主要参数解释:
具体方法:
Forward:从一元回归开始,解释变量一个个进入,每次进入p值最小的变量,直到进入的变量都不显著;
Backward:从涉及所有变量的回归方程开始,每次剔除一个P值最大的解释变量;
Both:结合上述两种方法。
判断指标:
赤池信息准则(AIC),是衡量统计模型优良性的一个标准,它考虑了模型的统计拟合度和参与拟合的参数的树木。AIC的值越小,则选择的模型越优,证明用较少的参数获得了较高的拟合度。
注:其假设的条件是模型的误差符合正态分布。K是参与模型拟合的参数的数量,L是模型最大化的似然函数值。
贝叶斯信息准则(BIC),同AIC相似,也用于模型选择,AIC和BIC均引入了与模型参数个数相关的惩罚项,但BIC的惩罚项比AIC大,将样本数量考虑在内,当样本数量过多时候,可以有效防止模型的复杂度过高问题:
示例说明:
本文中用到的数据集某地房价情况,其中y为房价,x1-x9分别为所在区域房产税、浴缸数量、占地面积、可用生活面积、车库数量、房间个数、卧室个数、房龄、壁炉数量等。首先通过逐步回归确定有显著影响的因子,从而建立相对应的模型。
##设置工作目录
setwd("C:/Users/lx/Desktop")
##数据读取
Data
View(Data)
##数据初步可视化分析
library(PerformanceAnalytics)
chart.Correlation(Data[,-c(1)],histogram=TRUE,pch=19)
从此图可以看出部分解释变量对房价具有显著的影响,同时一些解释变量之间也存在着高度的相关关系,接下来进一步确定是否存在共线性的问题。
##vif检验
scale(Data)
model
library(car)
vif(model)
x1 x2 x3 x4 x5 x6 x7 x8 x9
由此,可知道数据存在严重的共线性问题,接下来我们进行逐步回归进行模型优化。
##逐步回归
##首先看一下最原始的模型参数
summary(model)
Call:
lm(formula=y~.,data=Data)
Residuals:
Min Median Max
-3.8504-1.40170.09291.75413.7206
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)17.113515.885492.9080.0131*
x12.390091.057402.2600.0432*
x25.744224.351131.3200.2114
x30.129980.525300.2470.8087
x42.636234.344930.6070.5553
x52.323821.461601.5900.1378
x6-1.624712.40137-0.6770.5115
x7-0.097233.38794-0.0290.9776
x8-0.044450.06212-0.7160.4879
x92.036561.973721.0320.3225
---
Signif. codes:***0.001**0.01*0.05.0.11
Residual standard error:2.841on12degrees of freedom
Multiple R-squared:0.8774,Adjusted R-squared:0.7854
F-statistic:9.539on9and12DF,p-value:0.0003125
##查看模型回归所有可能的子集
install.packages("olsrr")
library(olsrr)
test
plot(test)
##使用both逐步回归
Start:AIC=52.61
y~x1+x2+x3+x4+x5+x6+x7+x8+x9
Df Sum of Sq RSSAIC
-x710.00796.86850.611
-x310.49497.35550.721
-x412.97199.83251.274
-x613.695100.55651.433
-x814.133100.99451.528
-x918.594105.45552.479
96.86152.609
-x2114.068110.92953.593
-x5120.404117.26554.815
-x1141.240138.10158.413
Step:AIC=50.61
y~x1+x2+x3+x4+x5+x6+x8+x9
Df Sum of Sq RSSAIC
-x310.48897.35648.721
-x412.98399.85049.278
-x814.613101.48049.634
96.86850.611
-x9112.927109.79551.367
-x6114.410111.27751.662
-x2115.494112.36251.875
+x710.00796.86152.609
-x5121.721118.58853.062
-x1155.163152.03158.527
Step:AIC=48.72
y~x1+x2+x4+x5+x6+x8+x9
Df Sum of Sq RSSAIC
-x414.954102.31047.813
-x815.101102.45747.845
97.35648.721
-x6114.955112.31149.865
-x2115.330112.68649.938
+x310.48896.86850.611
+x710.00197.35550.721
-x9119.445116.80050.727
-x5121.698119.05451.148
-x1177.178174.53459.564
Step:AIC=47.81
y~x1+x2+x5+x6+x8+x9
Df Sum of Sq RSSAIC
-x815.452107.76246.955
102.31047.813
-x6110.963113.27348.053
+x414.95497.35648.721
-x9117.202119.51349.232
+x312.46099.85049.278
+x710.133102.17749.785
-x5121.654123.96450.037
-x2131.807134.11751.769
-x1188.167190.47859.487
Step:AIC=46.96
y~x1+x2+x5+x6+x9
Df Sum of Sq RSSAIC
107.7646.955
-x9113.719121.4847.592
+x815.452102.3147.813
+x415.305102.4647.845
+x313.477104.2848.234
-x5121.365129.1348.935
+x710.079107.6848.939
-x6125.110132.8749.564
-x2128.366136.1350.096
-x11202.251310.0168.203
Call:
lm(formula=y~x1+x2+x5+x6+x9,data=Data)
Coefficients:
(Intercept)x1 x2 x5 x6
16.1823.0556.3642.195-1.837
x9
1.823
最终确定包含x1、x2、x5、x6、x9变量的多元回归模型为“最优”的模型。
事实上,变量的选择不是机械式地只看那几个统计指标,更主要的是根据数据的实际意义,从业务角度上来选择合适的变量。
延伸:
延伸:
多元线性回归summary()后参数为NA或者VIF时各变量的系数计算报错的可能性情况:各变量之间存在严重的依赖性,即变量可以通过其他变量计算获得。
数据严重依赖型示例说明:
##构造一组数据
dt
c("m",1.85,-1,10),
c("m",1.65,-3,12),
c("m",1.95,-2,11),
c("f",1.75,2,10),
c("f",1.85,1,11),
c("f",1.65,3,8),
c("f",1.95,2,20),
c("u",1.75,-2,1),
c("u",1.85,-1,17),
c("u",1.65,-3,9),
c("u",1.95,-2,16)
))
##数据列命名
colnames(dt)
##定义各列属性
dt$x4
dt$x1
dt$x2
dt$x3
##查看数据基本情况
summary(dt)
x4 x1 x3 x2
f:4Min.:1.00-1:2Min.:1.000
m:4st Qu.:1.75-2:4st Qu.:2.750
u:4Median:2.50-3:2Median:4.500
Mean:2.501:1Mean:4.833
rd Qu.:3.252:2rd Qu.:7.250
Max.:4.003:1Max.:9.000
##构造多元线性函数
model
model
Call:
lm(formula=x1~x3+x4+x2,data=dt)
Coefficients:
(Intercept)x3-2x3-3x31 x32
2.688e+00-1.732e-02-2.173e+001.039e-011.013e-16
x33 x4m x4u x2
-2.242e+006.926e-02NA6.926e-02
这里出现了NA值,我们猜测可能出现了不同列之间存在较强的依赖关系,如一列的值依赖于其他列的组合。
##查看数据存在的问题
alias(model)
Model:
x1~x3+x4+x2
Complete:
(Intercept)x3-2x3-3x31 x32 x33 x4m x2
x4u1-1-1-1-1
从结果可以看出,x4u可以写成其他列的总和
即x4u=Intercept-x31-x32-x33-x4m
##也可以查看模型矩阵也可得出上述的结果
model.matrix(model)
(Intercept)x3-2x3-3x31 x32 x33 x4m x4u x2
11118
2112
31114
41113
5112
6113
7118
8117
91111
10116
111119
121115
领取专属 10元无门槛券
私享最新 技术干货