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. 锁定文件失败 打不开磁盘“D:\vms\S1\CentOS 64 位.vmdk”或它所依赖的某个快照磁盘(强制关机后引起的问题)

    电脑强制关机后,centos系统启动失败,报异常:锁定文件失败 打不开磁盘“D:\vms\S1\CentOS 64 位.vmdk”或它所依赖的某个快照磁盘.解决办法:进入D:\vms\S1目录,删除下 ...

  2. 微信sdk 隐藏右上角菜单项

    wx.ready(function () { // 8.3 批量隐藏菜单项 wx.hideMenuItems({ menuList: [ 'menuItem:share:qq', //分享到QQ 'm ...

  3. Android Support 包的作用、用法

    1, Android Support V4, V7, V13是什么?本质上就是三个java library. 2,  为什么要有support库?如果在低版本Android平台上开发一个应用程序,而应 ...

  4. 如何上传文件到git

    具体有三大步骤: 一.创建新的仓库 二.本地仓库 三.git命令上传(需要下载git) 一.创建新的仓库   二.本地仓库 其实这个本地仓库就是文件的所在地,在哪都可以 三.git命令上传(需要下载g ...

  5. ajax跨域请求使用代理

    public class ProxyHandler extends HttpServlet {    private static final long serialVersionUID = 1L;  ...

  6. python爬取(自动化)豆瓣电影影评,并存储。

    from selenium import webdriverfrom selenium.webdriver import ActionChainsimport time driver = webdri ...

  7. Resource Archiver HDU - 3247 AC自动机+BFS+状压

    题意: 给出n个资源串,m个病毒串,现在要如何连接资源串使得不含病毒串(可以重叠,样例就是重叠的). 题解: 这题的套路和之前的很不同了,之前的AC自动机+DP的题目一般都是通过teir图去转移, 这 ...

  8. python语句结构(if判断语句)

    一.python语句结构分类 条件控制语句:if 语句 if....elif语句 if嵌套 循环语句:while语句    for循环 控制语句:break.continue.pass语句 二.pyt ...

  9. Lotus Blossom 行动分析

    1 漏洞介绍 1.1 代号 - Lotus Blossom行动 漏洞利用率很高 从2012 -2015或者说最近都还在使用 CVE-2012-0158 Lotus Blossom--莲花: 描述了对东 ...

  10. Easy Excel导出

    @GetMapping(value = "/down2") public void down2(HttpServletResponse response) throws Excep ...