我希望这个问题不会成为“问答”的问题......这里有: (多)共线性是指回归模型中预测变量之间的极高相关性。如何治愈它们......好吧,有时你不需要“治愈”共线性,因为它不会影响回归模型本身,而是解释个体预测因子的影响。
发现共线性的一种方法是将每个预测变量作为因变量,将其他预测变量作为自变量,确定R 2 ,如果它大于.9(或.95),我们可以考虑预测器冗余。这是一种“方法”......其他方法呢?其中一些是耗时的,比如从模型中排除预测变量并观察b系数变化 - 它们应该明显不同。
当然,我们必须始终牢记分析的具体背景/目标......有时,只有补救措施才能重复研究,但是现在,我对筛选多余预测因子的各种方法感兴趣(多重共线性发生在回归模型中。
答案 0 :(得分:39)
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)
。
答案 1 :(得分:34)
只是添加Dirk所说的条件数方法,一条经验法则是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)使用对角矩阵的行列式是特征值=&gt;的乘积的事实。一个或多个小特征值的存在表明共线性
> 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中的实现,请参阅here。我还想评论使用R ^ 2来确定共线性应该与散点图的视觉检查同时进行,因为单个异常值可以“导致”不存在的共线性,或者可以隐藏共存性。
答案 2 :(得分:17)
你可能会喜欢Vito Ricci的参考卡“R函数用于回归分析” http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf
它简洁地列出了R中许多有用的回归相关函数,包括诊断函数。
特别是,它列出了vif
包中可以评估多重共线性的car
函数。
http://en.wikipedia.org/wiki/Variance_inflation_factor
多重共线性的考虑通常与评估变量重要性的问题密切相关。如果这适用于您,请查看relaimpo
包:http://prof.beuth-hochschule.de/groemping/relaimpo/
答案 3 :(得分:8)
另见本书第9.4节:Practical Regression and Anova using R [Faraway 2002]。
可以通过多种方式检测共线性:
对预测变量的相关矩阵的检验将揭示出大的成对共线性。
x_i对所有其他预测变量的回归得出R ^ 2_i。对所有预测变量重复。接近1的R ^ 2_i表示存在问题 - 可以找到有问题的线性组合。
检查t(X) %*% X
的特征值,其中X
表示模型矩阵;小的特征值表明存在问题。 2范数条件数可以显示为矩阵的最大非零奇异值的比率($ \ kappa = \ sqrt {\ lambda_1 / \ lambda_p} $;请参阅?kappa
) ; \kappa >= 30
被认为很大。
答案 4 :(得分:7)
由于目前尚未提及VIF,我将添加我的答案。方差膨胀因子> 10通常表示预测变量之间的严重冗余。 VIF表示如果变量与其他变量不高度相关,变量系数的方差会增加的因素。
vif()
在包cars
中可用,并应用于类(lm)的对象。它返回x1,x2的vif。 。 。对象lm()
中的xn。最好使用vif> 10排除变量,或者使用vif> 10将变换引入变量。