【问题标题】:Calculating VIF for ordinal logistic regression & multicollinearity in R为 R 中的序数逻辑回归和多重共线性计算 VIF
【发布时间】:2020-12-27 05:21:44
【问题描述】:

我正在运行一个序数回归模型。我有 8 个解释变量,其中 4 个是分类的 ('0''1') ,其中 4 个是连续的。事先我想确定没有多重共线性,所以我使用方差膨胀因子(car 包中的 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?我应该坚持第二个结果并仍然做一个序数模型吗?

【问题讨论】:

    标签: r multicollinearity


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 2017-05-14
      • 2013-07-24
      • 2014-06-26
      • 2021-05-02
      相关资源
      最近更新 更多