计算 R 中有序逻辑回归和多重共线性的 VIF
Calculating VIF for ordinal logistic regression & multicollinearity in R
我是运行一个有序回归模型。我有 8 个解释变量,其中 4 个是分类变量 ('0' or '1') ,其中 4 个是连续变量。事先我想确定没有多重共线性,所以我使用方差 inflation 因子(vif 函数来自 car 包):
mod1<-polr(Y ~ X1+X2+X3+X4+X5+X6+X7+X8, Hess = T, data=df)
vif(mod1)
但我得到其中一个变量的 VIF 值为 125,以及以下警告:
Warning message: In vif.default(mod1) : No intercept: vifs may not be sensible.
但是,当我将因变量转换为数字(而不是因子),并用线性模型做同样的事情时:
mod2<-lm(Y ~ X1+X2+X3+X4+X5+X6+X7+X8, data=df)
vif(mod2)
这次所有的VIF值都在3以下,说明不存在多重共线性。
我对 vif 函数感到困惑。怎么可能 return 一个模型的 VIF > 100 而另一个模型的 VIF 很低?我是否应该坚持第二个结果并仍然使用序数模型?
vif()
函数使用参数(及其子集)的相关矩阵的行列式来计算 VIF。在线性模型中,这仅包括回归系数(不包括截距)。 vif()
函数不适用于有序的 logit 模型。因此,当它找到参数的 variance-covariance 矩阵时,它包括阈值参数(即截距),这通常会被线性模型中的函数排除。这就是您收到警告的原因 - 它不知道查找阈值参数并将其删除。由于 VIF 实际上是设计矩阵中 inter-correlations 的函数(它不依赖于因变量或从线性预测变量到响应变量 space 的 non-linear 映射[即 glm 中的 link 函数]),您应该使用上面的第二个解决方案获得正确答案,使用 lm()
和因变量的数字版本。
我是运行一个有序回归模型。我有 8 个解释变量,其中 4 个是分类变量 ('0' or '1') ,其中 4 个是连续变量。事先我想确定没有多重共线性,所以我使用方差 inflation 因子(vif 函数来自 car 包):
mod1<-polr(Y ~ X1+X2+X3+X4+X5+X6+X7+X8, Hess = T, data=df)
vif(mod1)
但我得到其中一个变量的 VIF 值为 125,以及以下警告:
Warning message: In vif.default(mod1) : No intercept: vifs may not be sensible.
但是,当我将因变量转换为数字(而不是因子),并用线性模型做同样的事情时:
mod2<-lm(Y ~ X1+X2+X3+X4+X5+X6+X7+X8, data=df)
vif(mod2)
这次所有的VIF值都在3以下,说明不存在多重共线性。
我对 vif 函数感到困惑。怎么可能 return 一个模型的 VIF > 100 而另一个模型的 VIF 很低?我是否应该坚持第二个结果并仍然使用序数模型?
vif()
函数使用参数(及其子集)的相关矩阵的行列式来计算 VIF。在线性模型中,这仅包括回归系数(不包括截距)。 vif()
函数不适用于有序的 logit 模型。因此,当它找到参数的 variance-covariance 矩阵时,它包括阈值参数(即截距),这通常会被线性模型中的函数排除。这就是您收到警告的原因 - 它不知道查找阈值参数并将其删除。由于 VIF 实际上是设计矩阵中 inter-correlations 的函数(它不依赖于因变量或从线性预测变量到响应变量 space 的 non-linear 映射[即 glm 中的 link 函数]),您应该使用上面的第二个解决方案获得正确答案,使用 lm()
和因变量的数字版本。