广义方差膨胀因子

2024-09-21 03:27:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为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也表示感谢


Tags: columns代码trueindexrangevariableslistix

热门问题