我试图为VIF编写一个通用代码,一个接一个地迭代VIF结果,直到达到阈值10。守则如下:
variables = list(range(X.shape[1]))
dropped = True
while dropped:
dropped = False
vif = [variance_inflation_factor(X.iloc[:, variables].values, ix) for ix in variables]
print('\n\nvif is: \n', vif)
maxloc = vif.index(max(vif))
if max(vif) > thresh:
print('dropping \'' + X.iloc[:, variables].columns[maxloc] + '\' at index: ' + str(maxloc))
X.drop(X.columns[variables[maxloc]], 1, inplace=True)
variables = list(range(X.shape[1]))
dropped = True
print('\n\nRemaining variables:\n')
print(X.columns[variables])
但当我一个接一个地迭代和删除值时,它会删除第一次迭代中的截距,在第二次迭代中,计算的VIF值是完全不同和错误的,因为VIF需要截距。我尝试从statsmodels中添加_常量,但它通过删除每次迭代的截距创建了一个无限循环。请帮助我在这方面,任何其他通用代码的VIF也表示感谢
目前没有回答
相关问题 更多 >
编程相关推荐