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

Meta分析:meta与metafor包原始均值变化分析的结果差异问询

问题

我拟开展一项前后测均值变化的Meta分析,发现metafor包的rma()函数与meta包的metamean()函数输出结果存在差异。

首先,由于缺失前后测相关系数,我假设r=0.5,使用escalc()计算原始均值变化:

data$r <- 0.5
es <- escalc(
  measure = "MC",
  m1i = M_pre, sd1i = SD_pre,
  m2i = M_post, sd2i = SD_post,
  ni = n, ri = r,
  data = data 
)

得到示例数据:

structure(list(M_pre = c(0.551, 0.6, 1.32, 1.293, 1.055357, 1.7125, 
0.983, 1.1, 0.581), SD_pre = c(0.261, 0.274, 0.07, 0.462, 0.4004462, 
0.1875, 0.273, 0.316, 0.17475), M_post = c(0.92, 1, 1.13, 0.975, 
1.067857, 1.125, 0.813, 1.111, 0.376), SD_post = c(0.352, 0.334, 
0.06, 0.409, 0.3856812, 0.243, 0.488, 0.344, 0.16325), n = c(7, 
7, 39, 14, 56, 8, 6, 9, 11), r = c(0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 
0.5, 0.5, 0.5), yi = c(-0.369, -0.4, 0.19, 0.318, -0.0125, 0.5875, 
0.17, -0.011, 0.205), vi = c(0.0143075714, 0.013588, 0.0001102564, 
0.0136976429, 0.0027618317, 0.0060803438, 0.0299081667, 0.0121653333, 
0.0026054716)), class = "data.frame", row.names = c(NA, -9L))

随后我使用以下代码调用两个函数,确保均采用REML随机效应模型、逆方差加权及标准正态分布计算置信区间:

meta <- rma(yi, vi, data = es, method = "REML")

meta <- metamean(n = n,
                 mean = yi,
                 sd = sqrt(vi), # meta uses sd not variance
                 data = es,
                 fixed = FALSE,
                 method.tau = "REML")

但结果显示,不仅合并效应量不同,单个研究的置信区间及异质性指标也存在差异。

rma()输出结果:

Random-Effects Model (k = 9; tau^2 estimator: REML)

  logLik  deviance       AIC       BIC      AICc   
 -2.1154    4.2307    8.2307    8.3896   10.6307   

tau^2 (estimated amount of total heterogeneity): 0.0885 (SE = 0.0491)
tau (square root of estimated tau^2 value):      0.2975
I^2 (total heterogeneity / total variability):   96.22%
H^2 (total variability / sampling variability):  26.48

Test for Heterogeneity:
Q(df = 8) = 92.0790, p-val < .0001

Model Results:

estimate      se    zval    pval    ci.lb   ci.ub    
  0.0809  0.1045  0.7737  0.4391  -0.1240  0.2858

metamean()输出结果:

mean             95%-CI %W(random)
1 -0.3690 [-0.4576; -0.2804]       11.0
2 -0.4000 [-0.4864; -0.3136]       11.0
3  0.1900 [ 0.1867;  0.1933]       11.3
4  0.3180 [ 0.2567;  0.3793]       11.2
5 -0.0125 [-0.0263;  0.0013]       11.3
6  0.5875 [ 0.5335;  0.6415]       11.2
7  0.1700 [ 0.0316;  0.3084]       10.7
8 -0.0110 [-0.0831;  0.0611]       11.1
9  0.2050 [ 0.1748;  0.2352]       11.2

Number of studies: k = 9
Number of observations: o = 157

                       mean            95%-CI
Random effects model 0.0763 [-0.1300; 0.2825]

Quantifying heterogeneity:
 tau^2 = 0.0983 [0.0441; 0.3649]; tau = 0.3135 [0.2100; 0.6041]
 I^2 = 99.4% [99.3%; 99.5%]; H = 13.11 [11.82; 14.54]

Test for Heterogeneity:
       Q d.f.  p-value
 1374.87    8 < 0.0001

Details on meta-analytical method:
- Inverse variance method
- Restricted maximum-likelihood estimator for tau^2
- Q-Profile method for confidence interval of tau^2 and tau
- Untransformed (raw) means

请问差异产生的原因是什么?如何调整以消除差异?是否有其他解决方案?哪种结果更准确?我更倾向使用meta包,因其森林图更易调整。


解答

差异产生的原因

  • 单个研究置信区间计算逻辑不同
    metafor::rma()默认基于效应量的标准误(sqrt(vi))和正态分布计算置信区间;而meta::metamean()默认用t分布(基于样本量计算自由度),小样本研究的置信区间会更宽,这直接导致两者单研究区间差异。
  • 异质性Q统计量计算逻辑错误匹配
    rma()的Q统计量基于效应量的抽样方差vi计算;但metamean()是为单组均值Meta分析设计的,它错误地将输入的yi当作原始组均值,用(yi - ybar)^2 / (sd^2/n)的逻辑计算Q值,导致Q值被极度放大,进而影响I^2和tau^2的估计。
  • tau²的REML估计细节差异
    两个包的REML迭代算法、收敛标准略有不同,再加上Q统计量的偏差,最终导致tau²估计值出现差异。

消除差异的调整方法

若要让meta包结果与rma()对齐,需用metacont()替代metamean()(匹配配对设计的均值差逻辑),并调整参数:

meta_meta <- metacont(
  n.e = n, mean.e = yi, sd.e = sqrt(vi),
  n.c = rep(1, nrow(es)), mean.c = rep(0, nrow(es)), sd.c = rep(0, nrow(es)),
  data = es,
  fixed = FALSE,
  method.tau = "REML",
  method.ci = "normal",
  sm = "MD"
)

该设置通过模拟配对设计的对照(对照组均值为0),强制使用正态分布计算置信区间,同时让Q统计量基于效应量抽样方差计算,最终结果会与rma()基本一致。

其他解决方案

  • 自定义metafor森林图:metafor的forest()函数可通过addpoly()、text()等函数自定义样式,灵活性更高。
  • 统一效应量输入:始终基于escalc()得到的yi和vi进行分析,避免包内置的效应量转换逻辑干扰。

结果准确性对比

metafor::rma()的结果更准确:
你的分析对象是前后测差值的均值变化,escalc(measure="MC")已正确计算配对设计的均值差及其抽样方差,rma()直接基于这些正确的效应量建模,逻辑完全匹配;而metamean()是为单组均值分析设计的,强行输入差值会触发错误计算逻辑,不符合你的研究设计。

若偏好meta包的森林图,建议用上述metacont()的调整方法,确保建模逻辑正确后再生成图形。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:49:51