import numpy as np
np.linalg.cond(results.model.exog) # results为训练好的模型
这个好像是根据特征值来检验多重共线性,我本人也不太懂
下面来说一说我们最常用的VIF检验多重共线性的方法
官方文档路径https://www.statsmodels.org/stable/generated/statsmodels.stats.outliers_influence.variance_inflation_factor.html#statsmodels.stats.outliers_influence.variance_inflation_factor
对于一个dataframe每一列的平均VIF,即为所有样本的VIF,如果VIF大于10,就说明有比较强的多重共线性
下面是代码示例:
from statsmodels.stats.outliers_influence import variance_inflation_factor
all = 0
for i in range(0, 23):
all += variance_inflation_factor(lm.model.exog, i)
all/23 # 我输入的lm.model.exog有23列,平均下来就是整体的
此外还有几点需要关心和了解的是:
- 如果不关心具体的回归系数,而只关心整个方程预测被解释变量的能力,则
通常可以 不必理会多重共线性(假设你的整个方程是显著的)。这是因为,多
重共线性的主要后果是使得对单个变量的贡献估计不准,但所有变量的整体效
应仍可以较准确地估计。 - 如果关心具体的回归系数,但多重共线性并不影响所关心变量的显著性,那
么也可以不必理会。即使在有方差膨胀的情况下,这些系数依然显著;如果没有
多重共线性,则只会更加显著。 - 如果多重共线性影响到所关心变量的显著性,则需要增大样本容量,剔除导
致严重共线性的变量(不要轻易删除哦,因为可能会有内生性的影响),或对
模型设定进行修改。