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

