在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的“Introductory Econometrics(6ed)”,似乎应该包括拦截:“......在所有其他自变量(并包括拦截)上回归Xj的R平方。”
statmodel错了吗?还有其他包我可以交叉检查吗?感谢。
答案 0 :(得分:0)
使用statsmodels时确认,始终注意添加常量(在这种情况下是必要的)
答案 1 :(得分:0)
在线性回归的传统矩阵公式中,X矩阵的第一个位置始终具有1的列向量-否则,我们将通过原点获得回归,即没有截距项。我在statsmodels中寻找VIF时遇到了这个问题。