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

R语言meta/forest对象如何自定义展示疫苗有效性VE等效应量

R语言meta/forest对象自定义效应量汇总实现方案(疫苗有效性VE场景)

无需修改meta、metafor包的底层效应量计算入口,直接通过包内置的transf参数传入自定义转换函数,即可实现VE(1-RR/1-OR)的自定义汇总展示,不需要额外依赖其他工具包。

常见误区说明

测试时发现transf参数不支持自定义规则,通常是因为尝试直接给escalc()的measure参数传入不存在的"1-RR"值。实际上效应量计算环节不需要自定义,只需要在模型汇总、森林图绘制环节做尺度转换即可,逻辑完全自洽,结果和直接计算VE的效应量完全一致。

metafor包实现代码

### 加载metafor包
library(metafor)

### 加载BCG疫苗数据集
data(dat.bcg)

### 第一步:按标准RR口径计算效应量(不需要自定义measure参数)
dat <- escalc(measure="RR", ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat.bcg)

### 第二步:拟合Meta分析模型(随机/固定效应均可)
res <- rma(yi, vi, data=dat, method="REML")

### 第三步:编写自定义VE转换函数
### 注意:metafor存储的yi是对数转换后的RR,需要先取指数还原为原始RR,再计算1-RR
trans_ve <- function(log_rr) {
  1 - exp(log_rr)
}

### 绘制自带VE汇总值的森林图
forest(res,
       transf = trans_ve, # 传入自定义转换函数
       xlab = "疫苗有效性(VE = 1-RR)",
       refline = 0, # VE=0对应RR=1,即无保护效应
       xlim = c(-1.5, 0.8), # 根据实际VE范围调整坐标轴区间
       at = c(-1, -0.5, 0, 0.5, 0.75), # 自定义坐标轴刻度
       header = c("研究", "VE [95%CI]"))

如果需要计算基于OR的VE,只需要把escalc()里的measure参数改为"OR"即可,转换函数逻辑不需要调整。

meta包实现代码

library(meta)
### 计算标准RR效应量
m_bcg <- metabin(event.e = tpos, n.e = tpos+tneg,
                 event.c = cpos, n.c = cpos+cneg,
                 data = dat.bcg,
                 sm = "RR",
                 method.tau = "REML")

### 绘制VE尺度森林图
### 注意:meta包metabin对象存储的是原始尺度RR,不需要做指数转换
forest(m_bcg,
       transf = function(rr) 1 - rr,
       xlab = "疫苗有效性(VE = 1-RR)",
       refline = 0,
       leftlabs = "研究名称",
       rightlabs = "VE [95%CI]")

关键注意事项

  • 转换前务必确认原效应量的存储尺度:metafor的rma类对象默认存储对数转换后的RR/OR,必须先exp()还原再计算VE;meta包的metabin、metagen对象默认存储原始尺度的效应值,直接计算1-值即可,尺度搞错会出现完全错误的结果
  • VE的置信区间方向和RR/OR相反:RR值越大对应VE值越小,转换时包会自动处理置信区间的上下限反转,不需要手动调整,只要转换函数逻辑正确即可
  • 该方法仅改变效应量的展示尺度,不会改变模型的合并效应值、异质性检验、亚组分析等所有核心计算结果,统计可靠性和标准RR/OR输出完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:51:20