Meta-regression

Audrey Beliveau, Justin Slater

2019-08-30

data(afib)

dataprep <- data.prep(arm.data = afib,
                      varname.t = "treatment",
                      varname.s = "study")

Feasibility Assessment

Network Plot

Generate Network Characteristics via net.tab()

Network Characteristics

network.char$network generates characteristics about the network, such as connectedness, number of treatments in the network, and in the case of a binomial outcome, the number of events in the network.

Characteristic Value
Number of Interventions 17
Number of Studies 26
Total Number of Patients in Network 27444
Total Possible Pairwise Comparisons 136
Total Number of Pairwise Comparisons With Direct Data 29
Is the network connected? TRUE
Number of Two-arm Studies 17
Number of Multi-Arms Studies 9
Total Number of Events in Network 1249
Number of Studies With No Zero Events 25
Number of Studies With At Least One Zero Event 1
Number of Studies with All Zero Events 1

Intervention Characteristics

network.char$intervention generates outcome and sample size data broken down by treatment.

treatment n.studies n.events n.patients min.outcome max.outcome av.outcome
01 11 223 2442 0.0329670 0.2666667 0.0913186
02 4 16 675 0.0141509 0.0333333 0.0237037
03 19 334 11030 0.0000000 0.1015228 0.0302811
04 2 19 317 0.0333333 0.0838323 0.0599369
05 7 122 1965 0.0283688 0.1634615 0.0620865
06 7 167 1722 0.0000000 0.2307692 0.0969803
07 1 5 21 0.2380952 0.2380952 0.2380952
08 1 1 90 0.0111111 0.0111111 0.0111111
09 2 94 3664 0.0246479 0.0265306 0.0256550
10 1 11 242 0.0454545 0.0454545 0.0454545
11 1 23 462 0.0497835 0.0497835 0.0497835
12 1 20 114 0.1754386 0.1754386 0.1754386
13 1 32 334 0.0958084 0.0958084 0.0958084
14 2 59 692 0.0643275 0.0921305 0.0852601
15 1 3 235 0.0127660 0.0127660 0.0127660
16 1 106 3335 0.0317841 0.0317841 0.0317841
17 1 14 104 0.1346154 0.1346154 0.1346154

Comparison Characteristics

network.char$comparison generates outcome and sample size data broken down by treatment comparison.

comparison n.studies n.patients n.outcomes proportion
01 vs. 02 2 991 46 0.0464178
01 vs. 03 4 1809 140 0.0773908
01 vs. 05 4 1949 121 0.0620831
01 vs. 06 3 1409 189 0.1341377
01 vs. 07 1 36 9 0.2500000
01 vs. 08 1 181 4 0.0220994
01 vs. 12 1 221 43 0.1945701
01 vs. 13 1 668 73 0.1092814
01 vs. 17 1 211 37 0.1753555
02 vs. 03 2 368 11 0.0298913
02 vs. 05 1 263 8 0.0304183
03 vs. 04 2 640 31 0.0484375
03 vs. 05 4 2620 123 0.0469466
03 vs. 06 6 2905 242 0.0833046
03 vs. 09 2 7329 196 0.0267431
03 vs. 10 1 479 17 0.0354906
03 vs. 11 1 916 41 0.0447598
03 vs. 14 2 1385 84 0.0606498
03 vs. 15 1 472 9 0.0190678
03 vs. 16 1 6706 171 0.0254996
04 vs. 06 1 336 23 0.0684524
04 vs. 14 1 338 25 0.0739645
05 vs. 08 1 194 5 0.0257732
05 vs. 12 1 218 37 0.1697248
05 vs. 17 1 208 31 0.1490385
06 vs. 07 1 34 8 0.2352941
06 vs. 14 1 340 20 0.0588235
10 vs. 15 1 477 14 0.0293501
12 vs. 17 1 218 34 0.1559633

Main analysis

nma.model() creates BUGS code and that will be put into nma.run() and analysed through JAGS (Plummer 2017). The reference parameter indicates the name of the treatment that will be seen as the ‘referent’ comparator, this is often a placebo of some sort. In our case, it is treatment 02. Since our outcome is dichotomous, and we are not interested in event rates, we are using the “binomial” family. In our case, we want to compare odds ratios, so we are using the \(logit\) link.

fixed_effects_model <- nma.model(data=dataprep,
                                  outcome="events",
                                  N="sampleSize",
                                  reference="02",
                                  family="binomial",
                                  link="logit",
                                  effects="fixed",
                                  covariate="stroke",
                                  prior.beta="EXCHANGEABLE")

random_effects_model <- nma.model(data=dataprep,
                                  outcome="events",
                                  N="sampleSize",
                                  reference="02",
                                  family="binomial",
                                  link="logit",
                                  effects="random",
                                  covariate="stroke",
                                  prior.beta="EXCHANGEABLE")

If you want to review the BUGS code, you can review it by outputting cat(random_effects_model$bugs).

The next step is to run the NMA model using nma.run(). Since we are working in a Bayesian framework, we need to specify the number of adaptations, burn-ins, and iterations. A description of Bayesian MCMC is omitted here, we direct the reader to any introductory text on Bayesian Modelling (Lunn et al. 2012).

fixed_effects_results <- nma.run(fixed_effects_model,
                           n.adapt=1000,
                           n.burnin=1000,
                           n.iter=5000)

random_effects_results <- nma.run(random_effects_model,
                           n.adapt=1000,
                           n.burnin=1000,
                           n.iter=5000)

Model Choice

Compare fixed vs random effects models by comparing leverage plots and the DIC

par(mfrow = c(1,2))
nma.fit(fixed_effects_results, main = "Fixed Effects Model" )
#> Warning in nma.fit(fixed_effects_results, main = "Fixed Effects Model"):
#> Leverage cannot be calculated for zero cells.
nma.fit(random_effects_results, main= "Random Effects Model")
#> Warning in nma.fit(random_effects_results, main = "Random Effects Model"):
#> Leverage cannot be calculated for zero cells.

The random effects model seems to be more appropriate here due to a lower DIC, and slightly better leverage plot.

Results

Regression plot

We can see the effect of the covariate on the log odds ratio on the following plot

The lines are not parallel because we specified EXCHANGEABLE priors on the regression coefficients.

Let’s looks at the relative treatment differences and ranking of treaments when the proportion of patients with a prior stroke is equal to 0.1.

References

Lunn, David, Chris Jackson, Nicky Best, David Spiegelhalter, and Andrew Thomas. 2012. The Bugs Book: A Practical Introduction to Bayesian Analysis. Chapman; Hall/CRC.

Plummer, Martyn. 2017. JAGS Version 4.3.0 User Manual. http://people.stat.sc.edu/hansont/stat740/jags_user_manual.pdf.