Back to main page.
Read data.
D <- readSheet("Bleeding")
D <- D[!is.na(label)]
D <- D[,
`:=` (nWarfarin = as.numeric(nWarfarin),
yWarfarin = as.numeric(yWarfarin))]
Tidy up the data (do not show the code).
Hard-code data corrections to the PETRO study.
From: Marian McDonagh
Sent: Friday, February 05, 2016 5:00 PM
To: Benjamin Chan
Subject: Re: Checking data for meta-analysisIt looks like this was a dose-ranging studies with multiple arms. The only relevant one here had 0 events in the dabigatran 150 group (N = 100), and of course 0 in the warfarin group (N = 70).
D <- D[study == "PETRO" & treatment == "Dabigatran_300_mg",
`:=` (treatment = "Dabigatran_150_mg",
responders = 0,
sampleSize = 100)]
| study | treatment | responders | sampleSize |
|---|---|---|---|
| ARISTOTLE | Apixaban_5_mg | 327 | 9088 |
| ARISTOTLE | Warfarin | 462 | 9052 |
| ARISTOTLE-J | Apixaban_5_mg | 0 | 74 |
| ARISTOTLE-J | Warfarin | 1 | 74 |
| ENGAGE AF-TIMI | Edoxaban_30_mg | 254 | 7034 |
| ENGAGE AF-TIMI | Edoxaban_60_mg | 418 | 7035 |
| ENGAGE AF-TIMI | Warfarin | 524 | 7036 |
| J-ROCKET | Rivaroxaban_15_mg | 639 | |
| J-ROCKET | Warfarin | 639 | |
| PETRO | Dabigatran_150_mg | 0 | 100 |
| PETRO | Warfarin | 0 | 70 |
| RE-LY | Dabigatran_110_mg | 322 | 6015 |
| RE-LY | Dabigatran_150_mg | 375 | 6076 |
| RE-LY | Warfarin | 397 | 6022 |
| ROCKET-AF | Rivaroxaban_20_mg | 395 | 7081 |
| ROCKET-AF | Warfarin | 386 | 7090 |
| Yamashita, 2012 | Edoxaban_30_mg | 0 | 131 |
| Yamashita, 2012 | Edoxaban_60_mg | 2 | 131 |
| Yamashita, 2012 | Warfarin | 0 | 129 |
Run the model using fixed-effects.
M <- mtc.model(network, type="consistency", linearModel=effect)
plot(M)
results <- mtc.run(M, n.adapt=nAdapt, n.iter=nIter, thin=thin)
Direct and indirect odds ratios and 95% confidence bounds are stored in mtcBleedingOddsRatios.csv.
or <- combineResults(outcomeBleeding=TRUE)
write.csv(or, file="mtcBleedingOddsRatios.csv", row.names=FALSE)
print(xtable(or), type="html", include.rownames=FALSE)
| treatment | Apixaban 5 mg | Dabigatran 110 mg | Dabigatran 150 mg | Edoxaban 30 mg | Edoxaban 60 mg | Rivaroxaban 20 mg | Warfarin |
|---|---|---|---|---|---|---|---|
| Apixaban 5 mg vs | 0.86 (0.71, 1.06) | 0.74 (0.61, 0.91) | 1.49 (1.20, 1.83) | 0.88 (0.72, 1.06) | 0.67 (0.55, 0.83) | 0.69 (0.60, 0.80) | |
| Dabigatran 110 mg vs | 1.16 (0.94, 1.42) | 0.86 (0.74, 1.00) | 1.72 (1.39, 2.14) | 1.02 (0.83, 1.24) | 0.78 (0.64, 0.97) | 0.80 (0.69, 0.93) | |
| Dabigatran 150 mg vs | 1.34 (1.10, 1.65) | 1.16 (1.00, 1.35) | 2.00 (1.62, 2.48) | 1.18 (0.97, 1.44) | 0.91 (0.74, 1.12) | 0.93 (0.81, 1.07) | |
| Edoxaban 30 mg vs | 0.67 (0.55, 0.83) | 0.58 (0.47, 0.72) | 0.50 (0.40, 0.62) | 0.59 (0.50, 0.69) | 0.45 (0.37, 0.56) | 0.47 (0.40, 0.54) | |
| Edoxaban 60 mg vs | 1.14 (0.94, 1.39) | 0.99 (0.81, 1.21) | 0.85 (0.70, 1.03) | 1.70 (1.45, 1.99) | 0.77 (0.63, 0.94) | 0.79 (0.69, 0.90) | |
| Rivaroxaban 20 mg vs | 1.48 (1.21, 1.82) | 1.28 (1.03, 1.57) | 1.10 (0.89, 1.35) | 2.20 (1.78, 2.71) | 1.30 (1.07, 1.58) | 1.03 (0.89, 1.18) | |
| Warfarin vs | 1.44 (1.25, 1.67) | 1.25 (1.07, 1.45) | 1.07 (0.93, 1.24) | 2.15 (1.84, 2.51) | 1.27 (1.11, 1.45) | 0.97 (0.85, 1.13) |
noac <- unique(D[treatment != "Warfarin", treatment])
for (i in 1:length(noac)) {
forest(relative.effect(results, noac[i], noac[1:length(noac) != i]))
}
summary(results)
## $measure
## [1] "Log Odds Ratio"
##
## $summaries
##
## Iterations = 5010:30000
## Thinning interval = 10
## Number of chains = 4
## Sample size per chain = 2500
##
## 1. Empirical mean and standard deviation for each variable,
## plus standard error of the mean:
##
## Mean SD Naive SE Time-series SE
## d.Warfarin.Apixaban_5_mg -0.36793 0.07333 0.0007333 0.0007453
## d.Warfarin.Dabigatran_110_mg -0.22236 0.07670 0.0007670 0.0009095
## d.Warfarin.Dabigatran_150_mg -0.07100 0.07415 0.0007415 0.0007501
## d.Warfarin.Edoxaban_30_mg -0.76409 0.07899 0.0007899 0.0010145
## d.Warfarin.Edoxaban_60_mg -0.23618 0.06827 0.0006827 0.0006828
## d.Warfarin.Rivaroxaban_20_mg 0.02614 0.07326 0.0007326 0.0007421
##
## 2. Quantiles for each variable:
##
## 2.5% 25% 50% 75% 97.5%
## d.Warfarin.Apixaban_5_mg -0.5138 -0.41728 -0.36695 -0.31839 -0.22428
## d.Warfarin.Dabigatran_110_mg -0.3732 -0.27436 -0.22181 -0.17105 -0.07020
## d.Warfarin.Dabigatran_150_mg -0.2147 -0.12087 -0.07163 -0.01969 0.07207
## d.Warfarin.Edoxaban_30_mg -0.9218 -0.81712 -0.76388 -0.71072 -0.61115
## d.Warfarin.Edoxaban_60_mg -0.3708 -0.28220 -0.23674 -0.19012 -0.10248
## d.Warfarin.Rivaroxaban_20_mg -0.1187 -0.02268 0.02633 0.07606 0.16817
##
##
## $DIC
## Dbar pD DIC
## 17.45363 12.11059 29.56422
##
## attr(,"class")
## [1] "summary.mtc.result"
Sampler diagnostics.
gelman.plot(results)
gelman.diag(results)
## Potential scale reduction factors:
##
## Point est. Upper C.I.
## d.Warfarin.Apixaban_5_mg 1 1
## d.Warfarin.Dabigatran_110_mg 1 1
## d.Warfarin.Dabigatran_150_mg 1 1
## d.Warfarin.Edoxaban_30_mg 1 1
## d.Warfarin.Edoxaban_60_mg 1 1
## d.Warfarin.Rivaroxaban_20_mg 1 1
##
## Multivariate psrf
##
## 1
plot(results)
autocorr.plot(results$samples)
Assess the degree of heterogeneity and inconsistency.
anohe <- mtc.anohe(network, n.adapt=nAdapt, n.iter=nIter, thin=thin)
summary(anohe)
## Analysis of heterogeneity
## =========================
##
## Per-comparison I-squared:
## -------------------------
##
## t1 t2 i2.pair i2.cons incons.p
## 1 Apixaban_5_mg Warfarin 99.92203 80.35540 NA
## 2 Dabigatran_110_mg Dabigatran_150_mg NA NA NA
## 3 Dabigatran_110_mg Warfarin NA NA NA
## 4 Dabigatran_150_mg Warfarin 25.57975 0.00000 NA
## 5 Edoxaban_30_mg Edoxaban_60_mg 99.65912 89.34658 NA
## 6 Edoxaban_30_mg Warfarin 96.27542 0.00000 NA
## 7 Edoxaban_60_mg Warfarin 99.49744 95.45185 NA
## 8 Rivaroxaban_20_mg Warfarin NA NA NA
##
## Global I-squared:
## -------------------------
##
## i2.pair i2.cons
## 1 99.33462 67.75014
plot(anohe)
## Analysis of heterogeneity -- convergence plots
## Unrelated Study Effects (USE) model:
## Unrelated Mean Effects (UME) model:
## Consistency model: