AIC, вычисляемый вручную, отличается от statsmodel AIC - PullRequest
1 голос
/ 22 мая 2019

Я попытался вручную написать формулу для AIC.Я хочу использовать его в связи с Scikit Learn.Для проверки правильности написания кода я сравнил значения AIC из statsmodels с теми же наборами данных.Но если я сравниваю модель M1 и модель M2, моя реализация и statsmodels дают разные результаты;не просто численно, но statsmodels AIC предпочитает другую модель, чем мой AIC.

Я использую оставшуюся сумму квадратов, введенную вручную, и помещаю ее в формулу AIC.ols - обычный метод наименьших квадратов Скикита.Индекс n проходит по наборам данных, y_run (n) - это n_th наборы данных с переменными ответа, X_run (n) - n-й набор входных обучающих данных.Последний фрагмент кода - это AIC statsmodel, где regr - это statsmodels, оценщик обыкновенных наименьших квадратов.

def rss(n):
    return ((y_run(n)-ols(n).predict(X_run(n)))**2).sum()

def AIC (n):
    return len(X_run(n))*np.log(rss(n)/len(X_run(n)))+2*p

def AIC_regr (n):
    return regr(n).aic

Вы видите, где моя ручная реализация имеет недостатки?

1 Ответ

1 голос
/ 23 мая 2019

Я думаю, что это просто разница в определениях.

statsmodels использует логарифмическое правдоподобие в определении aic, а не rss. statsmodels.tools.eval_measures имеет оба определения.

Информационные критерии часто используются только для сравнения для разных версий, в частности, различного количества объясняющих переменных, одной и той же модели. В этом случае термины, которые являются постоянными в разных версиях модели, часто отбрасываются. Однако statsmodels использует полное определение логарифмического правдоподобия при вычислении информационных критериев. Это позволяет также сравнение между моделями.

Вторым вопросом для определения aic является то, делится ли оно на количество наблюдений или нет. Это также зависит от статистических пакетов.

...