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

使用statsmodels.formula.api的glm设置因变量参考类别异常求助

1. 参考类别设置无效的问题

你操作的核心错误是:C(变量, Treatment(reference=xxx))是statsmodels公式语法中专门用于处理分类自变量的标注方式,写在因变量位置时,指定参考类的参数不会被二项GLM识别生效,因此你调整reference取值自然不会改变系数结果。

正确的参考类别设置方法如下:
statsmodels的二项逻辑回归默认对y取值为1的类别的概率建模,0为默认参考类别,你只需要提前对原y做重编码即可:

# 若要设置-1为参考类别,建模y=1的概率,执行如下重编码
dta['y_target'] = (dta['y'] == 1).astype(int)
# 直接用重编码后的变量做因变量拟合模型
glm_model = sm.formula.glm(formula = "y_target ~ x1 + x2", data=dta, family=sm.families.Binomial())
res = glm_model.fit()

# 若要切换参考类别为1,建模y=-1的概率,仅需修改重编码逻辑即可,此时所有系数符号会和之前完全相反
dta['y_target'] = (dta['y'] == -1).astype(int)

2. 系数含义解释

二项逻辑回归的所有系数都是相对于**正类(即重编码为1的类别)**的:

  • 系数为正:自变量每上升1单位,正类的发生比(odds = P(正类)/P(参考类))上升,对应正类概率上升、参考类概率下降
  • 系数为负:自变量每上升1单位,正类的发生比下降,对应正类概率下降、参考类概率上升

如果要确认当前模型的正类是哪个,拟合完成后执行print(res.model.endog_names)即可查看。
从你提供的输出结果可以判断,当前模型默认对y=1的概率建模,因此:

  • x1系数为-0.1769:x1每上升1单位,y=1的发生比下降约16.2%,即y=1的概率下降、y=-1的概率上升
  • x2系数为0.2388:x2每上升1单位,y=1的发生比上升约27%,即y=1的概率上升、y=-1的概率下降

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:04