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])

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。数据分析师培训

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

  1. 用R语言 做回归分析

    使用R做回归分析整体上是比较常规的一类数据分析内容,下面我们具体的了解用R语言做回归分析的过程. 首先,我们先构造一个分析的数据集 x<-data.frame(y=c(102,115,124,1 ...

  2. R语言 逐步回归分析

    逐步回归分析是以AIC信息统计量为准则,通过选择最小的AIC信息统计量,来达到删除或增加变量的目的. R语言中用于逐步回归分析的函数 step()    drop1()     add1() #1.载 ...

  3. R语言 线性回归分析实例 《回归分析与线性统计模型》page72

    y,X1,X2,X3 分别表示第 t 年各项税收收入(亿元),某国生产总值GDP(亿元),财政支出(亿元)和商品零售价格指数(%). (1) 建立线性模型: ① 自己编写函数: > librar ...

  4. R语言实战(一)介绍、数据集与图形初阶

    本文对应<R语言实战>前3章,因为里面大部分内容已经比较熟悉,所以在这里只是起一个索引的作用. 第1章       R语言介绍 获取帮助函数 help(), ? 查看函数帮助 exampl ...

  5. R语言使用 multicore 包进行并行计算

    R语言是单线程的,如果数据量比较大的情况下最好用并行计算来处理数据,这样会获得运行速度倍数的提升.这里介绍一个基于Unix系统的并行程序包:multicore. 我们用三种不同的方式来进行一个简单的数 ...

  6. R语言与概率统计(一) 描述性统计分析

      #查看已安装的包,查看已载入的包,查看包的介绍 ########例题3.1 #向量的输入方法 w<-c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 6 ...

  7. [译]用R语言做挖掘数据《二》

    数据探索 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: ...

  8. jupyter notebook 中同时添加Python2和3,在conda下配置R语言运行的环境

    1.第一步,安装Python2的环境 首先,在安装anaconda的时候先选择一个Python安装,我先安装的是Python3 然后,在anaconda Prompt下创建Python2环境 现在,还 ...

  9. 利用R语言进行交互数据可视化(转)

    上周在中国R语言大会北京会场上,给大家分享了如何利用R语言交互数据可视化.现场同学对这块内容颇有兴趣,故今天把一些常用的交互可视化的R包搬出来与大家分享. rCharts包 说起R语言的交互包,第一个 ...

随机推荐

  1. 图片压缩(js压缩,底部有vue压缩图片依赖使用的教程链接)

    directTurnIntoBase64(fileObj, callback) { var r = new FileReader(); // 转成base64 r.onload = function( ...

  2. idea for mac 项目打开的情况下import project

    commad + ,进入设置页面,搜索框输入menu,选择file下面的任意一个都行: 点击打开的窗口中的others 不需要重启 参考:https://blog.csdn.net/zengxiaos ...

  3. 数据类中引用virtual

    public class City { [Key] public int CityID { set; get; } [Display(Name = "城市名称")] [Requir ...

  4. js input框限制输入为数字并限制长度

    <input type="number" name="price" id="priceVal" placeholder="请 ...

  5. vue/cli 3.0脚手架搭建

    在vue 2.9.6中,搭建vue-cli脚手架的流程是这样的: 首先 全局安装vue-cli,在cmd中输入命令: npm install --global vue-cli  安装成功:  安装完成 ...

  6. IPMI 远程配置

    #重启ipmi服务 #重启ipmi服务 #将 channel 1 设置为静态 IP #设置 IP #设置 channel 1 掩码 #设置 channel 1 网关 #查看用户名及 ID #设置ID号 ...

  7. 辨析JspWriter和PrintWriter

    JspWriter和PrintWriter的区别? JspWriter相当于带缓冲的PrintWriter 如何控制out缓冲? 通过设置JSP页面page指令的buffer属性, 可以调整out缓冲 ...

  8. 今天介绍一个渐变的方法,在shell里面自动生成注释简介

    在编辑sh脚本时,我经常在shell中写一些注释.今天我介绍一种渐变方法,它可以在每次vim shell脚本时自动在shell中生成注释和其他信息. 让我们共享一个shell脚本模板文件,将其复制到用 ...

  9. 廖雪峰Java14Java操作XML和JSON-1XML-4第三方XML库

    总结: 使用Jackson可以快速在XML和JavaBean之间互相转换 可使用Annotation定制序列化和反序列化

  10. 数据交互 axios 的使用

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. ##Axios npm version build status code coverage npm ...