3

我有以下数据结构,大约。研究i = 50,实验j = 75和条件k = 200

在级别k我有相关的措施。对于大约 20 项研究(25 个实验和 65 个条件),我有关于主题级别的数据并计算了方差 - 协方差矩阵。对于其余部分,我根据估计的相关性(针对受试者和条件)计算了一个方差-协方差矩阵。最后,我有一个完整的kxk方差-协方差矩阵V

为了尊重数据的多级结构,我让每个研究中的每个实验中的每个条件都使用非结构化方差-协方差矩阵具有其独特的协方差(请参阅详细信息 - 指定随机效应)。请注意,我不是 100% 确定这种推理,或者一般推理/反对多级模型中的方差 - 协方差假设结构。所以我很高兴收到一些关于这方面的想法/文献......

我现在想进行一个多元(多级)随机效应模型:

rma.mv(
    yi = yk
  , V = V
  , random = list(~ exp_j | stu_i,
                  ~ con_k | exp_j)
  , struct = "UN"
  , method = "REML"
  , test = "t"  ## slightly mimics knha
  , data = dat
  , slab = con_k
  , control=list(optimizer="optimParallel", ncpus=32)
)

当在完整的数据集上运行时,计算在几分钟内达到 128GB(!)的 RAM,并且在某些时候 R只是终止而没有错误消息。

1)我拥有的数据量是否可以预期?

使用原始数据的子集运行相同的模型(即i = 20j = 25k = 65,我只是在没有估计方差 - 协方差矩阵的情况下抓取数据)可以正常工作并达到 ~20GB RAM 的顶部。

我看到了metafor 包的tipps 部分以及注释rma.mv()中的优化选项。2)在我的场景中,切换到Microsoft R Open或其他算法(没有并行化?!)是否合理?

请注意,上面的模型不是我要进行的最终模型。尚未包括版主。其他模型应包括主持人的回归项。它会变得更加复杂,我想......

我在 x86_64-pc-linux-gnu(64 位)上运行 R 版本 3.6.3(2020-02-29):Ubuntu 18.04.5 LTS。Metafor 的版本为 2.4-0。

最佳乔纳斯

4

1 回答 1

1

可能不是每个研究都有 50 个实验,也不是每个实验都有 200 个条件,但是是的,50 * 75 * 200(即 750,000)行数据将是一个问题。但是,在我解决这个问题之前,让我们从模型本身开始,这没什么意义。在这 50 项研究中进行了 75 次实验,使用~ exp_j | stu_iwithstruct="UN"意味着您正在尝试估计 75 x 75 var-cov 矩阵的方差和协方差。这已经是 2850 个参数了。根据我的计算,这~ con_k | exp_j部分又增加了 20,000 多个参数。这永远行不通。

根据您的描述,您有一个多层次的结构,但研究 1 中的实验 1 所代表的内容与研究 2 中的实验 1 所代表的内容之间没有内在联系。所以实验标识符在这里只是用来区分研究中的不同实验,没有进一步的意义。将此与您的情况进行比较,例如,研究 1 中的结果 A 和 B,研究 2 中的结果 A,研究 3 中的结果 B,等等。“A”在所有研究中都真正代表“A”,而不仅仅是用来区分元素。

另一个问题是~ con_k | exp_j不会自动嵌套在研究中。该rma.mv()函数还允许交叉随机效应,因此如果您想为嵌套在研究中的条件添加随机效应,那么您应该创建一个新变量,例如exp.in.study反映这一点。你可以用dat$exp.in.study <- paste0(dat$stu_i, ".", dat$exp_j). 然后你可以用它~ con_k | exp.in.stu来反映这个嵌套。

但是,根据您的描述,我认为您真正应该使用的是更简单的模型结构,即random = ~ 1 | stu_i / exp_j / con_k(在这种情况下,struct论点不相关)。

尽管如此,如果您的数据集有 100,000 多行,那么默认的工作方式rma.mv()将成为内存问题,因为在内部,该函数将处理具有此类维度的矩阵。一个简单的解决方案是使用sparse=TRUE,在这种情况下,矩阵在内部存储为稀疏结构。那时您可能甚至不需要任何并行处理,但是您可以尝试是否optimizer="optimParallel"可以加快速度(但这ncpus=3就是您所需要的,因为如果按照建议指定,这实际上是模型将估计的方差分量的数量以上)。

于 2020-10-01T10:53:25.530 回答