65

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

发现共线性的一种方法是将每个预测变量作为因变量,将其他预测变量作为自变量,确定 R 2,如果它大于 0.9(或 0.95),我们可以认为预测变量是多余的。这是一种“方法”……其他方法呢?其中一些是耗时的,例如从模型中排除预测变量并观察 b 系数变化——它们应该明显不同。

当然,我们必须始终牢记分析的具体背景/目标......有时,唯一的补救措施是重复研究,但现在,我对在(多重)共线性时筛选冗余预测变量的各种方法感兴趣发生在回归模型中。

4

5 回答 5

40

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)详细信息。

于 2010-06-15T02:58:13.353 回答
35

只是为了补充 Dirk 关于 Condition Number 方法的说法,一个经验法则是CN > 30 indicate severe collinearity. 除条件编号外,其他方法包括:

1) 协方差矩阵的行列式,范围从 0(完全共线性)到 1(无共线性)

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

2) 利用对角矩阵的行列式是特征值的乘积这一事实 => 一个或多个小特征值的存在表明共线性

> 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。当至少一个自变量的 VIF 较大时,存在共线性。经验法则:VIF > 10 is of concern。对于 R 中的实现,请参见此处。我还想评论说,使用 R^2 来确定共线性应该与散点图的视觉检查同时进行,因为单个异常值可以“导致”不存在的共线性,或者可以隐藏它存在的共线性.

于 2010-06-15T08:23:07.797 回答
19

您可能会喜欢 Vito Ricci 的参考卡“回归分析的 R 函数” http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf

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

对多重共线性的考虑通常与评估变量重要性的问题密切相关。如果这适用于您,也许查看relaimpo软件包: http: //prof.beuth-hochschule.de/groemping/relaimpo/

于 2010-06-15T09:08:29.503 回答
9

另请参见本书中的第 9.4 节:使用 R [Faraway 2002] 的实用回归和方差分析

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

  1. 检查预测变量的相关矩阵将揭示大的成对共线性。

  2. x_i 在所有其他预测变量上的回归给出 R^2_i。对所有预测变量重复。接近 1 的 R^2_i 表示存在问题——可能会找到有问题的线性组合。

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

于 2010-06-15T07:50:52.007 回答
8

由于到目前为止没有提到VIF,我将添加我的答案。Variance Inflation Factor>10 通常表示预测变量之间存在严重冗余。VIF 表示如果一个变量与其他变量的相关性不高,则该变量的系数方差会增加的因素。

vif()在包中可用cars并应用于类(lm)的对象。它返回 x1, x2 的 vif。. . xn 在对象中lm()。排除 vif > 10 的变量或对 vif > 10 的变量进行转换是一个好主意。

于 2014-07-25T20:50:05.917 回答