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

