【问题标题】:I think I am getting different AIC & BIC values in a regression model built using statsmodel package in Python我认为我在使用 Python 中的 statsmodel 包构建的回归模型中获得了不同的 AIC 和 BIC 值
【发布时间】:2019-11-19 14:52:37
【问题描述】:

我建立了一个单因素(单变量回归)模型,当我这样做时

aic = results.aic 

什么时候做

aic = results.nobs*np.log(results.ssr/results.nobs) + 4 

我得到不同的输出。哪一个是正确的?

第二个公式给出与 SAS Base 9.4 输出相同的结果

  aic = results.aic #from statsmodel packages
  aic = results.nobs*np.log(results.ssr/results.nobs) + 4

【问题讨论】:

    标签: python pandas python-2.7 statsmodels


    【解决方案1】:

    在模型维度解释方面,statsmodels 中的 AIC 和 SAS 之间的计算有所不同。

    在 statmodels 中,aic 看起来像:

    Statsmodels Eval_metrics source code

    def aic(llf, nobs, df_modelwc):
    
        return -2. * llf + 2. * df_modelwc
    
    

    df_modelwc 在哪里

    df_modelwc : int
            number of parameters including constant
    
    

    在 SAS 解释中:

    SAS Mixed Procedure Documentation

    AIC 看起来像

    -2LL + 2d, 其中'd 是估计协方差参数的有效数量'。

    两种解释都是正确的,但您无法根据来自两个不同来源的解释来比较拟合优度。

    【讨论】:

    • 夏皮罗威尔克检验(用于检验残差的正态性)怎么样?这也不同吗?
    • 现在如果我知道如何在 python 中计算估计协方差参数的有效数量...
    • @DanCiborowski-MSFT 根据您的回答,我重新考虑了对该问题的回答。目前我不确定为什么这个定义应该不同。在受限最大似然情况下,“估计协方差参数的有效数量”出现在 MIXED 程序中。而在传统的对数似然函数上,参数d被定义为模型的参数。我今天稍后再回到这个问题。
    • 我开始意识到 SAS ARIMA 和 Python ARIMA 之间的差异是如此不同,以至于 AIC 值并不重要。我正在探索只是试图让我的功能重要性稍微相似。目前在 SAS 中重要的 arima 组合在 Python 中并不重要>。
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 2015-11-24
    • 2018-02-21
    • 2017-06-22
    • 2019-10-09
    • 2014-05-04
    • 2017-12-15
    • 2021-08-28
    相关资源
    最近更新 更多