python statsmodel中的VIF计算

python statsmodel中的VIF计算,python,regression,statsmodels,Python,Regression,Statsmodels,statsmodel中计算VIF的代码如下: k_vars = exog.shape[1] x_i = exog[:, exog_idx] mask = np.arange(k_vars) != exog_idx x_noti = exog[:, mask] r_squared_i = OLS(x_i, x_noti).fit().rsquared ## NO INTERCEPT vif = 1. / (1. - r_squared_i) 拟合时,它不包括截距。根据Wooldridge的“

statsmodel中计算VIF的代码如下:

k_vars = exog.shape[1]
x_i = exog[:, exog_idx]
mask = np.arange(k_vars) != exog_idx
x_noti = exog[:, mask]
r_squared_i = OLS(x_i, x_noti).fit().rsquared   ## NO INTERCEPT
vif = 1. / (1. - r_squared_i)
拟合时,它不包括截距。根据Wooldridge的“经济计量学导论(6ed)”,似乎应该包括截距:“…从所有其他自变量的Xj回归得出的R平方(,包括截距)。”


statmodels错了吗?还有别的包裹我可以核对一下吗?谢谢。

使用statsmodels时,请始终注意添加常量(在这种情况下是必要的);引述:

默认情况下不包括截取,用户应添加截取。请参见
statsmodels.tools.add_constant

来自MATLAB的参考:

在线性回归的传统矩阵公式中,X矩阵的第一个位置总是有一个1的列向量-如果没有这个,我们将得到通过原点的回归,即没有截距项。我在寻找statsmodels中的VIP时遇到了这个问题。

没有什么“错误”。这假设
exog
来自包含常数的回归模型(如果用户需要)。请参阅statsmodels github上的几个相关问题。IIRC,你可以将结果与SAS和Stata进行比较。是的,谢谢。答复更新。相关: