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. CF459E Pashmak and Graph (Dag dp)

    传送门 解题思路 \(dag\)上\(dp\),首先要按照边权排序,然后图都不用建直接\(dp\)就行了.注意边权相等的要一起处理,具体来讲就是要开一个辅助数组\(g[i]\),来避免同层转移. 代码 ...

  2. hibernate_01_SSH环境搭建

    1.maven工程pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="h ...

  3. 杂项-日志:日志(log)

    ylbtech-杂项-日志:日志(log) 1.返回顶部 1. 概述 网络设备.系统及服务程序等,在运作时都会产生一个叫log的事件记录:每一行日志都记载着日期.时间.使用者及动作等相关操作的描述. ...

  4. winform的datagridview控件滚动更新数据

    范例源码下载地址:http://files.cnblogs.com/files/luoxiaozhao/PrintDemo.rar

  5. Acess link

  6. IDEA 创建普通的maven+java Project

    最近想把以前积累的零散java练习和学习的东西建一个项目整理出来上传到码云托管,免得电脑挂了啥也找不到 配置是IDEA2017+java8+maven3.2.5,截图记录下步骤 第一步:File--& ...

  7. USACO 2009 Open Grazing2 /// DP+滚动数组oj26223

    题目大意: 输入n,s:n头牛 s个栅栏 输入n头牛的初始位置 改变他们的位置,满足 1.第一头与最后一头的距离尽量大 2.相邻两头牛之间的距离尽量满足 d=(s-1)/(n-1),偏差不超过1 3. ...

  8. VMware Workstation 10 配置Ubuntu环境

    分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开心网 腾讯朋友 百度贴吧 豆瓣网 搜狐微博 百度新首页 QQ好友 和讯微博 更多... 百度分享 VMware Work ...

  9. JavaScript特效源码(1、文字特效)

    注:本文以及以下关于Javascript特效源码都是分享自JavaScript源码大全. 1.逐隐逐现的的特效 逐隐逐现的文字特效[推荐使用][适用于IE4++] (修改显示的文字后根据说明进行共2步 ...

  10. naptime

    naptime 有一个长度为n的序列\(a_i\),首尾相接组成了一个环,现在要在这个环上选出若干个区间,使区间长度之和恰好为b,然后忽略区间的顺时针开头元素,权值累加区间中所有的数字,问权值的最大值 ...