如何在 python 中测试多重共线性
在回归分析中,当两个或多个预测变量彼此高度相关,以致它们在回归模型中不提供唯一或独立的信息时,就会出现多重共线性。
如果预测变量之间的相关程度足够高,则在拟合和解释回归模型时可能会出现问题。
检测回归模型中的多重共线性的最简单方法是计算称为方差膨胀因子(通常缩写为VIF )的指标。
VIF 衡量模型中预测变量之间的相关性强度。它的值介于 1 和正无穷大之间。
我们使用以下经验法则来解释 VIF 值:
- VIF = 1:给定预测变量与模型中的任何其他预测变量之间不存在相关性。
- VIF 介于 1 和 5 之间:给定预测变量与模型中的其他预测变量之间存在中等相关性。
- VIF > 5 :给定预测变量与模型中的其他预测变量之间存在很强的相关性。
以下示例展示了如何通过计算模型中每个预测变量的 VIF 值来检测 Python 回归模型中的多重共线性。
示例:Python 中的多重共线性测试
假设我们有以下 pandas DataFrame,其中包含有关各种篮球运动员的信息:
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 中执行其他常见任务: