使用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
相关产品推荐
相关产品推荐

