You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何通过statsmodels提取零广义线性模型AIC、BIC

statsmodels 提取GLM零模型AIC、BIC值的方法

statsmodels拟合广义线性模型返回的GLMResults对象默认没有直接存储零模型(仅含截距的基准模型)的AIC、BIC属性,仅提供了零偏差null_deviance的直接调用入口,你可以通过以下两种方式拿到需要的值:

  • 方法1:显式拟合截距-only零模型直接提取(准确率最高,推荐优先使用)
    零模型本质是不纳入任何自变量、仅保留截距项的同参数GLM,你只需要用和原模型完全一致的因变量、模型家族、连接函数、权重/偏移项配置,拟合一个仅含截距的模型,就能直接读取它内置计算好的AIC、BIC,不会出现计算偏差。
    参考代码:

    import statsmodels.api as sm
    # 以下是原模型拟合的示例逻辑,替换成你自己的建模代码即可
    # y = 你的因变量序列
    # X = 你的自变量矩阵(原模型中通常已经通过add_constant添加了截距)
    # glm_model = sm.GLM(y, X, family=sm.families.Poisson())
    # glm_res = glm_model.fit()
    
    # 构造零模型的自变量:仅1列全1的截距项
    X_null = sm.add_constant([0]*len(y))
    # 复用原模型的家族配置拟合零模型
    null_res = sm.GLM(y, X_null, family=glm_res.family, offset=glm_res.model.offset, freq_weights=glm_res.model.freq_weights).fit()
    
    # 直接提取目标值
    null_aic = null_res.aic
    null_bic = null_res.bic
    

    这个方法适配所有GLM家族,不管是固定离散度的泊松/二项模型,还是需要估计尺度参数的高斯/Gamma/负二项模型,结果都和statsmodels内置计算逻辑完全一致。

  • 方法2:基于现有null_deviance手动计算(无需重拟合模型)
    如果你不想额外跑一次模型拟合,可以根据GLM信息准则的定义,结合结果对象里已有的属性手动计算,注意要对应不同模型类型调整参数计数:

    计算规则说明:

    1. 泊松、二项这类固定离散度为1的家族:零模型仅估计1个截距参数,AIC = 偏差 + 2参数个数,BIC = 偏差 + 参数个数ln(样本量),代入零偏差即可算出
    2. 高斯、Gamma、逆高斯、负二项这类需要额外估计离散/尺度参数的家族:零模型共估计2个参数,计算时需要先把零偏差除以模型估计的尺度值,再代入AIC/BIC公式
      这个方法的问题是如果你的模型加了偏移项、自定义权重、特殊链接函数,很容易漏算调整项,非极简场景不推荐用。

内容的提问来源于stack exchange,提问作者lostwanderer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:27:17