python计算方差膨胀因子_Python计算方差膨胀因子VIF

本文探讨了在Python中计算方差膨胀因子(VIF)时遇到的问题,指出直接使用`variance_inflation_factor`函数计算得出的VIF值可能不准确,原因是默认不包含截距项。通过重新定义函数并添加常数列来计算VIF,得到了正确的结果,从而解决了多重共线性评估的问题。
摘要由CSDN通过智能技术生成

方差扩大因子(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都异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值