處理多重共線性
我了解到,使用封裝
vif()
方法car
,我們可以計算模型中輸入的多重共線性程度。從wikipedia中,如果該vif
值大於5
那麼我們可以認為輸入存在多重共線性問題。例如,我使用lm()
方法開發了一個線性回歸模型,並vif()
給出如下。正如我們所見,輸入ub
、lb
和tb
受到多重共線性的影響。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 測試的誤差也沒有太大差異。我的問題是:
- 是否可以通過如上所示的交互來避免多重共線性問題?
- 與上述 vif 方法的結果相比,有沒有更好的方法來呈現多重共線性問題。
請給我你的建議。
謝謝。
您似乎將交互項包括在內,
ub:lb
但不包括它們本身作為單獨的預測變量。這將違反所謂的“邊際原則”,該原則指出高階項應僅包括低階項中存在的變量(首先是維基百科)。實際上,您現在包含一個預測變量,它只是和的元素乘積。ub``lb``ub``lb
只是在哪裡是個使用原始預測變量運行回歸時的值作為所有剩餘預測變量預測的標準(它也是-th 的對角元素,預測變量的相關矩陣的逆)。因此,VIF 值為 50 表示您獲得了與其他預測器一起預測時為 0.98
ub
,表明這ub
幾乎是完全多餘的(對於lb
,0.97)。我將開始做預測變量之間的所有成對相關,並運行上述回歸以查看哪些變量可以預測
ub
並lb
查看冗餘是否易於解釋。如果是這樣,您可以刪除多餘的預測變量。您還可以查看嶺回歸(lm.ridge()
來自MASS
R 中的包)。更高級的多重共線性診斷使用在哪裡是回歸的設計矩陣(即所有預測變量作為列向量)。條件是在哪裡和是最大和最小的() 的特徵值. 在 R 中,您可以使用
kappa(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)))
肯定會有所不同。