[英]Calculating VIF for ordinal logistic regression & multicollinearity in R
我正在運行序數回歸模型。 我有 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功能感到困惑。 它如何為一個模型返回大於 100 的 VIF 而為另一個模型返回低 VIF? 我應該堅持使用第二個結果並且仍然做一個序數模型嗎?
vif()
函數使用參數(及其子集)的相關矩陣的行列式來計算 VIF。 在線性模型中,這僅包括回歸系數(不包括截距)。 vif()
函數不打算與有序 logit 模型一起使用。 因此,當它找到參數的方差-協方差矩陣時,它包括閾值參數(即截距),這些參數通常會被線性模型中的函數排除。 這就是您收到警告的原因 - 它不知道查找閾值參數並將其刪除。 由於 VIF 實際上是設計矩陣中相互關聯的函數(它不依賴於因變量或從線性預測變量到響應變量空間的非線性映射 [即glm]),您應該通過上面的第二個解決方案得到正確的答案,使用lm()
和您的因變量的數字版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.