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

为何Python与R中加权逻辑回归模型的AIC结果不一致?

解决Python与R加权逻辑回归AIC不一致的问题

问题根源

Python中Statsmodels的var_weights参数语义和R的glm中weights参数在Binomial族下的语义完全不同:

  • R的weights在Binomial模型中,当响应是比例时,代表该比例对应的总试验次数,本质是将分组数据(成功数/总数)按二项分布处理。
  • 你之前用的var_weights是用于调整观测值的方差权重,并非指定二项试验的总次数,这会导致Statsmodels错误地将每个比例视为独立的伯努利观测,进而计算出错误的对数似然和AIC。

修正后的Python代码

要让两者结果一致,需要让Statsmodels正确处理二项式分组数据:将响应变量指定为成功数(Use),让Binomial族结合总试验次数完成计算。

# Imports
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
import statsmodels.api as sm

# 创建数据集
use = np.array([5,7,11,20,47,49,54,53,76])
total = np.array([30,33,35,40,67,61,63,59,80])
age = np.arange(16, 25)
df = pd.DataFrame({"Use": use, "Total": total, "Age": age})

# 正确构建二项式GLM模型
logit_model = smf.glm(formula = "Use ~ Age", data = df,
                  family = sm.families.Binomial(link=sm.families.links.Logit())).fit()

# 输出结果与AIC
print(logit_model.summary())
print("AIC:", logit_model.aic)

修正后的结果说明

运行上述代码后,你会发现:

  • 回归系数和R的结果完全一致(Intercept=-11.3464,Age=0.5996)
  • AIC值会接近R中的40.12,两者仅因计算精度略有差异
  • 对数似然、Deviance等指标也会和R的输出对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:48:11