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

如何在statsmodels的GEE模型中获取优势比(Odds Ratio)

解决GEE模型计算优势比的问题

1. 先修正模型的分布族

你当前代码用的是默认的Gaussian(高斯)分布族,但优势比(OR)是针对二分类因变量的统计量,必须把模型的分布族改为Binomial,并指定logit链接函数(这是计算优势比的标准设置)。另外你定义了Autoregressive()协方差结构但没传入模型,也要补上。

修正后的代码:

import statsmodels.api as sm
import numpy as np

# 定义协方差结构
va = sm.cov_struct.Autoregressive()
# 指定二项分布族和logit链接
family = sm.families.Binomial(link=sm.families.links.Logit())
# 初始化GEE模型,传入协方差结构和分布族
model = sm.GEE(endog=y, exog=x, groups=group, cov_struct=va, family=family)
result = model.fit()
print(result.summary())

2. 计算单个自变量的优势比

GEE输出的coef是对数优势比(log(OR)),直接对系数取指数就能得到原始优势比,对应的置信区间也要做指数化处理:

# 计算优势比
odds_ratios = np.exp(result.params)
# 计算优势比的95%置信区间
ci_low = np.exp(result.conf_int()[0])
ci_high = np.exp(result.conf_int()[1])

# 输出结果
print("优势比(OR):", odds_ratios)
print("95%置信区间下限:", ci_low)
print("95%置信区间上限:", ci_high)

3. GlobalOddsRatio的用法

GlobalOddsRatio是用来处理多分类自变量的全局优势比检验(比如自变量是3个及以上类别时,检验整体是否有统计学意义),用法如下:

from statsmodels.genmod.generalized_estimating_equations import GlobalOddsRatio

# 实例化GlobalOddsRatio,传入模型结果和目标自变量的列索引(比如x中第0列是多分类变量)
gor = GlobalOddsRatio(result, idx=0)
# 计算全局检验结果
gor_result = gor.fit()
# 输出检验统计量和p值
print("全局优势比检验卡方值:", gor_result.statistic)
print("全局检验p值:", gor_result.pvalue)

注意:这个工具只适用于多分类自变量,且模型必须是Binomial族的logit链接GEE模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:05:00