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

用R的marginaleffects/emmeans包计算风险比比值及置信区间

计算交互项对应的风险比比值(RRₘₑₙ/RRwₒₘₑₙ)及置信区间

下面提供两种实现方法,分别使用marginaleffects和emmeans包:

方法一:使用marginaleffects包直接检验假设

利用hypotheses参数可直接指定比值关系,自动生成估计值与置信区间:

# 先获取分性别的边际风险比
comp <- marginaleffects::avg_comparisons(model, comparison="ratio",
                                         variables="condition", by="sex")

# 定义假设:男性RR / 女性RR,计算该比值的估计值和置信区间
hyp <- marginaleffects::hypotheses(comp, "b1 / b2")

# 查看结果
hyp

也可直接在avg_comparisons中通过假设语法指定:

marginaleffects::avg_comparisons(
    model,
    comparison = "ratio",
    variables = "condition",
    by = "sex",
    hypotheses = "condition_1 - condition_0 for sex=1 / condition_1 - condition_0 for sex=0"
)

方法二:使用emmeans包计算

通过对数转换的线性性质计算比值的置信区间,步骤如下:

library(emmeans)

# 1. 获取各(condition, sex)组合的预测概率(risk尺度)
emm <- emmeans(model, ~ condition * sex, type = "response")

# 2. 计算分性别的风险比(实验组/对照组)
rr <- pairs(emm, by = "sex", type = "response", ratio = TRUE)

# 3. 提取估计值和方差协方差矩阵,计算比值及其置信区间
rr_est <- coef(rr)
vcov_rr <- vcov(rr)

# 对数转换后做线性组合,再转换回原始尺度
log_ratio <- log(rr_est[1]) - log(rr_est[2])
se_log_ratio <- sqrt(vcov_rr[1,1] + vcov_rr[2,2] - 2*vcov_rr[1,2])

ratio_est <- exp(log_ratio)
ci_lower <- exp(log_ratio - 1.96 * se_log_ratio)
ci_upper <- exp(log_ratio + 1.96 * se_log_ratio)

# 输出结果
data.frame(
    ratio = ratio_est,
    ci_lower = ci_lower,
    ci_upper = ci_upper
)

补充说明

  • 两种方法均基于对数转换的线性特性:风险比比值的对数等于两个风险比对数的差,以此简化方差计算,再转换回原始尺度得到置信区间。
  • 若需更精确的似然置信区间,可在emmeans的pairs结果上执行contrast(rr, list(ratio = c(1, -1)), method = "profile")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:42:20