【发布时间】:2017-07-28 06:09:01
【问题描述】:
我正在尝试计算 python 中一个简单数据集中每一列的方差膨胀因子 (VIF):
a b c d
1 2 4 4
1 2 6 3
2 3 7 4
3 2 8 5
4 1 9 4
我已经在 R 中使用 usdm library 中的 vif 函数完成了此操作,结果如下:
a <- c(1, 1, 2, 3, 4)
b <- c(2, 2, 3, 2, 1)
c <- c(4, 6, 7, 8, 9)
d <- c(4, 3, 4, 5, 4)
df <- data.frame(a, b, c, d)
vif_df <- vif(df)
print(vif_df)
Variables VIF
a 22.95
b 3.00
c 12.95
d 3.00
但是,当我在 python 中使用statsmodel vif function 执行相同操作时,我的结果是:
a = [1, 1, 2, 3, 4]
b = [2, 2, 3, 2, 1]
c = [4, 6, 7, 8, 9]
d = [4, 3, 4, 5, 4]
ck = np.column_stack([a, b, c, d])
vif = [variance_inflation_factor(ck, i) for i in range(ck.shape[1])]
print(vif)
Variables VIF
a 47.136986301369774
b 28.931506849315081
c 80.31506849315096
d 40.438356164383549
即使输入相同,结果也大不相同。一般来说,statsmodel VIF 函数的结果似乎是错误的,但我不确定这是因为我调用它的方式还是函数本身的问题。
我希望有人可以帮助我弄清楚我是否错误地调用了 statsmodel 函数或解释结果中的差异。如果是函数的问题,那么 python 中是否有任何 VIF 替代方案?
【问题讨论】:
标签: python r numpy statistics statsmodels