R中多元荟萃分析(网络荟萃分析)的主要影响和相互作用

机器算法验证 r 多元分析 荟萃分析 网络元分析
2022-03-26 17:17:30

我想进行多变量元分析(或网络元分析)来研究两个因素(A 和 B,1 和 2)的影响。对于这两个因素的每一种组合,我都有许多研究报告了描述效应大小差异及其方差的结果(A1 vs B1,A1 vs B2,A2 vs B1,A2 vs B2)。每个效应量都来自一项单独的研究。我想研究我的两个因素的主要影响以及相互作用。在这里,我提供了一个 R 中数据的虚拟示例,该示例最初是为了试用 gemtc 包而创建的:

set.seed(100)
treat1 <- c(rep("A1", 10),rep("A1", 8),rep("A2", 15),rep("A2", 5))
treat2 <- c(rep("B1", 10),rep("B2", 8),rep("B1", 15),rep("B2", 5))
TE <- c(rnorm(10,5,1),rnorm(8,2,1),rnorm(15,3,1),rnorm(5,1,1))
seTE <- c(rnorm(10,1,1),rnorm(8,2,1),rnorm(15,0.5,1),rnorm(5,0.2,1))
studlab <- paste(rep("study_", 38), as.character(c(1:38)), sep="")
my_data <- data.frame(treat1, treat2, TE, seTE, studlab)
my_data

我会感谢一个指向适当的 R 包(gemtc、netmeta、mvmeta ?)的指针,它可以处理这些数据以及如何模拟主效应以及我的因素的相互作用。一些提示如何开始会很棒......

1个回答

鉴于每项研究都有一个单一的效应量估计(见上面的评论),可以使用常规的元回归方法进行分析。您可以使用metafor进行此类分析。“诀窍”是对变量进行编码,以指示在特定研究中比较了哪些治疗方法:

library(metafor)

my_data$A1 <- ifelse(treat1 == "A1", 1, 0)
my_data$A2 <- ifelse(treat1 == "A2", 1, 0)
my_data$B1 <- ifelse(treat2 == "B1", -1, 0)
my_data$B2 <- ifelse(treat2 == "B2", -1, 0)

res <- rma(TE, sei=seTE, mods = ~ A1 + A2 + B1 - 1, data=my_data)
res

产量:

Mixed-Effects Model (k = 38; tau^2 estimator: REML)

tau^2 (estimated amount of residual heterogeneity):     0.2898 (SE = 0.1578)
tau (square root of estimated tau^2 value):             0.5384
I^2 (residual heterogeneity / unaccounted variability): 59.02%
H^2 (unaccounted variability / sampling variability):   2.44

Test for Residual Heterogeneity: 
QE(df = 35) = 93.5215, p-val < .0001

Test of Moderators (coefficient(s) 1,2,3): 
QM(df = 3) = 435.5223, p-val < .0001

Model Results:

     estimate      se     zval    pval    ci.lb    ci.ub     
A1    2.2446  0.2837   7.9123  <.0001   1.6886   2.8006  ***
A2    0.9060  0.3387   2.6751  0.0075   0.2422   1.5699   **
B1   -2.2983  0.3467  -6.6294  <.0001  -2.9778  -1.6188  ***

---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

由于变量B2已被忽略,这成为“参考”处理。因此, 的系数A1是比较治疗A1与时的估计平均效果B2的系数A2是比较治疗A2与时的估计平均效果B2的系数B1是比较治疗B1与时的估计平均效果B2

此处分析的网络如下所示:

    A1   A2
    |\   /|
    | \ / |
    |  X  |
    | / \ |
    |/   \|
    B1   B2

因此, 和 之间的比较B1纯粹B2基于间接证据。

A1除了上面的比较(即vs A2A1vsB1A2vs B1之外,这里还有 3 个比较。您可以通过更改“参考”处理来获得这些。

这里的一个假设是,无论比较如何,异质性的数量都是相同的。这可能是真的,也可能不是。

描述此类分析的文章是:

萨兰蒂等人。(2008 年)。评估随机试验网络。医学研究中的统计方法, 17,279-301。

编辑:要测试第一个因素 (A & B) 的影响是否取决于第二个因素 (1 & 2),即 (A1 vs B1) = (A2 vs B2) 与否,请首先注意:

(A1-B2) - (A2-B2) - (B1-B2) = (A1-A2) - (B1-B2) 
                            = (A1-B1) - (A2-B2).

所以,你只需要测试是否b1 - b2 - b3 = 0. 你可以这样做:

predict(res, newmods=c(1,-1,-1))

或安装/加载multcomp包并使用:

summary(glht(res1, linfct=rbind(c(1,-1,-1))), test=adjusted("none"))

产生:

         Simultaneous Tests for General Linear Hypotheses

Linear Hypotheses:
       Estimate Std. Error z value Pr(>|z|)    
1 == 0   3.6369     0.5779   6.293 3.12e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Adjusted p values reported -- none method)