[R-meta] Meta-regression in network meta-analysis

Viechtbauer, Wolfgang (SP) wo||g@ng@v|echtb@uer @end|ng |rom m@@@tr|chtun|ver@|ty@n|
Wed Aug 18 13:45:53 CEST 2021

Dear all,

Catching up on emails after my summer break and saw your (unanswered) post.

One can also compute P-scores based on a network meta-analysis conducted with metafor, although this is not automated. Let's consider the example from:

Rücker, G., & Schwarzer, G. (2015). Ranking treatments in frequentist network meta-analysis works without resampling methods. BMC Medical Research Methodology, 15, 58. https://doi.org/10.1186/s12874-015-0060-8

See here for the corresponding analysis using metafor:


Go down to the part with the comment:

### network meta-analysis using a contrast-based random-effects model
res <- rma.mv(yi, V, mods = ~ acarbose + benfluorex + metformin + miglitol + pioglitazone +
                              rosiglitazone + sitagliptin + sulfonylurea + vildagliptin - 1,
              random = ~ comp | study, rho=1/2, data=dat)

### corresponding forest plot
forest(coef(res), diag(vcov(res)), slab=names(coef(res)), order="obs",
       xlim=c(-3.0, 2.5), alim=c(-1.5, 0.5), psize=1, xlab="Estimate", header="Treatment")

The results are slightly different from Figure 4 in the paper because netmeta in this example is not using REML estimation, but the results are essentially the same.

In order to compute P-scores, we need to compute p-values for all pairwise comparisons, including the reference treatment (in this case, placebo), which was left out of 'mods' (to make it the reference treatment). So, we need to add 0 as the coefficient for placebo and also set the corresponding row/column in the var-cov matrix of the coefficients to 0. Then we can get all these p-values with:

contr <- contrMat(rep(1:(res$p+1)), type="Tukey")
b <- coef(res)
vb <- vcov(res)
b <- c(b[1:5],0,b[6:9])
vb <- bldiag(vb[1:5,1:5],0,vb[6:9,6:9])
pvals <- apply(contr, 1, function(x) pnorm((x%*%b) / sqrt(t(x)%*%vb%*%x)))

And we can create Table 2 with:

tab <- vec2mat(pvals, corr=FALSE)
tab[lower.tri(tab)] <- t((1 - tab)[lower.tri(tab)])
rownames(tab) <- colnames(tab) <- abbreviate(c(names(coef(res))[1:5],"placebo",names(coef(res))[6:9]))
round(tab, 2)

Finally, we can get the P-scores with:

cbind(round(sort(apply(tab, 1, mean, na.rm=TRUE), decreasing=TRUE), 3))

These are the same values as in Table 3 (except for the slight discrepancy due to rma.mv() using REML and netmeta in the example using a DL-type estimator).

One could include potential moderators in the example above to do a network meta-regression. I would center these moderators at some meaningful values, so that one could interpret the treatment effect estimates (as above) as the predicted estimates at the values at which the predictors were centered. Then one could proceed as above to compute P-scores conditional on those predictors.


>-----Original Message-----
>From: R-sig-meta-analysis [mailto:r-sig-meta-analysis-bounces using r-project.org] On
>Behalf Of Torbahn, Gabriel
>Sent: Thursday, 12 August, 2021 10:47
>To: Natan Gosmann; r-sig-meta-analysis using r-project.org
>Subject: Re: [R-meta] Meta-regression in network meta-analysis
>Good morning,
>just a follow-up on this question:
>has there been an answer to this issue?
>Thank you and best regards,
>Von: R-sig-meta-analysis <r-sig-meta-analysis-bounces using r-project.org> im Auftrag
>von Natan Gosmann <natan.gosmann using gmail.com>
>Gesendet: Freitag, 6. August 2021 08:04:12
>An: r-sig-meta-analysis using r-project.org
>Betreff: [R-meta] Meta-regression in network meta-analysis
>Dear colleagues,
>We are currently performing a network meta-analysis to evaluate the
>efficacy of some interventions. In order to provide more complete results,
>it would be really helpful to estimate treatment rankings; however, we
>think it would be essential to also perform meta-regression analysis.
>Netmeta can estimate treatment rankings and metafor can perform the
>meta-regression analyses; nevertheless, to the best of our knowledge, none
>of them can perform both analyses.
>Is there any way to estimate treatment rankings in metafor (eg. SUCRA,
>p-score) or to perform meta-regression in network meta-analyses in netmeta?
>We didn't find this information in netmeta or metafor manual, so any
>guidance here would be really helpful.

More information about the R-sig-meta-analysis mailing list