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. poj 1742 Coins(二进制优化多重背包)

    传送门 解题思路 多重背包,二进制优化.就是把每个物品拆分成一堆连续的\(2\)的幂加起来的形式,然后把最后剩下的也当成一个元素.直接类似\(0/1\)背包的跑就行了,时间复杂度\(O(nmlogc) ...

  2. Activity详解一 配置、启动和关闭activity转载 https://www.cnblogs.com/androidWuYou/p/5887726.html

    先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...

  3. 快速搭建Bootstrap

    粘贴下面代码,快速开启Bootstrap的搭建: <!DOCTYPE html> <html lang="en"> <head> <met ...

  4. vue swiper异步加载轮播图,并且懒加载

    参考:https://blog.csdn.net/weixin_38304202/article/details/78282826 效果: 此处安装省略 vue: <div class=&quo ...

  5. java_List接口

    /** * java.util.list接口 extends Collection接口 * 1.有序的集合 * 2.有索引 * 3.元素可以重复 * * List中带索引的方法: *add:添加 * ...

  6. axios——post请求时把对象obj数据转为formdata格式

    转载自:https://blog.csdn.net/feizhong_web/article/details/80514436  在调用后台接口的时候,上传报名信息,利用axios 的post请求,发 ...

  7. redis笔记_源码_内存分配

    文件:zmoalloc.h zmoalloc.c 1.求两个整数的余数 eg: 求_n对sizeof(long)的余数(_n&(sizeof(long)-1)), 性能提升为50%-100% ...

  8. HTML - 内嵌标签相关

    <html> <head></head> <body> <!-- iframe (内嵌标签) src : 要显示的网页资源路径(本地资源或网络资源 ...

  9. vue-router动态路由控制

    一.注册使用vue-router import Vue from 'vue' import Router from 'vue-router' Vue.use(Router); 二.编写动态路由注册函数 ...

  10. React项目开发经验汇总

    博客来源 小寒的博客   定义好全局配置信息 环境变量不要提取出来,配置信息提取出来 UI样式变量 定义好变量的作用不用多说 样式库建设 工具样式,复用性强的样式,这些class成为会是真个网站样式的 ...