Python で多重共線性をテストする方法
回帰分析では、2 つ以上の予測変数が相互に高度に相関しており、回帰モデル内で固有または独立した情報が提供されない場合に多重共線性が発生します。
予測変数間の相関の程度が十分に高い場合、回帰モデルのフィッティングと解釈の際に問題が発生する可能性があります。
回帰モデルの多重共線性を検出する最も簡単な方法は、分散膨張係数 ( VIFと略されることが多い) として知られる指標を計算することです。
VIF は、モデル内の予測変数間の相関の強さを測定します。 1 から正の無限大までの値を取ります。
VIF 値を解釈するには、次の経験則を使用します。
- VIF = 1:モデル内の特定の予測子変数と他の予測子変数の間に相関関係はありません。
- VIF 1 ~ 5:モデル内の特定の予測変数と他の予測変数の間には中程度の相関があります。
- VIF > 5 : モデル内の特定の予測変数と他の予測変数の間に強い相関関係があります。
次の例は、モデル内の各予測子変数の VIF 値を計算することにより、Python の回帰モデルの多重共線性を検出する方法を示しています。
例: Python での多重共線性テスト
さまざまなバスケットボール選手に関する情報を含む次のパンダ データフレームがあるとします。
import pandas as pd #createDataFrame df = pd. DataFrame ({' rating ': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86], ' points ': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19], ' assists ': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5], ' rebounds ': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]}) #view DataFrame print (df) rating points assists rebounds 0 90 25 5 11 1 85 20 7 8 2 82 14 7 10 3 88 16 8 6 4 94 27 5 6 5 90 20 7 9 6 76 12 6 6 7 75 15 9 10 8 87 14 9 10 9 86 19 5 7
応答変数としてスコアリングを使用し、予測変数としてポイント、アシスト、およびリバウンドを使用して重線形回帰モデルを近似したいとします。
モデル内の各予測子変数のVIFを計算するには、 statsmodelsライブラリのvariance_inflation_factor()関数を使用できます。
from patsy import damatrices from statsmodels. stats . outliers_influence import variance_inflation_factor #find design matrix for regression model using 'rating' as response variable y , #create DataFrame to hold VIF values vive_df = pd. DataFrame () vive_df[' variable '] = X.columns #calculate VIF for each predictor variable vive_df[' VIF '] = [variance_inflation_factor(X. values , i) for i in range(X. shape [1])] #view VIF for each predictor variable print (viv_df) Variable VIF 0 101.258171 Intercept 1 1.763977 points 2 1.959104 assists 3 1.175030 rebounds
各予測子変数の VIF 値を確認できます。
- ポイント: 1.76
- アシスト: 1.96
- リバウンド: 1.18
注:この値は関係ないため、テンプレート内の「Intercept」の VIF は無視してください。
モデル内の予測子変数の VIF 値はそれぞれ 1 に近いため、モデル内で多重共線性は問題になりません。
追加リソース
次のチュートリアルでは、Python で他の一般的なタスクを実行する方法について説明します。
Python で単純な線形回帰を実行する方法
Python で重回帰を実行する方法
Python で残差プロットを作成する方法