- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 the following data structure ,大约研究 i = 50,实验 j = 75,条件 k = 200。
在第 k 级,我有相关的度量。对于大约 20 个研究(25 个实验和 65 个条件),我有主题级别的数据并计算了方差-协方差矩阵。对于其余部分,我根据估计的相关性(针对受试者和条件)计算了方差-协方差矩阵。最后,我有一个完整的 k x k 方差-协方差矩阵 V。
为了尊重数据的多级结构,我使用 让每个研究中每个实验中的每个条件都具有唯一的协方差。非结构化 方差-协方差矩阵 ( see Details - Specifying Random Effects )。请注意,我不是 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 只是终止并没有错误消息。
rma.mv()
的优化选项在
notes .
2) 在我的场景中,切换到 Microsoft 的 R Open 或其他算法(没有并行化?!)是否合理?
最佳答案
可能不是每个研究都有 50 个实验,也不是每个实验都有 200 个条件,但是是的,50 * 75 * 200(即 750,000)行数据将是一个问题。但是,在我解决这个问题之前,让我们先从模型本身开始,这没什么意义。这 50 项研究中有 75 项实验,使用 ~ exp_j | stu_i
与 struct="UN"
意味着您正在尝试估计 75 x 75 var-cov 矩阵的方差和协方差。那已经是 2850 个参数了。 ~ con_k | exp_j
根据我的计算,part 又增加了 20,000 多个参数。这永远行不通。
根据您的描述,您有一个多层次结构,但研究 1 中的实验 1 所代表的内容与研究 2 中的实验 1 所代表的内容之间没有内在联系。所以这里的实验标识符只是用来区分研究中的不同实验,没有进一步的意义。将此与您有研究 1 中的结果 A 和 B、研究 2 中的结果 A、研究 3 中的结果 B 等的情况进行比较。 “A”在所有研究中实际上代表“A”,而不仅仅是用于区分元素。
另一个问题是~ con_k | exp_j
不会自动嵌套在研究中。 rma.mv()
函数还允许交叉随机效应,所以如果你想为条件添加随机效应 反过来又嵌套在研究中 那么你应该创建一个新变量,例如 exp.in.study
这反射(reflect)了这一点。你可以用 dat$exp.in.study <- paste0(dat$stu_i, ".", dat$exp_j)
做到这一点.那么你可以使用~ con_k | exp.in.stu
来反射(reflect)这种嵌套。
但是,根据您的描述,我认为您真正应该使用的是更简单的模型结构,即 random = ~ 1 | stu_i / exp_j / con_k
(在这种情况下, struct
参数不相关)。
尽管如此,如果您的数据集有 100,000 多行,那么默认方式 rma.mv()
作品将成为一个内存问题,因为在内部,该函数将处理具有此类维度的矩阵。一个简单的解决方案是使用 sparse=TRUE
,在这种情况下,矩阵在内部存储为稀疏结构。您可能甚至不需要任何并行处理,但您可以尝试 if optimizer="optimParallel"
会加快速度(但是 ncpus=3
就是你所需要的,因为如果按照上面的建议指定,这实际上是模型将估计的方差分量的数量)。
关于r - 在 metafor 中拟合具有 200 个效果大小的多元(多级)模型(rma.mv 和 optimParallel)失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64152030/
我试图了解 optimParallel 如何处理嵌入式函数: fn1 <- function(x){x^2-x+1} fn2 <- function(x){fn1(x)} # effectiv
我有一个 the following data structure ,大约研究 i = 50,实验 j = 75,条件 k = 200。 在第 k 级,我有相关的度量。对于大约 20 个研究(25 个
我是一名优秀的程序员,十分优秀!