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



我正在做一个多层次的荟萃分析。许多研究有几个亚组。当我绘制森林图时,研究是以子群的形式呈现的。其中有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)

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

让我们首先处理这样一种情况,即我们有一个多层次结构,包括两个层次、研究和研究中的多个估计(出于一些技术原因,有些人可能会称之为三层次模型,但我们不要深入讨论(。我将使用一个完全可复制的例子进行说明,使用dat.konstantopoulos2011数据集,其中我们有地区和地区内的学校。我们适合您所拥有的类型的多级模型:

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

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

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

你会发现,如果你根据汇总数据将等效应模型拟合到这些估计中,结果与你从多水平模型中获得的结果相同(我们使用等效应模型,因为多水平模型所解释的异质性已经封装在vcov(res, type="obs")中(:

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

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

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

根据您的描述,我的猜测是,您实际上有一个额外的级别,应该包括在模型中,并且您希望聚合到中间级别。这有点复杂,因为aggregate()并不适用于此。只是为了说明的目的,假设我们使用year作为另一个(更高(级别,我会对数据进行一些处理,使所有三个方差分量都为非零(同样,只是为了说明目的(:

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 cow矩阵:

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)))

林图无法指示这些值中仍然存在的依赖性,因此,如果仅使用diag(vcov(agg))作为采样方差对这些聚合值进行元分析,结果将与从完整多级模型中获得的结果不相同。但实际上没有办法解决这一问题,该图只是汇总估计的可视化,显示的CI是正确的。

您需要在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)

相关内容

  • 没有找到相关文章

最新更新