方差扩大因子(variance inflation factor)简称VIF,是表征自变量观察值之间复共线性程度的数值。线性回归分析中,回归系数βj的估计量的方差为σ2Cjj,其中Cjj=(1-Rj)-1,称Cjj为βj的方差扩大因子,这里Rj为xj对其余p-1个自变量的复相关系数的平方,显然Cjj≥1,它的大小可以反映出自变量的观察值之间是否存在复共线性以及其程度如何,Cjj越大,复共线性越严重。(以上引自百度百科),更多关于多重共线性的内容,可自行查询资料,资料很多。
本文重点说一下用Python调用variance_inflation_factor计算VIF函数遇到的坑。
下面的定义函数中直接调用的variance_inflation_factor函数计算的VIF,得到的结果是不对的。
def checkVIF(df):
from statsmodels.stats.outliers_influence import variance_inflation_factor
name = df.columns
x = np.matrix(df)
VIF_list = [variance_inflation_factor(x,i) for i in range(x.shape[1])]
VIF = pd.DataFrame({'feature':name,"VIF":VIF_list})
max_VIF = max(VIF_list)
print(max_VIF)
return VIF以上所用数据集都是经过预处理WOE转换过的
可以看到上边计算的VIF都异常