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

在R中用emmeans包通过marginal standardisation计算Risk ratio与Risk difference

用emmeans计算logistic模型的风险差(RD)和风险比(RR)

你已经通过glm拟合了logistic回归模型,并得到了响应尺度的边际均值(概率),但默认的contrast输出是比值比(OR)。以下是获取与参考组(duration=10)的风险差(RD)和风险比(RR)的具体方法:

已有的基础代码

# 拟合logistic模型
model_logistic <- glm(outcome ~ duration + rand_ageband + rand_sex, family = binomial(link = "logit"), data = data)

# 获取响应尺度的边际均值(各组结局概率)
emm <- emmeans(model_logistic, specs = ~ duration, type = "response")

1. 计算风险差(Risk Difference)

风险差是各组概率与参考组概率的差值,直接使用trt.vs.ref对比方法即可得到,无需额外变换:

# 计算与参考组(duration=10)的风险差,不做多重调整
rd_results <- contrast(emm, method = "trt.vs.ref", adjust = "none", type = "response")

# 查看详细结果
summary(rd_results)

trt.vs.ref会自动以因子的参考水平(你已通过fct_relevel设置为10)作为对照,输出每个duration组与10组的概率差值,置信区间采用delta法计算。

2. 计算风险比(Risk Ratio)

风险比是各组概率与参考组概率的比值,需要在对数尺度上计算对比后再反变换,这样能保证置信区间的准确性:

# 方式1:直接在contrast中指定对数变换
rr_log <- contrast(emm, method = "trt.vs.ref", adjust = "none", type = "response", transform = "log")
# 指数化得到风险比及置信区间
rr_results <- exp(rr_log)

# 方式2:先将边际均值转换为对数尺度再对比
emm_log <- regrid(emm, transform = "log")
rr_log <- contrast(emm_log, method = "trt.vs.ref", adjust = "none")
rr_results <- exp(rr_log)

# 查看详细结果
summary(rr_results)

对数尺度下的差值即为风险比的对数,指数化后得到原始尺度的风险比,对应的置信区间也会同步转换,符合统计推断的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:23:23