-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchapter_10.qmd
668 lines (543 loc) · 25.5 KB
/
chapter_10.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
---
title: "Systematic review and meta-analysis of Real-World Evidence"
authors:
- name: Dimitris Mavridis
affiliations:
- ref: ioannina
- name: Thomas Debray
orcid: 0000-0002-1790-2719
affiliations:
- ref: smartdas
affiliations:
- id: smartdas
name: Smart Data Analysis and Statistics B.V.
city: Utrecht
- id: ioannina
name: University of Ioannina
city: Ioannina
format:
html:
toc: true
number-sections: true
execute:
cache: true
bibliography: 'https://api.citedrive.com/bib/0d25b38b-db8f-43c4-b934-f4e2f3bd655a/references.bib?x=eyJpZCI6ICIwZDI1YjM4Yi1kYjhmLTQzYzQtYjkzNC1mNGUyZjNiZDY1NWEiLCAidXNlciI6ICIyNTA2IiwgInNpZ25hdHVyZSI6ICI0MGFkYjZhMzYyYWE5Y2U0MjQ2NWE2ZTQzNjlhMWY3NTk5MzhhNzUxZDNjYWIxNDlmYjM4NDgwOTYzMzY5YzFlIn0=/bibliography.bib'
---
```{r}
#| include: false
#| echo: false
#| message: false
#| warning: false
# List of required packages
required_packages <- c("kableExtra", "dplyr", "gemtc", "netmeta", "remotes")
# Install required packages
for (pkg in required_packages) {
if (!requireNamespace(pkg, quietly = TRUE)) {
install.packages(pkg)
}
}
library(kableExtra)
formatCI <- function(mean, lower, upper, ndigits = 2) {
str <- data.frame(mean, lower, upper) %>%
mutate(ci = ifelse(!is.na(mean),
paste0(sprintf("%.2f", mean), " (", sprintf("%.2f", lower), "; ", sprintf("%.2f", upper), ")"),"")) %>% pull(ci)
str
}
```
## Introduction
We first load the required packages
```{r}
#| warning: false
library(dplyr)
library(gemtc)
library(netmeta)
```
## Pairwise meta-analysis of clinical trials
### Toculizumab for coronavirus disease 2019
In this example, we consider the results from a systematic literature review of clinical trials investigating any pharmacological in hosptialized patients with coronavirus disease 2019 [@selvarajan_efficacy_2022]. A total of 23 randomized controlled trials were included and studied seven different interventions: dexamethasone, remdesivir, tocilizumab, hydroxychloroquine, combination of lopinavir/ritonavir, favipiravir and interferon-β. We here focus on the synthesis of 7 trials that comparted toculizumab (`TOCI`) to standard care (`STD`)
and collected mortality data.
```{r}
#| echo: false
#| message: false
#| warning: false
studlab <- c(rep("Tomazini et al",2),
rep("Horby et al",2),
rep("Biegel et al",2),
rep("Wang et al",2),
rep("Spinner et al",2),rep("Solidarity trial - Remdesivir",2),
rep("Hermine et al",2),rep("Salvarini et al",2),
rep("Stone et al",2), rep("Rosas et al",2), rep("Salama et al",2),
rep("Veiga et al",2), rep("Ulrich et al",2),
rep("Lyngbakken et al",2), rep("Solidarity trial - HCQ",2),
rep("Abd-Elsalam et al",2),rep("Cavalcanti et al",2),
rep("Recovery group",2), rep("Solidarity trial-LR",2),
rep("Cao et al",2), rep("Davoudi-Monfared",2),
rep("Solidarity trial - Interferon",2),rep("Rohmani",2))
treat <- c("DEXA", "STD", "DEXA", "STD", "REM", "STD", "REM", "STD", "REM",
"STD", "REM", "STD", "TOCI", "STD", "TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "TOCI", "STD", "TOCI", "STD", "HCQ", "STD", "HCQ",
"STD", "HCQ", "STD", "HCQ", "STD", "HCQ", "STD", "LOP+RIT",
"STD", "LOP+RIT", "STD", "LOP+RIT", "STD", "INT-B", "STD", "INT-B",
"STD", "INT-B", "STD")
event <- c(85,91,482,1110,59,77,22,10,5,4,602,643,7,8,2,1,9,3,58,28,26,11,14,6,13,6,1,1,104,84,6,5,1,1,374,767,148,146,19,25,8,15,243,216,2,6)
n <- c(151,148,2104,4321,541,521,158,78,396,200,4146,4129,63,67,60,66,161,82,294,144,249,128,65,64,67,61,27,26,947,906,97,97,221,227,1616,3424,1399,1372,99,100,42,39,2050,2050,33,33)
covid <- pairwise(treat = treat, event = event, n = n, studlab = studlab, sm = "OR")
tocilizumab <- covid %>% filter(treat1 == "TOCI")
remdesvir <- covid %>% filter(treat1 == "REM")
```
```{r}
#| echo: false
#| message: false
#| warning: false
tocilizumab %>%
dplyr::select(studlab, treat1, treat2, event1, n1, event2, n2) %>%
kable(
align = "lrrrrrr",
booktabs = TRUE,
longtable = TRUE,
linesep = ""
) %>%
kableExtra::kable_styling(
latex_options = c("repeat_header"),
)
```
We now conduct a pairwise meta-analysis to assess the pooled effect of tocilizumab versus standard care. For each study, the log odds ratio and corresponding standard error is derived after which the corresponding estimates are pooled using the Mantel-Haenszel method.
```{r}
#| fig-width: 6
#| fig-height: 5
results.TOCI <- metabin(event1,n1,event2,n2,studlab,data=tocilizumab,
sm = "OR", main = "tocilizumab vs standard care",
prediction = TRUE)
forest(results.TOCI, leftcols = "studlab", rightcols = "effect.ci")
```
Altough a random effects meta-analysis was conducted, no heterogeneity was found ($\tau$=`r results.TOCI$tau`, with a 95\% confidence interval ranging from `r results.TOCI$lower.tau` to `r round(results.TOCI$upper.tau,2)`).
### Remdesivir for coronavirus disease 2019
In aforementioned example, a total of 4 trials compared remdesivir to standard care:
```{r}
#| echo: false
#| fig-width: 6
results.REM <- metabin(event1,n1,event2,n2,studlab,data=remdesvir,
sm = "OR", main = "remdesvir vs standard care",
prediction = TRUE)
forest(results.REM, leftcols = "studlab", rightcols = "effect.ci")
```
## Network meta-analysis of clinical trials
We here use the R packages `netmeta` for conducting a frequentist network meta-analysis. A detailed tutorial on the use of `netmeta` is available from the book [Doing Meta-Analysis with R: A Hands-On Guide](https://bookdown.org/MathiasHarrer/Doing_Meta_Analysis_in_R/).
### Interventions for coronavirus disease 2019
We here consider data from a study which aimed to assess the comparative effectiveness of remdesivir and tocilizumab for reducing mortality in hospitalised COVID-19 patients. 80 trials were identified from two published network meta-analyses [@selvarajan_efficacy_2022], [@Siemieniuk_2020], a living COVID-19 trial database (COVID-NMA Initiative) [Covid-NMA.com], and a clinical trial database [clinicaltrials.gov]. Trials were included in this study if the patient population included hospitalized COVID-19 patients, active treatment was remdesivir or tocilizumab, comparator treatment was placebo or standard care, short-term mortality data was available, and the trial was published. 21 trials were included. For included trials, a risk of bias score was extracted from the COVID-NMA Initiative.
```{r}
#| echo: false
#| message: false
#| warning: false
studlab <- c("Ader", "Ader", "Beigel (ACTT-1)", "Beigel (ACTT-1)", "Criner", "Criner",
"Mahajan", "Mahajan", "Pan (WHO Solidarity)", "Pan (WHO Solidarity)",
"Spinner", "Spinner", "Wang", "Wang", "Hermine (CORIMUNO)",
"Hermine (CORIMUNO)", "Horby (RECOVERY)", "Horby (RECOVERY)",
"Rosas (COVACTA)", "Rosas (COVACTA)", "Salama (EMPACTA)",
"Salama (EMPACTA)", "Salvarani", "Salvarani", "Soin (COVINTOC)",
"Soin (COVINTOC)", "Stone (BACC-BAY)", "Stone (BACC-BAY)", "Talaschian",
"Talaschian", "Veiga (TOCIBRAS)", "Veiga (TOCIBRAS)", "Declerq (COV-AID)",
"Declerq (COV-AID)", "Rutgers", "Rutgers", "Broman", "Broman", "Islam",
"Islam", "Gordon (REMAP-CAP)", "Gordon (REMAP-CAP)")
treat <- c("REM", "STD", "REM", "STD",
"REM", "STD", "REM", "STD",
"REM", "STD", "REM", "STD",
"REM", "STD", "TOCI", "STD",
"TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "REM", "STD",
"TOCI", "STD")
event <- c(34, 37, 59, 77, 4, 4, 5, 3, 602, 643, 5, 4, 22, 10, 7, 8, 621, 729, 58,
28, 26, 11, 2, 1, 11, 15, 9, 4, 5, 4, 14, 6, 10, 9, 21, 34, 1, 0, 0, 0,
83, 116)
n <- c(414, 418, 541, 521, 384, 200, 34, 36, 4146, 4129, 384, 200, 158, 78, 63,
67, 2022, 2094, 294, 144, 249, 128, 60, 63, 92, 88, 161, 82, 17, 19, 65,
64, 81, 74, 174, 180, 57, 29, 30, 30, 353, 358)
covid <- pairwise(treat = treat, event = event, n = n, studlab = studlab, sm = "OR")
covid %>% dplyr::select(studlab, treat1, treat2, event1, n1, event2, n2) %>%
kable(
align = "lrrrrrr",
booktabs = TRUE,
longtable = TRUE,
linesep = ""
) %>%
kableExtra::kable_styling(
latex_options = c("repeat_header"),
)
```
The corresponding network is displayed below:
```{r}
#| echo: false
#| message: false
#| warning: false
#| fig-width: 10
#| fig-cap: Evidence network of the 21 coronavirus-19 trials
NMA.covid <- netmeta(TE = TE, seTE = seTE, treat1 = treat1, treat2 = treat2,
studlab = studlab, data = covid, sm = "OR", ref = "STD",
comb.random = TRUE, warn = FALSE)
netgraph(NMA.covid)
```
We use the following command to calculate the log odds ratios and corresponding standard errors for each study:
```{r}
#| eval: false
covid <- pairwise(treat = treat,
event = event,
n = n,
studlab = studlab,
sm = "OR")
head(covid)
```
```{r}
#| echo: false
kable(head(covid))
```
Below, we conduct a random effects network meta-analysis where we consider standard care (`STD`) as the control treatment. Note that we have one study where zero cell counts occur, this study will not contribute to the NMA as the log odds ratio and its standard error cannot be determined.
```{r}
NMA.covid <- netmeta(TE = TE, seTE = seTE, treat1 = treat1, treat2 = treat2,
studlab = studlab, data = covid, sm = "OR", ref = "STD",
comb.random = TRUE, common = FALSE, warn = FALSE)
NMA.covid
```
A league table of the treatment effect estimates is given below:
```{r}
netleague(NMA.covid)
```
We can also present the results in a forest plot:
```{r}
#| echo: false
netmeta:::forest.netmeta(NMA.covid, leftcols = "studlab", rightcols = "effect.ci")
```
We now consider a Bayesian random effects network meta-analysis that analyzes the observed event counts
using a binomial link function.
```{r}
bdata <- data.frame(study = studlab,
treatment = treat,
responders = event,
sampleSize = n)
network <- mtc.network(data.ab = bdata)
model <- mtc.model(network,
likelihood = "binom",
link = "log",
linearModel = "random",
n.chain = 3)
```
```{r}
#| message: false
# Adaptation
mcmc1 <- mtc.run(model, n.adapt = 1000, n.iter = 1000, thin = 10)
# Sampling
mcmc2 <- mtc.run(model, n.adapt = 10000, n.iter = 100000, thin = 10)
```
We can extract the pooled treatment effect estimates from the posterior distribution. When using `STD` as control group, we have:
```{r}
summary(relative.effect(mcmc2, t1 = "STD"))
```
The corresponding odds ratios are as follows:
```{r}
#| echo: false
bresults.STD <- summary(relative.effect(mcmc2, t1 = "STD"))
bOR <- round(exp(bresults.STD$summaries[[2]][c("d.STD.REM", "d.STD.TOCI"), c("2.5%", "50%", "97.5%")]),2)
out <- data.frame("Comparison" = character(), "Risk Ratio (95% CrI)" = character())
out <- out %>% add_row(data.frame("Comparison" = ifelse(rownames(bOR)[1] == "d.STD.REM", "REM vs. STD", "TOCI vs. STD"), "Risk Ratio (95% CrI)" = paste0(bOR[1,"50%"], " (", bOR[1, "2.5%"], "; ", bOR[1, "97.5%"], ")")))
out <- out %>% add_row(data.frame("Comparison" = ifelse(rownames(bOR)[2] == "d.STD.REM", "REM vs. STD", "TOCI vs. STD"), "Risk Ratio (95% CrI)" = paste0(bOR[2,"50%"], " (", bOR[2, "2.5%"], "; ", bOR[2, "97.5%"], ")")))
bresults.TOCI <- summary(relative.effect(mcmc2, t1 = "TOCI"))
bOR <- round(exp(bresults.TOCI$summaries[[2]]["d.TOCI.REM", c("2.5%", "50%", "97.5%")]),2)
out <- out %>% add_row(data.frame("Comparison" = "REM vs. TOCI", "Risk Ratio (95% CrI)" = paste0(bOR["50%"], " (", bOR["2.5%"], "; ", bOR["97.5%"], ")")))
out %>% knitr::kable(
align = "lc",
booktabs = TRUE,
longtable = TRUE,
linesep = "",
col.names = c("Comparison", "95% CrI")
)
```
Finally, we expand the COVID-19 network with trials investigating the effectiveness of hydroxychloroquine (HCQ), lopinavir/ritonavir (LOPI), dexamethasone (DEXA) or interferon-$\beta$ (INTB) [@selvarajan_efficacy_2022]. The corresponding network is displayed below:
```{r}
#| echo: false
#| message: false
#| warning: false
#| fig-width: 10
#| fig-cap: Evidence network of the 33 coronavirus-19 trials
studlab <- c("Abd-Elsalam et al", "Abd-Elsalam et al",
"Ader", "Ader",
"Beigel (ACTT-1)", "Beigel (ACTT-1)",
"Cao et al", "Cao et al",
"Cavalcanti et al", "Cavalcanti et al",
"Davoudi-Monfared", "Davoudi-Monfared",
"Horby (RECOVERY; DEXA)", "Horby (RECOVERY; DEXA)",
"Lyngbakken et al", "Lyngbakken et al",
"Horby (RECOVERY; LOPI)", "Horby (RECOVERY; LOPI)",
"Rohmani", "Rohmani",
"Pan (WHO Solidarity; LOPI)", "Pan (WHO Solidarity; LOPI)",
"Pan (WHO Solidarity; HCQ)", "Pan (WHO Solidarity; HCQ)",
"Pan (WHO Solidarity; INTB)", "Pan (WHO Solidarity; INTB)",
"Tomazini et al", "Tomazini et al",
"Ulrich et al", "Ulrich et al",
"Criner", "Criner",
"Mahajan", "Mahajan",
"Pan (WHO Solidarity; REM)", "Pan (WHO Solidarity; REM)",
"Spinner", "Spinner",
"Wang", "Wang",
"Hermine (CORIMUNO)", "Hermine (CORIMUNO)",
"Horby (RECOVERY; TOCI)", "Horby (RECOVERY; TOCI)",
"Rosas (COVACTA)", "Rosas (COVACTA)",
"Salama (EMPACTA)", "Salama (EMPACTA)",
"Salvarani", "Salvarani",
"Soin (COVINTOC)","Soin (COVINTOC)",
"Stone (BACC-BAY)", "Stone (BACC-BAY)",
"Talaschian","Talaschian",
"Veiga (TOCIBRAS)", "Veiga (TOCIBRAS)",
"Declerq (COV-AID)", "Declerq (COV-AID)", "Rutgers", "Rutgers", "Broman", "Broman", "Islam",
"Islam", "Gordon (REMAP-CAP)", "Gordon (REMAP-CAP)")
treat <- c("HCQ", "STD", # Abd-Elsalam
"REM", "STD", # Ader
"REM", "STD", # Beigel
"LOPI", "STD", # Cao et al.
"HCQ", "STD", # Cavalcanti et al
"INTB", "STD", # Davoudi-Monfared
"DEXA", "STD", # Horby et al
"HCQ", "STD", # Lyngbakken et al
"LOPI", "STD", # Recovery group
"INTB", "STD", # Rohmani
"LOPI", "STD", #Pan (WHO Solidarity; LOPI)
"HCQ", "STD", # Pan (WHO Solidarity; HCQ)
"INTB", "STD", # Pan (WHO Solidarity; Interferon)
"DEXA", "STD", # Tomazini et al
"HCQ", "STD", # Ulrich et al
"REM", "STD", # Criner
"REM", "STD", # Mahajan
"REM", "STD", # Pan (WHO Solidarity; REM)
"REM", "STD", # Spinner
"REM", "STD", # Wang
"TOCI", "STD", # Hermine (CORIMUNO)
"TOCI", "STD", # Horby (RECOVERY; TOCI)
"TOCI", "STD",
"TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "TOCI", "STD",
"TOCI", "STD", "REM", "STD",
"TOCI", "STD")
event <- c(6, 5, # Abd-Elsalam
34, 37, # Ader
59, 77, # Beigel
19, 25, # Cao
1, 1, # Cavalcanti et al
8, 15, # Davoudi-Monfared
482, 1110, # Horby et al
1, 1, # Lyngbakken et al
374, 767, # Recovery group
2, 6, # Rohmani
151, 153, # Pan (WHO Solidarity; LOPI)
104, 89, # Pan (WHO Solidarity; HCQ)
316, 266, # Pan (WHO Solidarity; Interferon)
85, 91, # Tomazini et al
13, 6, # Ulrich et al
4, 4, # Criner
5, 3, # Mahajan
602, 643, # Pan (WHO Solidarity; REM)
5, 4, # Spinner
22, 10, # Wang
7, 8, # Hermine (CORIMUNO)
621, 729, # Horby (RECOVERY; TOCI)
58,
28, 26, 11, 2, 1, 11, 15, 9, 4, 5, 4, 14, 6, 10, 9, 21, 34, 1, 0, 0, 0,
83, 116)
n <- c(97, 97, # Abd-Elsalam
414, 418, # Ader
541, 521, # Beigel
99, 100, # Cao
221, 227, # Cavalcanti et al
42, 39, # Davoudi-Monfared
2104, 4321, # Horby et al
27, 26, # Lyngbakken et al
1616, 3424, # Recovery group
33, 33, # Rohmani
1404, 1368, # Pan (WHO Solidarity; LOPI)
948, 900, # Pan (WHO Solidarity; HCQ)
2144, 2147, # Pan (WHO Solidarity; Interferon)
151, 148, # Tomazini et al
67, 61, # Ulrich et al
384, 200, # Criner
34, 36, # Mahajan
4146, 4129, # Pan (WHO Solidarity; REM)
384, 200, # Spinner
158, 78, # Wang
63, 67, 2022, 2094, 294, 144, 249, 128, 60, 63, 92, 88, 161, 82, 17, 19, 65,
64, 81, 74, 174, 180, 57, 29, 30, 30, 353, 358)
covidfull <- pairwise(treat = treat, event = event, n = n, studlab = studlab, sm = "OR")
NMA.covidfull <- netmeta(TE = TE, seTE = seTE, treat1 = treat1, treat2 = treat2,
studlab = studlab, data = covidfull, sm = "OR", ref = "STD",
comb.random = TRUE, warn = FALSE)
netgraph(NMA.covidfull)
```
We conducted a random effects network meta-analysis, results are depicted below:
```{r}
#| echo: false
NMA.covidf <- netmeta(TE = TE, seTE = seTE, treat1 = treat1, treat2 = treat2,
studlab = studlab, data = covidfull, sm = "OR", ref = "STD",
prediction = TRUE,
comb.random = TRUE, common = FALSE, warn = FALSE)
NMA.covidf
```
We can calculate the P score for each treatment as follows:
```{r}
netrank(NMA.covidf)
```
### Pharmacologic treatments for chronic obstructive pulmonary disease
In this example, we consider the resuls from a systematic review of randomized controlled trials on pharmacologic treatments for chronic obstructive pulmonary disease [@Baker_2009]. The primary outcome, occurrence of one or more episodes of COPD exacerbation, is binary (yes / no). For this outcome, five drug treatments (fluticasone, budesonide, salmeterol, formoterol, tiotropium) and two combinations (fluticasone + salmeterol, budesonide + formoterol) were compared to placebo. The authors considered the two combinations as separate treatments instead of evaluating the individual components.
```{r}
data(Baker2009)
```
```{r}
#| echo: false
kable(head(Baker2009))
```
```{r}
Baker <- pairwise(treat = treatment,
event = exac,
n = total,
studlab = id,
sm = "OR",
data = Baker2009)
NMA.COPD <- netmeta(TE = TE, seTE = seTE, treat1 = treat1, treat2 = treat2,
studlab = studlab, data = Baker, sm = "OR", ref = "Placebo",
comb.random = TRUE)
netgraph(NMA.COPD)
```
We can test for local network inconsistency as follows:
```{r}
#| eval: false
netsplit(NMA.COPD)
```
By default, indirect estimates are derived using the back-calculation method. A comparison of direct and indirect treatment effect estimates (depicted as odds ratio) from the random effects network meta-analysis model is given in the table below:
```{r}
#| echo: false
SIDES.COPD <- netsplit(NMA.COPD)
out <- data.frame("comparison" = SIDES.COPD$comparison,
"k" = SIDES.COPD$k,
"nma" = sprintf("%.2f",exp(SIDES.COPD$random$TE)),
"direct" = sprintf("%.2f",exp(SIDES.COPD$direct.random$TE)),
"indirect" = sprintf("%.2f",exp(SIDES.COPD$indirect.random$TE)),
"RoR" = sprintf("%.2f",exp(SIDES.COPD$compare.random$TE)),
"p.RoR" = sprintf("%.2f",SIDES.COPD$compare.random$p))
# Replacing all NA values with "."
out <- out %>%
mutate(across(everything(), ~ifelse(.=="NA", ".", .)))
out %>%
kable(
align = "lcccccc",
booktabs = TRUE,
longtable = TRUE,
linesep = ""
) %>%
kableExtra::kable_styling(
latex_options = c("repeat_header"),
)
```
### Advanced Therapies for Ulcerative Colitis
In this example, we consider a systematic literature review of Phase 3
randomized controlled trials investigating the following advanced therapies:
infliximab, adalimumab, vedolizumab, golimumab, tofacitinib, ustekinumab,
filgotinib, ozanimod, and upadacitinib [@panaccione_efficacy_2023]. This review
included 48 RCTs, from which 23 were found eligible for inclusion in a
network meta-analysis. The included RCT populations were largely comparable in their baseline
characteristics, though some heterogeneity was noted in weight,
disease duration, extent of disease, and concomitant medications.
A risk of bias assessment showed a low risk of bias for all included RCTs,
which were all industry sponsored.
We here focus on the synthesis of 18 trials that contributed efficacy data for
induction in bio-naive populations. The following FDA- and/or EMA-approved
biologic or SMD doses were investigated:
* Adalimumab subcutaneous 160 mg at week 0, 80 mg at week 2, and 40 mg at week 4 (`ADA160/80`)
* Infliximab intravenous 5 mg/kg (`INF5`) at weeks 0, 2, and 6 then every 8 weeks
* Infliximab intravenous 10 mg/kg (`INF10`) at weeks 0, 2, and 6 then every 8 weeks
* Filgotinib oral 100 mg once daily (`FIL100`)
* Filgotinib oral 200 mg once daily (`FIL200`)
* Golimumab subcutaneous 200 mg at week 0 and 100 mg at week 2 (`GOL200/100`)
* Ozanimod oral 0.23 mg once daily for 4 days, 0.46 mg once daily for 3 days, then 0.92 mg once daily (`OZA0.92`)
* Tofacitinib oral 10 mg twice daily for 8 weeks (`TOF10`)
* Upadacitinib oral 45 mg once daily for 8 weeks (`UPA45`)
* Ustekinumab intravenous 6 mg/kg at week 0 (`UST6`)
* Vedolizumab intravenous 300 mg at weeks 0, 2, and 6 (`VED300`)
The reference treatment is placebo (`PBO`).
```{r}
#| echo: false
#| message: false
#| warning: false
#| tbl-cap: Efficacy outcomes (i.e., clinical remission) data of induction bio-naïve populations
# Efficacy outcomes data of induction bio-naïve populations
studlab <- c("ACT-1", "ACT-1", "ACT-1", "ACT-2", "ACT-2", "ACT-2", "GEMINI 1",
"GEMINI 1", "Japic CTI-060298", "Japic CTI-060298", "Jiang 2015",
"Jiang 2015", "M10-447", "M10-447", "NCT01551290", "NCT01551290",
"NCT02039505", "NCT02039505", "OCTAVE 1", "OCTAVE 1", "OCTAVE 2",
"OCTAVE 2", "PURSUIT-SC", "PURSUIT-SC", "SELECTION", "SELECTION",
"SELECTION", "TRUE NORTH", "TRUE NORTH", "U-ACCOMPLISH",
"U-ACCOMPLISH", "U-ACHIEVE Study 2", "U-ACHIEVE Study 2",
"ULTRA-1", "ULTRA-1", "ULTRA-2", "ULTRA-2", "UNIFI", "UNIFI")
treat <- c("INF10", "INF5", "PBO", "INF10", "INF5", "PBO", "VED300", "PBO",
"INF5", "PBO", "INF5", "PBO", "ADA160/80", "PBO", "INF5", "PBO",
"VED300", "PBO", "TOF10", "PBO", "TOF10", "PBO", "GOL200/100",
"PBO", "FIL100", "FIL200", "PBO", "OZA0.92", "PBO", "UPA45", "PBO",
"UPA45", "PBO", "ADA160/80", "PBO", "ADA160/80", "PBO", "UST6",
"PBO")
event <- c(39, 47, 18, 33, 41, 7, 30, 5, 21, 11, 22, 9, 9, 11, 11, 5, 22,
6, 56, 9, 43, 4, 45, 16, 47, 60, 17, 66, 10, 54, 3, 41, 4, 24,
12, 32, 16, 27, 15)
n <- c(122, 121, 121, 120, 121, 123, 130, 76, 104, 104, 41, 41, 90, 96, 50,
49, 79, 41, 222, 57, 195, 47, 253, 251, 277, 245, 137, 299, 151, 166,
81, 145, 72, 130, 130, 150, 145, 147, 151)
UlcerativeColitis <- pairwise(treat=treat,event=event,n=n,studlab=studlab, sm="OR")
UlcerativeColitis %>% dplyr::select(studlab, treat1, treat2, event1, n1, event2, n2) %>%
kable(
align = "lrrrrrr",
booktabs = TRUE,
longtable = TRUE,
linesep = ""
) %>%
kableExtra::kable_styling(
latex_options = c("repeat_header"),
)
```
The corresponding network is displayed below:
```{r}
#| echo: false
#| message: false
#| warning: false
#| fig-width: 10
#| fig-cap: Evidence network of 18 trials that contributed efficacy data for induction in bio-naive populations
NMA.uc <- netmeta(TE = TE, seTE = seTE, treat1 = treat1, treat2 = treat2,
studlab = studlab, data = UlcerativeColitis, sm = "OR",
ref = "PBO", comb.random = TRUE)
netgraph(NMA.uc)
```
Below, we conduct a random effects network meta-analysis of the reported study
effects (expressed as odds ratio) and consider placebo (`treat = "PBO"`) as
the control treatment.
```{r}
#| eval: false
NMA.uc <- netmeta(TE = TE, seTE = seTE, treat1 = treat1, treat2 = treat2,
studlab = studlab, data = UlcerativeColitis, sm = "OR",
ref = "PBO", common = FALSE, comb.random = TRUE)
NMA.uc
```
All treatments except `FIL100` and `UST6` are significantly more efficacious than `PBO` at inducing clinical remission. We can now estimate the probabilities of each treatment being at each possible rank and the SUCRAs (Surface Under the Cumulative RAnking curve):
```{r}
sucra.uc <- rankogram(NMA.uc, nsim = 100, random = TRUE, common = FALSE,
small.values = "undesirable")
# Exctract the SUCRA values
sucra.uc$ranking.random
```
These results indicate that `r round( sucra.uc$ranking.random["UPA45"]*100,1)`% of the evaluated treatments are worse than `UPA45`.
## Version info {.unnumbered}
This chapter was rendered using the following version of R and its packages:
```{r}
#| echo: false
#| message: false
#| warning: false
sessionInfo()
```
## References {.unnumbered}