1

我正在运行一个序数回归模型。我有 8 个解释变量,其中 4 个是分类变量('0''1'),其中 4 个是连续的。事先我想确保没有多重共线性,所以我使用方差膨胀因子(汽车包中的vif函数):

mod1<-polr(Y ~ X1+X2+X3+X4+X5+X6+X7+X8, Hess = T, data=df)
vif(mod1)

但我得到一个变量的 VIF 值为 125,以及以下警告:

警告消息:在 vif.default(mod1) 中:无拦截:vifs 可能不明智。

但是,当我将因变量转换为数字(而不是因子)时,并使用线性模型做同样的事情:

mod2<-lm(Y ~ X1+X2+X3+X4+X5+X6+X7+X8, data=df)
vif(mod2)

这次所有的 VIF 值都低于 3,表明不存在多重共线性。

我对vif功能感到困惑。它如何返回一个模型的 VIF > 100 和另一个模型的低 VIF?我应该坚持第二个结果并仍然做一个序数模型吗?

4

1 回答 1

1

vif()函数使用参数(及其子集)的相关矩阵的行列式来计算 VIF。在线性模型中,这仅包括回归系数(不包括截距)。这vif()函数不打算与有序的 logit 模型一起使用。因此,当它找到参数的方差-协方差矩阵时,它包括阈值参数(即截距),通常会被线性模型中的函数排除。这就是您收到警告的原因 - 它不知道查找阈值参数并删除它们。由于 VIF 实际上是设计矩阵中的互相关函数(它不依赖于因变量或从线性预测变量到响应变量空间的非线性映射 [即,a 中的链接函数glm]),您应该使用上面的第二个解决方案获得正确的答案,使用lm()您的因变量的数字版本。

于 2020-09-08T19:45:34.907 回答