筛选(多)共线性回归模型

我希望这个问题不会成为“问答”的问题……这里:(多)共线性是指回归模型中预测variables之间极高的相关性。 如何治疗他们……好吧,有时候你不需要“治愈”共线性,因为它不影响回归模型本身,而是解释单个预测因子的影响。

找出共线性的一种方法是将每个预测variables作为因variables,其他预测variables作为自variables来确定R 2 ,如果它大于.9(或.95),则可以考虑预测variables冗余。 这是一个“方法”…其他方法呢? 其中一些是耗时的,就像从模型中排除预测因素和观察b系数的变化 – 它们应该是明显不同的。

当然,我们必须时刻牢记分析的具体背景/目标…有时候,唯一的补救办法就是重复一次研究,但是现在,我对多种共线性筛选多余预测因子的各种方法感兴趣发生在回归模型中。

kappa()函数可以提供帮助。 这是一个模拟的例子:

 > set.seed(42) > x1 <- rnorm(100) > x2 <- rnorm(100) > x3 <- x1 + 2*x2 + rnorm(100)*0.0001 # so x3 approx a linear comb. of x1+x2 > mm12 <- model.matrix(~ x1 + x2) # normal model, two indep. regressors > mm123 <- model.matrix(~ x1 + x2 + x3) # bad model with near collinearity > kappa(mm12) # a 'low' kappa is good [1] 1.166029 > kappa(mm123) # a 'high' kappa indicates trouble [1] 121530.7 

我们进一步通过使第三个回归者越来越共线:

 > x4 <- x1 + 2*x2 + rnorm(100)*0.000001 # even more collinear > mm124 <- model.matrix(~ x1 + x2 + x4) > kappa(mm124) [1] 13955982 > x5 <- x1 + 2*x2 # now x5 is linear comb of x1,x2 > mm125 <- model.matrix(~ x1 + x2 + x5) > kappa(mm125) [1] 1.067568e+16 > 

这使用近似值,请参阅help(kappa)的细节。

为了增加Dirk所说的条件数方法,一条经验法则是CN > 30 indicate severe collinearityCN > 30 indicate severe collinearity 。 除条件编号外,其他方法还包括:

1)协方差matrix的行列式从0(Perfect Collinearity)到1(No Collinearity)

 # using Dirk's example > det(cov(mm12[,-1])) [1] 0.8856818 > det(cov(mm123[,-1])) [1] 8.916092e-09 

2)使用对angularmatrix的行列式是特征值的乘积的事实=>一个或多个小特征值的存在表示共线性

 > eigen(cov(mm12[,-1]))$values [1] 1.0876357 0.8143184 > eigen(cov(mm123[,-1]))$values [1] 5.388022e+00 9.862794e-01 1.677819e-09 

3)方差膨胀因子(VIF)的值。 预测因子i的VIF是1 /(1-R_i ^ 2),其中R_i ^ 2是预测因子i对其余预测因子的回归的R ^ 2。 当至less有一个独立variables的VIF很大时,共线是存在的。 经验法则: VIF > 10 is of concern 。 在R中的实现请参见这里 。 我还想评论一下,使用R ^ 2来确定共线性应当与散点图的视觉检查结合起来,因为一个单独的exception值可以导致它不存在的共线性,或者它可能存在的共线性。

你可能会喜欢维托里奇的参考卡“回归分析Rfunction” doc/contrib/Ricci-refcard-regression.pdf

它简洁地列出了R中许多有用的回归相关函数,包括诊断函数。 特别是它列出了可以评估多重共线性的car包装的vif函数。 http://en.wikipedia.org/wiki/Variance_inflation_factor

对多重共线性的考虑经常与评估variables重要性的问题并行不悖。 如果这适用于你,也许看看relaimpo软件包: http : relaimpo

参见本书第9.4节: 实用回归和使用R的Anova [远景2002] 。

共线性可以通过几种方式检测:

  1. 预测variables的相关matrix的检验将揭示大的成对共线性。

  2. 所有其他预测因子的x_i的回归给出R ^ 2_i。 重复所有预测指标。 R ^ 2_i接近1表明存在问题 – 可以find有害的线性组合。

  3. 检查t(X) %*% X的特征值,其中X表示模型matrix; 小的特征值表示一个问题。 2-范数条件数可以表示为matrix的最大非奇异值与最小非零奇异值的比值($ \ kappa = \ sqrt {\ lambda_1 / \ lambda_p} $;参见?kappa ); \kappa >= 30被认为是大的。

由于目前为止还没有提到VIF,所以我会加上我的答案。 方差膨胀因子> 10通常表示预测variables之间的严重冗余。 VIF表示如果variables与其他variables不高度相关,则variables的系数的方差将增加的因子。

vif()在包装cars可用,并应用于类(lm)的对象。 它返回x1,x2的vif。 。 。 在对象lm() xn。 将vif> 10的variables排除在外或将变换引入vif> 10的variables是个好主意。