如何通过研究绘制多层次荟萃分析(与亚组相比)?

How to plot multi-level meta-analysis by study (in contrast to the subgroup)?

我正在进行多层次的荟萃分析。许多研究有几个亚组。当我制作森林图时,研究以子组的形式呈现。其中有 60 个,但是,我想根据研究绘制研究,然后是 25 个研究,这会更合适。有谁知道如何制作这个森林图?

我是这样做的:

full.model <- rma.mv(yi = yi, 
                     V = vi, 
                     slab = Author,
                     data = df,
                     random = ~ 1 | Author/Study, 
                     test = "t", 
                     method = "REML")
forest(full.model)

您需要在 data 的新列中指定您自己的分组并将其用作新的随机效果:

df$study_group <- c(1,1,1,2,2,3,4,5,5,5) # example

full.model <- rma.mv(yi = yi, 
                     V = vi, 
                     slab = Author,
                     data = df,
                     random = ~ 1 | study_group, 
                     test = "t", 
                     method = "REML")
forest(full.model)

我不清楚是要聚合到 Author 级别还是要聚合到 Study 级别。如果特定研究有多行数据,则模型并不真正完整,您可能希望为研究中的估计水平添加另一个随机截距。本质上,最低的随机效应应该在输出中具有与估计值 (k).

一样多的 nlvls 值。

让我们首先处理我们有一个多层次结构的情况,其中有两个层次,研究和研究中的多个估计(由于某些技术原因,有些人可能称其为 three-level 模型,但我们不深入讨论这个).我将使用一个完全可重现的示例来说明目的,使用 dat.konstantopoulos2011 数据集,其中我们有学区和学区内的学校。我们适合您所拥有的类型的多级模型:

library(metafor)   
dat <- dat.konstantopoulos2011
res <- rma.mv(yi, vi, random = ~ 1 | district/school, data=dat)
res

我们可以使用 aggregate() 函数将估计值汇总到地区级别,指定模型估计值的边际 var-cov 矩阵来说明它们的 non-independence(请注意这利用了仅适用于 escalc 对象的 aggregate.escalc(),因此如果不是,您需要将数据集转换为一个数据集 - 有关详细信息,请参阅 help(aggregate.escalc)):

agg <- aggregate(dat, cluster=dat$district, V=vcov(res, type="obs"))
agg

您会发现,如果您随后根据聚合数据将 equal-effects 模型拟合到这些估计值,那么结果与您从多级模型中获得的结果相同(我们使用 equal-effects模型,因为多级模型所解释的异质性已经封装在 vcov(res, type="obs")):

rma(yi, vi, method="EE", data=agg)

因此,我们现在可以在森林图中使用这些聚合值:

with(agg, forest(yi, vi, slab=district))

根据您的描述,我的猜测是您实际上还有一个应该包含在模型中的额外级别,并且您希望聚合到中间级别。这有点复杂,因为 aggregate() 不是那个意思。仅出于说明目的,假设我们使用 year 作为另一个(更高)级别,我将对数据进行一些处理,以便所有三个方差分量均为 non-zero(同样,仅出于说明目的):

dat$yi[dat$year == 1976] <- dat$yi[dat$year == 1976] + 0.8
res <- rma.mv(yi, vi, random = ~ 1 | year/district/school, data=dat)
res

现在我们可以使用多变量模型代替 aggregate() 来完成同样的事情,包括中间水平作为一个因素并再次使用 vcov(res, type="obs") 作为 var-cov 矩阵:

agg <- rma.mv(yi, V=vcov(res, type="obs"), mods = ~ 0 + factor(district), data=dat)
agg

现在这个模型的模型系数是聚合值,模型系数的var-cov矩阵是这些聚合值的var-cov矩阵:

coef(agg)
vcov(agg)

它们并不都是独立的(因为我们没有聚合到最高层),所以如果我们想检查我们是否可以获得与多级模型相同的结果,我们必须考虑这种依赖性:

rma.mv(coef(agg), V=vcov(agg), method="EE")

同样,结果完全相同。所以现在我们使用这些系数和 vcov(agg) 的对角线作为它们在森林图中的抽样方差:

forest(coef(agg), diag(vcov(agg)), slab=names(coef(agg)))

森林图无法表明仍然存在于这些值中的相关性,因此如果 meta-analyze 这些聚合值仅使用 diag(vcov(agg)) 作为其抽样方差,结果将不相同到你从完整的多层次模型中得到的东西。但实际上并没有办法解决这个问题,该图只是汇总估计的可视化,显示的 CI 是正确的。