Stata里的多重共线性检验-方差膨胀系数 (VIF)

自变量的多重共线性问题是多元线性回归分析中最常见的问题之一, 它是指一个解释变量的变化引起另一个解释变量的变化. 按照我们的假设, 一个线性模型中的各个变量应该是各自独立的, 根据回归分析结果, 就能知道哪个自变量对因变量有显著影响. 如果各个自变量之间有很强的线性关系, 当其中一个自变量变化时, 也会引起其他与它相关的变量的变化, 这样就无法固定其他变量, 也就找不到自变量和因变量之间真实的关系了. 因此我们需要解决多重共线性问题.

在统计中, 我们用方差膨胀系数 (variance inflation factor) 来衡量多元线性回归模型中多重共线性 (multicollinearity) 的严重程度. VIF表示回归系数估计量的方差与假设自变量间不线性相关时方差相比的比值, 当然, 回归系数的估计量是用OLS, 也就是我们熟知的最小二乘法得到的. 方差膨胀系数是我们判断自变量之间多重共线性的一个重要判别指标.

为了检验模型是否存在多重共线性, 我们可以通过查看VIF的大小, 通常我们以10作为判断边界, 当VIF<10,不存在多重共线性; 当10<=VIF<100, 存在较强的多重共线性; 当VIF>=100, 模型则存在严重多重共线性.

在这篇文章里, 我会为大家介绍如何使用Stata得到相对应于每一个变量的VIF, 从而进一步判断哪两/几个变量之间存在多重共线性的问题. 我所使用到的数据来自Stata自带的auto.dta数据库.


示例1

在示例1的分析中, 我想要考察价格与车行驶的英里数, 1978年的维修记录, 车身重量和发动机排量的关系. 所对应的因变量是price, 自变量依次是price, mpg, rep78, weight和displacement. 首先我们进行多元线性回归:

sysuse auto
regress price mpg rep78 weight displacement

Stata的输出结果如下:

从输出结果我们可以看出, 除了自变量rep87以外, 其余的自变量都对模型没有显著影响. 我们假设这有可能是由多重共线性引起的.

接着我们通过使用estat vif命令来考察每一个自变量的方差膨胀系数(VIF). 此次示例中我会以10作为判断边界. 在命令窗口输入:

estat vif

Stata的输出结果如下:

从这个结果我们可以看出, 即使每一个自变量的值都没有超过10, 但是却非常接近10, 平均方差膨胀系数也远大于1. 为了判断哪几个变量之间存在多重共线性, 我将会使用correlate这个命令 来进一步判断. 在命令窗口输入:

correlate weight displacement mpg rep78

我们会得到如下的输出结果:

从这个结果我们可以看出, 自变量weight与displacement之间高度相关 (相关系数为0.9316). 这个结果并不出乎我们的意料, 因为随着车身重量的增加, 汽车的排放量也会增加. 这两个变量实际上在测量同一件事情. 也就是说如果我们把两个变量都考虑进我们的模型中, 会影响模型的精确性, 因此我们可以将这两个变量中的其中一个移除出模型, 然后再进行一次多元线性回归分析:

regress price mpg rep78 weight

同样地, 我们再一次使用estat vif命令来考察单个变量的方差膨胀系数, 在命令窗口输入:

estat vif

在移除了变量displacement后, 每一个自变量的VIF都得到显著改善.


示例2

接下来我会再为大家举一个例子. 与上一个例子不同的是, 这一次存在多重共线性的两个变量不是可以相互替代的变量, 而是彼此之间互相影响同增同减的比例变量. 这一次我们的因变量还是汽车的价格 (price), 因变量我选择考察英里数(mpg), 维修记录(rep78), 重量(weight)和长度(length):

regress price mpg rep78 weight length
estat vif

我们注意到自变量weight和length的VIF已经超过10, 说明这两个变量之间可能存在多重共线性. 实际上, 我们通过直觉也可以判断出这两个变量之间是相关的. 一般来说, 汽车越重, 其长度也会相对较长. 为了客观说明这一点, 我们依旧用correlate命令来检测两者的相关系数:

correlate weight length mpg rep78

可以看到weight和length之间的相关系数很高, 为0.9478, 这并不出乎我们所料.但接下来我们需要考虑如何处理这两个变量才能消除多重共线性. 像前一个例子中那样对变量之间进行取舍显然不适合这个例子, 因为长度和重量虽然相关, 但它们测量的内容却不一样, 测量单位也不同; 如果舍去其中一个变量, 将会使模型的预测能力下降. 在这种情况下, 我们可以考虑将这两个变量作适当调整, 通过一个新的既能展示长度又能说明重量的变量来代替这两个变量. 也就是说, 我们对这两个变量组合, 取而代之的是一个新的变量. 我的具体做法如下, 在命令窗口输入:

generate weight_per_length = weight/length
label variable weight_per_length "Weight in pounds per inch of length"

这样我就通过generate命令创建了一个新的叫weight_per_length的自变量. 它代表了汽车每英尺的重量. 这样我们就通过一个变量将重量和长度完美结合在了一起. 接下来我们就可以再一次进行多元线性回归分析并且查看新模型中每一个自变量的VIF:

regress price mpg rep78 weight_per_length
estat vif

通过调整变量, 将相关的变量组合产生一个新的自变量, 多重共线性得到了有效的改善, 新模型中单个自变量的VIF都减小了.


其实解决多重共线性还有很多种其他的方法. 除了我为大家展示的去掉次要或可替代解释变量和改变解释变量的形式将变量组合之外, 其他常见的方法还有差分法, 逐步回归分析 (Stepwise Regression), 主成份分析 (Principal Component Analysis), 偏最小二乘回归, 岭回归以及增加样本容量. 在很多实际问题中, 很多多重共线性是由于样本容量不足, 我们会发现在提高样本容量之后, 多重共线性就会得到很好的改善.


如果您对在Stata里使用任何一种方法来消除多重共线性想有更深入的了解, 请发送邮件至sales@surveydesign.com.au, 我们会竭力帮助您.

35 views0 comments

Recent Posts

See All

© 2020 by Survey Design and Analysis Services. 

  • LinkedIn
  • Facebook
  • Twitter
  • YouTube