首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多重共线性处理-逐步回归

转载是一种动力 分享是一种美德

上篇文章就多重共线性的发现及检验进行了详细的介绍。接下来我们分几篇文章讲一下多元共线性处理常用的方法。

逐步回归(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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180530G1X85H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券