处理多重共线性

机器算法验证 多重共线性
2022-03-26 07:39:32

我了解到,使用封装vif()方法car,我们可以计算模型中输入的多重共线性程度。wikipedia中,如果该vif值大于5那么我们可以认为输入存在多重共线性问题。例如,我使用lm()方法开发了一个线性回归模型,并vif()给出如下。正如我们所见,输入ublbtb受到多重共线性的影响。

 vif(lrmodel)
     tb        ub        lb          ma     ua        mb         sa     sb 
 7.929757 50.406318 30.826721  1.178124  1.891218  1.364020  2.113797  2.357946

为了避免多重共线性问题,从而使我的模型更加健壮,我在ub和之间进行了交互lb,现在新模型的 vif 表如下:

   tb     ub:lb      ma       mb      sa        sb     ua
1.763331 1.407963 1.178124 1.327287 2.113797 1.860894 1.891218

在上述两种情况下,R^2值没有太大差异,并且一次性 CV 测试的误差也没有太大差异。

我的问题是:

  1. 是否可以通过如上所示的交互来避免多重共线性问题?

  2. 与上述 vif 方法的结果相比,有没有更好的方法来呈现多重共线性问题。

请给我你的建议。

谢谢。

2个回答

您似乎将交互项包括在内ub:lb但不包括它们本身作为单独的预测变量。这将违反所谓的“边际原则”,该原则指出高阶项应该只包括低阶项中存在的变量(首先是维基百科)。实际上,您现在包含一个预测变量,它只是和的元素乘积ublbublb

VIFj只是其中当您使用原始预测变量运行回归时作为所有剩余预测变量预测的标准(它也是个对角元素,预测变量的相关矩阵的逆)。因此,VIF 值为 50 表示您在使用其他预测变量进行预测时得到 0.98,这表明这几乎是完全冗余的(对于 0.97 相同为 0.97)。11Rj2Rj2R2jjRx1R2ubublbR2

我将开始做预测变量之间的所有成对相关,并运行上述回归以查看哪些变量可以预测ublb查看冗余是否易于解释。如果是这样,您可以删除多余的预测变量。您还可以查看岭回归(lm.ridge()来自MASSR 中的包)。

更高级的多重共线性诊断使用的特征值结构,其中是回归的设计矩阵(即,所有预测变量都作为列向量)。条件其中是最大和最小( )的特征值。在 R 中,您可以使用,其中模型通常使用标准化变量。XtXXκλmaxλminλmaxλmin0XtXkappa(lm(<formula>))lm()

在几何上,让您了解由预测变量形成的数据云的形状。如果有 2 个预测变量,散点图可能看起来像一个带有 2 个主轴的椭圆。然后告诉你椭圆是多么“平坦”,即,是最大轴长度与最小主轴长度之比的度量。使用 3 个预测变量,您可能有一个雪茄形状和 3 个主轴。您的数据云在某个方向上越“平坦”,变量放在一起时就越冗余。κκ

的非关键值有一些经验法则(我听说不到 20)。但请注意,在仅仅改变变量单位的数据转换下这与 VIF 不同:将给您相同的结果(只要模型中没有乘法项),但几乎肯定会有所不同。κκvif(lm(y ~ x1 + x2))vif(lm(scale(y) ~ scale(x1) + scale(x2)))kappa(lm(y ~ x1 + x2))kappa(lm(scale(y) ~ scale(x1) + scale(x2)))

在变量考虑期间,您还应该考虑 P 值。

  1. 如果 P 值非常低(p<0.05),那么 VIF 很高(>5),那么您可能应该考虑其他无关紧要的变量。并重建你的模型。
  2. 如果您的 P 值和 VIF 都很高,那么这个变量将是微不足道的。