1

我想在 metafor 包中运行子组元分析。最简单的方法是:

model.s.1 <- rma(yi=ES, vi=Va, data=dataset, method="DL", subset=S=="S_Level1")
model.s.2 <- rma(yi=ES, vi=Va, data=dataset, method="DL", subset=S=="S_Level2")
...
model.s.n <- rma(yi=ES, vi=Va, data=dataset, method="DL", subset=S=="S_Leveln")

但是,如果子组的因子具有多个级别,则手动执行此操作会非常混乱。我尝试使用 dplyr 来解决这个问题并简单地提取所有子组的系数:

Dataset %>%
   mutate(S=as.factor(S)) %>%
   group_by(S) %>%
   summarize(Coeff=coef.rma(rma(yi=ES, vi=Va, method="DL", data=.)))

但结果看起来像这样:

   S          Coeff
   <fct>       <dbl>
 1 hmdb        0.114
 2 HMDB0000123 0.114
 3 HMDB0000148 0.114
 4 HMDB0000158 0.114
 5 HMDB0000159 0.114
 6 HMDB0000161 0.114
 7 HMDB0000162 0.114
 8 HMDB0000167 0.114
 9 HMDB0000168 0.114
10 HMDB0000172 0.114
# ... with 14 more rows

似乎 rma 函数省略了 group_by 并每次计算整个数据集的池化效果。可能是什么原因?这种方法有其他选择吗?

4

3 回答 3

2

我们可以做 agroup_split然后循环遍历list元素map

library(tidyverse)
Dataset %>%
   group_split(S= factor(S)) %>%
   map_dfr(~ .x %>% 
            summarise(S = first(S), Coeff=coef.rma(rma(yi=ES, 
                          vi=Va, method="DL", data=.))))
于 2019-09-13T22:24:42.273 回答
1
library(metafor)
library(tidyverse)
Results <- Org %>%   # Primary analysis - DerSimonian-Laire Estimator
group_split(Metabolite= factor(Metabolite)) %>%
map_dfr(~ .x %>%
        summarise(Metabolite = first(Metabolite),
                  Coeff = ifelse(nlevels(Biospecimen)>1, 
                                 ifelse((rma(yi=Est,sei=SE, method="DL", data=.))$k>=5,
                                        coef.rma(rma(yi=Est,sei=SE, mods=~Biospecimen, method="DL", data=.)),NA),NA)))

它有效,但从 rma 函数产生了警告。然而结果似乎是正确的。非常感谢@akrun

于 2020-04-21T21:57:04.897 回答
1

亲爱的@akrun,我对类似的代码还有一个问题(上一个代码在错误的窗口中,对此感到抱歉)让我们假设对于每个研究子集,我想添加一个带有二进制的固定效应元回归因子 (0/1) - 我们称之为 F。

library(tidyverse)
Dataset %>%
   group_split(S=factor(S)) %>%
   map.dfr(~ .x %>%
        summarise(S=first(S), Coeff=coef.rma(rma(yi=ES,vi=Va, mods=~F, method="DL", 
        data=.))))

如果 S 中的某个子集只有零或一,它将从 rma 函数给出错误消息。然后如何添加一个公式以从列表中删除此类案例并用“NA”替换它们?

谢谢你,雅库布

于 2020-04-21T20:57:42.020 回答