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

metafor包森林图注释:能否为不同部分设置不同小数位数?

在metafor森林图中为不同注释部分设置不同小数位数

完全可以实现为森林图的不同注释部分设置不同小数位数,核心思路是放弃全局的digits参数,手动构建注释文本,对每个统计量单独格式化小数位数,具体操作步骤如下:

1. 拟合meta分析模型

先完成常规的meta分析模型拟合,以metafor自带的BCG疫苗数据集为例:

library(metafor)
data(dat.bcg)
# 转换为相对风险(RR)的对数尺度
dat <- escalc(measure="RR", ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg)
# 拟合随机效应模型
fit <- rma(yi, vi, data=dat, method="DL")

2. 提取并格式化各统计量

分别提取需要展示的统计量(如效应量、权重),并按需求设置小数位数:

# 提取各研究的权重,保留1位小数
study_weights <- round(fit$weights, 1)
# 提取各研究的RR值及95%置信区间,保留2位小数
rr_values <- exp(dat$yi)
rr_ci <- exp(dat$yi + c(-1, 1)*1.96*sqrt(dat$vi))
rr_formatted <- sprintf("%.2f (%.2f, %.2f)", rr_values, rr_ci[,1], rr_ci[,2])

3. 构建自定义注释文本

将研究名称、格式化后的效应量、权重拼接成每行的注释内容:

custom_slab <- paste(dat$study, rr_formatted, paste0(study_weights, "%"), sep = " | ")

4. 绘制自定义注释的森林图

调用forest()函数,关闭默认注释,传入自定义的注释文本:

# 绘制森林图,使用自定义注释
forest(fit,
       annotate = FALSE,  # 关闭自动生成的注释
       slab = custom_slab,  # 替换为自定义注释
       xlab = "Relative Risk (RR)",
       cex = 0.9)

# 手动添加合并效应的注释(按需设置小数位数)
pooled_rr <- exp(fit$b)
pooled_ci <- exp(c(fit$ci.lb, fit$ci.ub))
pooled_text <- sprintf("合并效应量: %.2f (%.2f, %.2f) | 总权重: %.1f%%",
                       pooled_rr, pooled_ci[1], pooled_ci[2], sum(study_weights))
# 将合并注释放在图的顶部(row=0位置)
text(-1, 0, pooled_text, pos = 4, cex = 0.9)

关键说明

  • 这种自定义方式完全可控,不管是研究层面的效应量、权重,还是合并效应的统计量,都可以单独设置小数位数;
  • 如果需要展示其他统计量(如均值、标准差),只需重复"提取-格式化-拼接"的流程即可;
  • 若需保留默认的部分注释框架,也可以通过annotate=TRUE结合digits向量(部分场景支持),但自定义文本的灵活性最高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:30:56