Python 多重共線性檢驗

2021-10-21 22:57:13 字數 1951 閱讀 7850

共線性問題指的是輸入的自變數之間存在較高的線性相關度。共線性問題會導致回歸模型的穩定性和準確性大大降低,另外,過多無關的維度計算也很浪費時間。

樣本量太少,導致部分資料以外的呈現線性關係

由於某些原因,導致多個變數的變化趨勢一致

vif是容忍度的倒數,值越大則共線性問題越明顯,通常以10作為判斷邊界。當vif<10,不存在多重共線性;當10<=vif<100,存在較強的多重共線性;當vif>=100, 存在嚴重多重共線性。

import pandas as pd

from statsmodels.stats.outliers_influence import variance_inflation_factor

import numpy as np

x = pd.dataframe(np.random.rand(

100,8)

)# 當vif<10,說明不存在多重共線性;當10<=vif<100,存在較強的多重共線性,當vif>=100,存在嚴重多重共線性

vif =

[variance_inflation_factor(x.values, x.columns.get_loc(i)

)for i in x.columns]

容忍度是每個自變數作為因變數對其他自變數進行回歸建模時得到的殘差比例,大小用1減得到的決定係數來表示。容忍度值越**明這個自變數與其他自變數間越可能存在共線性問題。

import pandas as pd

from statsmodels.stats.outliers_influence import variance_inflation_factor

import numpy as np

x = pd.dataframe(np.random.rand(

100,8)

)# 當vif<10,說明不存在多重共線性;當10<=vif<100,存在較強的多重共線性,當vif>=100,存在嚴重多重共線性

tol =[1

./variance_inflation_factor(x.values, x.columns.get_loc(i)

)for i in x.columns]

print

(tol)

該方法實際上就是對自變數做主成分分析,如果多個維度的特徵值等於0,則可能有比較嚴重的共線性。

import pandas as pd

import numpy as np

x = pd.dataframe(np.random.rand(8,

8))# 計算特徵必須為矩陣才行,也可以對缺失的地方補0

eigenvalue, featurevector = np.linalg.eig(x)

如果相關係數r>0.8時就可能存在較強相關性

import pandas as pd

import numpy as np

x = pd.dataframe(np.random.rand(

100,8)

)print

(x.corr(

))

增大樣本量:增大樣本量可以消除由資料量不足而出現的偶然的共線性現象。

做差分:對於時間序列來講一階差分可以有效地消除多重共線性。

嶺回歸法(ridge regression):通過放棄最小二乘法的無偏性,以損失部分資訊、降低精度為代價來獲得更實際和可靠性更強的回歸係數。

逐步回歸法(stepwise regression):每次引入乙個自變數進行統計檢驗,然後逐步引入其他變數,同時對所有變數的回歸係數進行檢驗,如果原來引入的變數由於後面變數的引入而變得不再顯著,那麼久將其剔除,逐步得到最有回歸方程。

主成分回歸(principal components regression):通過主成分分析,使用pca降維後再建模。

對於高共線性且價值不大的資料直接刪除即可。

多重共線性

多重共線性的概念 模型解釋變數之間存在完全線性相關或不完全線性相關關係 產生的原因 1 特徵變數之間的內在聯絡 2 特徵變數在時間上有同方向變動的趨勢 3 某些變數的滯後 檢驗的方法 1 相關性分析 2 方差膨脹因子 方差膨脹因子 variance inflation factor,vif 容忍度的...

r語言多重共線性 統計基礎 多重共線性

僅用於個人學習知識整理和sas r語言 python 整理 該文章首發於csdn 正在遷移優化文章中 1.定義 則稱自變數間存在完全多重共線性 2.影響 3.診斷 另外找到乙個比較詳細的診斷方法的列舉 線性回歸多重共線性的診斷方法和r語言實現 線性回歸多重共線性的診斷方法和r語言實現 資料分析與資料...

多重共線性處理方法

自變數 解釋變數 之間彼此相關的現象,我們稱這種現象為多重共線性。手動移除出共線性的變數 先做下相關分析,如果發現某兩個自變數x 解釋變數 的相關係數值大於0.7,則移除掉乙個自變數 解釋變數 然後再做回歸分析。此方法是最直接的方法,但有的時候我們不希望把某個自變數從模型中剔除,這樣就要考慮使用其他...