8

R 的使用AIC选择基于公式的模型的功能是否有statsmodels或其他 Python 等效项?step

4

2 回答 2

9

我真的怀疑你在做和我一样的在线课程——下面的内容可以让你得到正确的答案。如果手头的任务计算量不是很大(并且不在课程中),那么我们可以回避step函数的所有智能细节,只尝试预测变量的所有子集。

对于每个子集,我们可以将AIC计算为ACI = 2*nvars - 2*result.llf
然后我们只需找到一个具有最小 AIC 的子集:

import itertools
import numpy as np
import pandas as pd
import statsmodels.api as sm
AICs = {}
for k in range(1,len(predictorcols)+1):
    for variables in itertools.combinations(predictorcols, k):
        predictors = train[list(variables)]
        predictors['Intercept'] = 1
        res = sm.OLS(target, predictors).fit()
        AICs[variables] = 2*(k+1) - 2*res.llf
pd.Series(AICs).idxmin()
于 2014-03-15T22:49:15.313 回答
2

第一个答案对我不起作用,但下面的答案对我有用。从 Kostya 大量复制。

AICs = {}
for k in range(1,len(predictorcols)+1):
    for variables in itertools.combinations(predictorcols, k):
        predictors = list(variables)
        i = True
        independent =''
        for p in predictors:
            if i:
                independent = p
                i=False
            else:
                independent+='+ {}'.format(p)
        regresion = '$DependentVariable$ ~ {}'.format(independent)
        res = sm.ols(regresion, data=train).fit()
        AICs[variables] = 2*(k+1) - 2*res.llf
pd.Series(AICs).idxmin()
于 2016-04-29T02:50:55.953 回答