R语言建立回归分析,并利用VIF查看共线性问题的例子

使用R对内置longley数据集进行回归分析,如果以GNP.deflator作为因变量y,问这个数据集是否存在多重共线性问题?应该选择哪些变量参与回归?

>>>> 答

## 查看longley的数据结构

str(longley)

## 'data.frame':    16 obs.
of  7 variables:

##  $ GNP.deflator:
num  83 88.5 88.2 89.5 96.2
...

##  $ GNP 
  
    :
num  234 259 258 285 329
...

##  $
Unemployed  :
num  236 232 368 335 210
...

##  $ Armed.Forces:
num  159 146 162 165 310
...

##  $
Population  :
num  108 109 110 111 112
...

##  $ Year 
  
   :
int  1947 1948 1949 1950 1951
1952 1953 1954 1955 1956 ...

##  $ Employed 
  : num  60.3
61.1 60.2 61.2 63.2 ...

longly数据集中有7个变量16个观测值,7个变量均属于数值型。

首先建立全量回归模型

lm1 <- lm(GNP.deflator ~ ., data = longley)

summary(lm1)

## 

## Call:

## lm(formula = GNP.deflator ~ ., data = longley)

## 

## Residuals:

##    Min 
   1Q
Median 
   3Q 
  Max 

## -2.009
-0.515  0.113  0.423  1.550

## 

## Coefficients:

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

##
(Intercept)  2946.8564  5647.9766 
  0.52   
0.614  

## GNP    
  
    
0.2635 
   0.1082 
  2.44    0.038
*

## Unemployed 
  
 0.0365 
   0.0302 
  1.21   
0.258  

## Armed.Forces   
0.0112 
   0.0155 
  0.72   
0.488  

## Population 
   -1.7370 
   0.6738 
 -2.58    0.030
*

## Year    
  
   -1.4188 
   2.9446 
 -0.48   
0.641  

## Employed    
   0.2313 
   1.3039 
  0.18   
0.863  

## ---

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

## 

## Residual standard error: 1.19 on 9 degrees of freedom

## Multiple
R-squared:  0.993,  Adjusted
R-squared:  0.988

## F-statistic:  203 on 6 and 9
DF,  p-value: 4.43e-09

建立的模型结果是令人沮丧的,6个变量的显著性p值只有两个有一颗星,说明有些变量不适合用于建模。

看各自变量是否存在共线性问题。此处利用方差膨胀因子进行判断:方差膨胀因子VIF是指回归系数的估计量由于自变量共线性使得方差增加的一个相对度量。一般建议,如VIF>10,表明模型中有很强的共线性问题。

library(car)

vif(lm1, digits = 3)

##    
    
GNP   Unemployed
Armed.Forces 
 Population 
  
  
 Year 

##    
 1214.57 
  
   83.96 
  
   12.16 
    
230.91    
 2065.73 

## 
   Employed

##    
  220.42

从结果看,所有自变量的vif值均超过了10,其中GNP、Year更是高达四位数,存在严重的多种共线性。接下来,利用cor()函数查看各自变量间的相关系数。

plot(longley[, 2:7])

R语言建立回归分析,并利用VIF查看共线性问题的例子-LMLPHP

cor(longley[, 2:7])

##    
  
  
  
   GNP
Unemployed Armed.Forces Population 
 Year Employed

## GNP    
    
1.0000 
   0.6043 
    
0.4464 
   0.9911
0.9953   0.9836

## Unemployed 
 0.6043 
   1.0000 
  
 -0.1774 
   0.6866
0.6683   0.5025

## Armed.Forces 0.4464   
-0.1774    
  1.0000 
   0.3644
0.4172   0.4573

## Population 
 0.9911 
   0.6866 
    
0.3644 
   1.0000
0.9940   0.9604

## Year    
  
 0.9953 
   0.6683 
    
0.4172 
   0.9940
1.0000   0.9713

## Employed 
   0.9836 
   0.5025 
    
0.4573 
   0.9604
0.9713   1.0000

从散点分布图和相关系数,均可以得知,自变量间存在严重共线性。



接下来利用step()函数进行变量的初步筛选。



lm1.step <- step(lm1, direction = "backward")

## Start:  AIC=10.48

## GNP.deflator ~ GNP Unemployed Armed.Forces Population
 

## 
   Year
Employed

## 

##    
  
  
     Df Sum of
Sq  RSS 
 AIC

## - Employed 
  
 1 
    0.04
12.9  8.54

## - Year    
    
1    
 0.33
13.2  8.89

## -
Armed.Forces  1 
    0.74
13.6  9.39

##     
  
  
  
  
     12.8
10.48

## - Unemployed   
1    
 2.08 14.9 10.88

## - GNP    
  
   1 
    8.47 21.3
16.59

## - Population   
1    
 9.48 22.3 17.33

## 

## Step:  AIC=8.54

## GNP.deflator ~ GNP Unemployed Armed.Forces Population
 

## 
   Year

## 

##    
  
  
     Df Sum of
Sq  RSS 
 AIC

## - Year    
    
1    
 0.46
13.3  7.11

##     
  
  
  
  
    
12.9  8.54

## -
Armed.Forces  1 
    1.79
14.7  8.62

## - Unemployed   
1    
 5.74 18.6 12.43

## - GNP    
  
   1 
    9.40 22.3
15.30

## - Population   
1    
 9.90 22.8 15.66

## 

## Step:  AIC=7.11

## GNP.deflator ~ GNP Unemployed Armed.Forces Population

## 

##    
  
  
     Df Sum of
Sq  RSS 
 AIC

## -
Armed.Forces  1 
     1.3
14.7  6.62

##     
  
  
  
  
    
13.4  7.11

## - Population   
1    
  9.7 23.0 13.82

## - Unemployed   
1    
 14.5 27.8 16.86

## - GNP    
  
   1 
    35.2 48.6
25.76

## 

## Step:  AIC=6.62

## GNP.deflator ~ GNP Unemployed Population

## 

##    
  
  
   Df Sum of
Sq  RSS 
 AIC

##     
  
  
  
  
   14.7  6.62

## -
Unemployed  1 
    13.3 28.0
14.95

## -
Population  1 
    13.3 28.0
14.95

## - GNP    
  
 1 
    48.6 63.2
27.99

根据AIC 赤池信息准则,模型最后选择Unemployed、Population、GNP三个因变量参与建模。

查看进行逐步回归后的模型效果

summary(lm1.step)

## 

## Call:

## lm(formula = GNP.deflator ~ GNP Unemployed Population, data =
longley)

## 

## Residuals:

##    Min 
   1Q
Median 
   3Q 
  Max 

## -2.047
-0.682  0.196  0.696  1.435

## 

## Coefficients:

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

## (Intercept) 221.12959 
 48.97251   
4.52  0.00071 ***

## GNP    
  
   0.22010 
  0.03493   
6.30  3.9e-05 ***

## Unemployed   
0.02246   
0.00681   
3.30  0.00634
** 

## Population 
 -1.80501   
0.54692 
 -3.30  0.00634
** 

## ---

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

## 

## Residual standard error: 1.11 on 12 degrees of freedom

## Multiple
R-squared:  0.992,  Adjusted
R-squared:  0.989

## F-statistic:  472 on 3 and 12
DF,  p-value: 1.03e-12

从各判定指标可以看出,模型的结果是可喜的。参与建模的三个变量和截图的均是显著的。Multiple
R-squared高达0.992。数据分析师培训

05-11 13:54