如何在R中合并同研究OR值并开展随机效应模型Meta分析
问题描述
拟采用随机效应模型开展Meta分析,数据包含研究名称、比值比(Odds Ratio, OR)及95%置信区间。因分析变量由多个子变量构成(如物质使用障碍包含酒精使用障碍、大麻使用障碍等),部分研究针对同一变量存在多个效应量。为控制同研究的影响,需要先合并每个研究的效应量,再将合并后的效应量用于随机效应模型Meta分析。
数据结构如下:
dput(data) structure(list(author = c("Study 1", "Study 1", "Study 2", "Study 3", "Study 3", "Study 4", "Study 5", "Study 5" ), OR = c(2.88, 0.75, 1.09, 4.24, 2.64, 2.77, 2.6, 3.2), ci.low = c(1.07, 0.31, 0.39, 0.89, 1.25, 1.63, 1.2, 1.6), ci.high = c(13.38, 1.81, 3.03, 20.25, 5.62, 4.69, 5.7, 6.2), row.names = 4:8, class = "data.frame")
尝试使用metagen函数并设置cluster = author参数,但随机效应模型的结果在使用该参数前后无差异,未实现正确调整。代码如下:
metagen(TE = OR, lower = ci.low, upper = ci.high, studlab = author, fixed = F, random = T, cluster = author, sm = "OR", data = data)
需要解决的问题:如何正确合并单个研究的多个效应量,并将其用于随机效应模型以获得合并OR值?
解决方案
你需要分两步完成:先按研究合并内部的多个效应量,得到每个研究的单一合并效应量;再用这些合并后的结果进行随机效应Meta分析。
步骤1:合并同一研究内的多个效应量
使用meta包的metagen函数,按研究分组,对每个研究内部的效应量进行合并(同一研究内的效应量通常针对同一总体子指标,异质性较低,推荐用固定效应模型)。
library(meta) # 按研究分组,合并每个研究内的效应量(OR需先取对数,避免偏倚) study_level_meta <- by(data, data$author, function(subdata) { metagen(TE = log(subdata$OR), lower = log(subdata$ci.low), upper = log(subdata$ci.high), sm = "OR", fixed = TRUE, random = FALSE) }) # 提取每个研究合并后的核心结果 merged_data <- do.call(rbind, lapply(study_level_meta, function(x) { data.frame( author = x$studlab[1], merged_OR = exp(x$TE.fixed), merged_ci_low = exp(x$lower.fixed), merged_ci_high = exp(x$upper.fixed), se_logOR = x$seTE.fixed ) }))
步骤2:用合并后的研究水平效应量做随机效应Meta分析
基于步骤1得到的merged_data,再次使用metagen函数进行随机效应模型分析:
final_meta <- metagen(TE = log(merged_OR), seTE = se_logOR, studlab = author, sm = "OR", fixed = FALSE, random = TRUE, data = merged_data) # 查看合并结果 print(final_meta) # 绘制森林图 forest(final_meta)
关键说明
cluster参数的局限性:metagen中的cluster参数是用于直接在Meta模型中考虑同一研究内效应量的相关性,而非先合并研究内效应量,这和你的需求逻辑不符,因此之前用该参数无法得到预期结果。- 对数转换的必要性:OR属于右偏分布,取对数后近似正态分布,合并结果更准确,最后再转换回原始OR尺度。
- 研究内合并模型选择:若同一研究内子指标异质性较大,也可改用随机效应模型合并,但需在结果中解释合理性。
内容的提问来源于stack exchange,提问作者Noa
相关产品推荐
相关产品推荐

