Code
source("R/nma_functions.R")
dat <- load_pairwise_data()
nm <- run_model(dat, model_type = "simple", effect_model = "random")ns <- tryCatch(
netmeta::netsplit(
nm,
random = TRUE,
common = FALSE,
backtransf = TRUE
),
error = identity
)
if (inherits(ns, "error")) {
cat("Node-splitting failed:", conditionMessage(ns))
} else {
dir <- ns$direct.random[, c("comparison", "TE", "lower", "upper", "p")]
ind <- ns$indirect.random[, c("comparison", "TE", "lower", "upper", "p")]
cmp <- ns$compare.random[, c("comparison", "z", "p")]
res <- merge(
dir,
ind,
by = "comparison",
all = TRUE,
suffixes = c(".direct", ".indirect")
)
res <- merge(
res,
cmp,
by = "comparison",
all = TRUE
)
res$Q <- res$z^2
res$df <- 1L
names(res)[names(res) == "TE.direct"] <- "Direct"
names(res)[names(res) == "TE.indirect"] <- "Indirect"
names(res)[names(res) == "p.x"] <- "p.direct"
names(res)[names(res) == "p.y"] <- "p.indirect"
names(res)[names(res) == "p"] <- "p.diff"
out <- res[, c(
"comparison",
"Direct",
"Indirect",
"lower.direct",
"upper.direct",
"lower.indirect",
"upper.indirect",
"z",
"Q",
"df",
"p.diff"
)]
numcols <- c(
"Direct",
"Indirect",
"lower.direct",
"upper.direct",
"lower.indirect",
"upper.indirect",
"z",
"Q",
"p.diff"
)
out[numcols] <- lapply(
out[numcols],
function(x) if (is.numeric(x)) round(x, 3) else x
)
out <- out[order(out$comparison), ]
knitr::kable(
out,
caption = "Node-splitting results: direct, indirect, and direct-versus-indirect evidence"
)
}| comparison | Direct | Indirect | lower.direct | upper.direct | lower.indirect | upper.indirect | z | Q | df | p.diff |
|---|---|---|---|---|---|---|---|---|---|---|
| Acal + O:Acal | NA | 0.540 | NA | NA | 0.071 | 1.009 | NA | NA | 1 | NA |
| Acal + O:BR | NA | 1.367 | NA | NA | 0.844 | 1.890 | NA | NA | 1 | NA |
| Acal + O:Clb | NA | 2.218 | NA | NA | 1.493 | 2.943 | NA | NA | 1 | NA |
| Acal + O:Clb + O | 1.967 | NA | 1.620 | 2.314 | NA | NA | NA | NA | 1 | NA |
| Acal + O:FCR | NA | 1.796 | NA | NA | 1.100 | 2.492 | NA | NA | 1 | NA |
| Acal + O:FCR + BR | NA | 1.551 | NA | NA | 0.929 | 2.173 | NA | NA | 1 | NA |
| Acal + O:I | NA | 0.346 | NA | NA | -0.286 | 0.978 | NA | NA | 1 | NA |
| Acal + O:I + R | NA | 0.890 | NA | NA | 0.159 | 1.621 | NA | NA | 1 | NA |
| Acal + O:Ibr + O | NA | 0.581 | NA | NA | 0.017 | 1.145 | NA | NA | 1 | NA |
| Acal + O:Ibr + Ven | NA | 0.657 | NA | NA | 0.141 | 1.173 | NA | NA | 1 | NA |
| Acal + O:Ven + O | NA | 0.796 | NA | NA | 0.303 | 1.289 | NA | NA | 1 | NA |
| Acal + O:Ven + O + Ibr | NA | 0.347 | NA | NA | -0.422 | 1.116 | NA | NA | 1 | NA |
| Acal + O:Ven + R | NA | 1.194 | NA | NA | 0.552 | 1.836 | NA | NA | 1 | NA |
| Acal + O:Zanubrutinib | NA | 0.129 | NA | NA | -0.485 | 0.743 | NA | NA | 1 | NA |
| BR:Acal | NA | -0.827 | NA | NA | -1.330 | -0.324 | NA | NA | 1 | NA |
| BR:Clb | NA | 0.851 | NA | NA | 0.349 | 1.353 | NA | NA | 1 | NA |
| BR:Clb + O | 0.600 | NA | 0.208 | 0.992 | NA | NA | NA | NA | 1 | NA |
| BR:FCR | NA | 0.429 | NA | NA | -0.290 | 1.148 | NA | NA | 1 | NA |
| BR:FCR + BR | NA | 0.184 | NA | NA | -0.464 | 0.832 | NA | NA | 1 | NA |
| BR:I | -1.021 | NA | -1.376 | -0.666 | NA | NA | NA | NA | 1 | NA |
| BR:I + R | NA | -0.477 | NA | NA | -1.230 | 0.276 | NA | NA | 1 | NA |
| BR:Ibr + O | NA | -0.786 | NA | NA | -1.379 | -0.193 | NA | NA | 1 | NA |
| BR:Ibr + Ven | NA | -0.710 | NA | NA | -1.257 | -0.163 | NA | NA | 1 | NA |
| BR:Ven + O | NA | -0.571 | NA | NA | -1.097 | -0.045 | NA | NA | 1 | NA |
| BR:Ven + O + Ibr | NA | -1.020 | NA | NA | -1.810 | -0.230 | NA | NA | 1 | NA |
| BR:Ven + R | NA | -0.173 | NA | NA | -0.841 | 0.495 | NA | NA | 1 | NA |
| BR:Zanubrutinib | -1.238 | NA | -1.559 | -0.917 | NA | NA | NA | NA | 1 | NA |
| Clb + O:Acal | -1.427 | NA | -1.743 | -1.111 | NA | NA | NA | NA | 1 | NA |
| Clb + O:FCR | NA | -0.171 | NA | NA | -0.774 | 0.432 | NA | NA | 1 | NA |
| Clb + O:FCR + BR | NA | -0.416 | NA | NA | -0.932 | 0.100 | NA | NA | 1 | NA |
| Clb + O:I | NA | -1.621 | NA | NA | -2.150 | -1.092 | NA | NA | 1 | NA |
| Clb + O:I + R | NA | -1.077 | NA | NA | -1.720 | -0.434 | NA | NA | 1 | NA |
| Clb + O:Ibr + O | -1.386 | NA | -1.831 | -0.941 | NA | NA | NA | NA | 1 | NA |
| Clb + O:Ibr + Ven | -1.310 | NA | -1.692 | -0.928 | NA | NA | NA | NA | 1 | NA |
| Clb + O:Ven + O | -1.171 | NA | -1.522 | -0.820 | NA | NA | NA | NA | 1 | NA |
| Clb + O:Ven + O + Ibr | NA | -1.620 | NA | NA | -2.306 | -0.934 | NA | NA | 1 | NA |
| Clb + O:Ven + R | NA | -0.773 | NA | NA | -1.313 | -0.233 | NA | NA | 1 | NA |
| Clb + O:Zanubrutinib | NA | -1.838 | NA | NA | -2.345 | -1.331 | NA | NA | 1 | NA |
| Clb:Acal | NA | -1.678 | NA | NA | -2.389 | -0.967 | NA | NA | 1 | NA |
| Clb:Clb + O | NA | -0.251 | NA | NA | -0.888 | 0.386 | NA | NA | 1 | NA |
| Clb:FCR | NA | -0.422 | NA | NA | -1.299 | 0.455 | NA | NA | 1 | NA |
| Clb:FCR + BR | NA | -0.667 | NA | NA | -1.486 | 0.152 | NA | NA | 1 | NA |
| Clb:I | -1.872 | NA | -2.227 | -1.517 | NA | NA | NA | NA | 1 | NA |
| Clb:I + R | NA | -1.328 | NA | NA | -2.233 | -0.423 | NA | NA | 1 | NA |
| Clb:Ibr + O | NA | -1.637 | NA | NA | -2.414 | -0.860 | NA | NA | 1 | NA |
| Clb:Ibr + Ven | NA | -1.561 | NA | NA | -2.304 | -0.818 | NA | NA | 1 | NA |
| Clb:Ven + O | NA | -1.422 | NA | NA | -2.149 | -0.695 | NA | NA | 1 | NA |
| Clb:Ven + O + Ibr | NA | -1.871 | NA | NA | -2.807 | -0.935 | NA | NA | 1 | NA |
| Clb:Ven + R | NA | -1.024 | NA | NA | -1.859 | -0.189 | NA | NA | 1 | NA |
| Clb:Zanubrutinib | NA | -2.089 | NA | NA | -2.685 | -1.493 | NA | NA | 1 | NA |
| FCR + BR:Acal | NA | -1.011 | NA | NA | -1.616 | -0.406 | NA | NA | 1 | NA |
| FCR + BR:I | NA | -1.205 | NA | NA | -1.944 | -0.466 | NA | NA | 1 | NA |
| FCR + BR:I + R | NA | -0.661 | NA | NA | -1.485 | 0.163 | NA | NA | 1 | NA |
| FCR + BR:Ibr + O | NA | -0.970 | NA | NA | -1.651 | -0.289 | NA | NA | 1 | NA |
| FCR + BR:Ibr + Ven | NA | -0.894 | NA | NA | -1.536 | -0.252 | NA | NA | 1 | NA |
| FCR + BR:Ven + O | -0.755 | NA | -1.133 | -0.377 | NA | NA | NA | NA | 1 | NA |
| FCR + BR:Ven + O + Ibr | -1.204 | NA | -1.657 | -0.751 | NA | NA | NA | NA | 1 | NA |
| FCR + BR:Ven + R | -0.357 | NA | -0.518 | -0.196 | NA | NA | NA | NA | 1 | NA |
| FCR + BR:Zanubrutinib | NA | -1.422 | NA | NA | -2.145 | -0.699 | NA | NA | 1 | NA |
| FCR:Acal | NA | -1.256 | NA | NA | -1.937 | -0.575 | NA | NA | 1 | NA |
| FCR:FCR + BR | NA | -0.245 | NA | NA | -1.039 | 0.549 | NA | NA | 1 | NA |
| FCR:I | NA | -1.450 | NA | NA | -2.252 | -0.648 | NA | NA | 1 | NA |
| FCR:I + R | -0.906 | NA | -1.129 | -0.683 | NA | NA | NA | NA | 1 | NA |
| FCR:Ibr + O | NA | -1.215 | NA | NA | -1.964 | -0.466 | NA | NA | 1 | NA |
| FCR:Ibr + Ven | -1.139 | NA | -1.605 | -0.673 | NA | NA | NA | NA | 1 | NA |
| FCR:Ven + O | NA | -1.000 | NA | NA | -1.698 | -0.302 | NA | NA | 1 | NA |
| FCR:Ven + O + Ibr | NA | -1.449 | NA | NA | -2.363 | -0.535 | NA | NA | 1 | NA |
| FCR:Ven + R | NA | -0.602 | NA | NA | -1.412 | 0.208 | NA | NA | 1 | NA |
| FCR:Zanubrutinib | NA | -1.667 | NA | NA | -2.455 | -0.879 | NA | NA | 1 | NA |
| I + R:Acal | NA | -0.350 | NA | NA | -1.066 | 0.366 | NA | NA | 1 | NA |
| I + R:Ibr + O | NA | -0.309 | NA | NA | -1.091 | 0.473 | NA | NA | 1 | NA |
| I + R:Ibr + Ven | NA | -0.233 | NA | NA | -0.750 | 0.284 | NA | NA | 1 | NA |
| I + R:Ven + O | NA | -0.094 | NA | NA | -0.827 | 0.638 | NA | NA | 1 | NA |
| I + R:Ven + O + Ibr | NA | -0.543 | NA | NA | -1.484 | 0.397 | NA | NA | 1 | NA |
| I + R:Ven + R | NA | 0.304 | NA | NA | -0.536 | 1.144 | NA | NA | 1 | NA |
| I + R:Zanubrutinib | NA | -0.761 | NA | NA | -1.580 | 0.058 | NA | NA | 1 | NA |
| I:Acal | NA | 0.194 | NA | NA | -0.422 | 0.810 | NA | NA | 1 | NA |
| I:I + R | NA | 0.544 | NA | NA | -0.288 | 1.377 | NA | NA | 1 | NA |
| I:Ibr + O | NA | 0.235 | NA | NA | -0.456 | 0.926 | NA | NA | 1 | NA |
| I:Ibr + Ven | NA | 0.311 | NA | NA | -0.341 | 0.963 | NA | NA | 1 | NA |
| I:Ven + O | NA | 0.450 | NA | NA | -0.185 | 1.085 | NA | NA | 1 | NA |
| I:Ven + O + Ibr | NA | 0.001 | NA | NA | -0.865 | 0.867 | NA | NA | 1 | NA |
| I:Ven + R | NA | 0.848 | NA | NA | 0.092 | 1.604 | NA | NA | 1 | NA |
| I:Zanubrutinib | NA | -0.217 | NA | NA | -0.696 | 0.262 | NA | NA | 1 | NA |
| Ibr + O:Acal | NA | -0.041 | NA | NA | -0.586 | 0.504 | NA | NA | 1 | NA |
| Ibr + O:Ibr + Ven | NA | 0.076 | NA | NA | -0.511 | 0.663 | NA | NA | 1 | NA |
| Ibr + O:Ven + O | NA | 0.215 | NA | NA | -0.352 | 0.782 | NA | NA | 1 | NA |
| Ibr + O:Ven + O + Ibr | NA | -0.234 | NA | NA | -1.052 | 0.584 | NA | NA | 1 | NA |
| Ibr + O:Ven + R | NA | 0.613 | NA | NA | -0.087 | 1.313 | NA | NA | 1 | NA |
| Ibr + O:Zanubrutinib | NA | -0.452 | NA | NA | -1.126 | 0.222 | NA | NA | 1 | NA |
| Ibr + Ven:Acal | NA | -0.117 | NA | NA | -0.613 | 0.379 | NA | NA | 1 | NA |
| Ibr + Ven:Ven + O | NA | 0.139 | NA | NA | -0.380 | 0.658 | NA | NA | 1 | NA |
| Ibr + Ven:Ven + O + Ibr | NA | -0.310 | NA | NA | -1.096 | 0.476 | NA | NA | 1 | NA |
| Ibr + Ven:Ven + R | NA | 0.537 | NA | NA | -0.125 | 1.199 | NA | NA | 1 | NA |
| Ibr + Ven:Zanubrutinib | NA | -0.528 | NA | NA | -1.163 | 0.107 | NA | NA | 1 | NA |
| Ven + O + Ibr:Acal | NA | 0.193 | NA | NA | -0.562 | 0.948 | NA | NA | 1 | NA |
| Ven + O + Ibr:Ven + R | NA | 0.847 | NA | NA | 0.367 | 1.327 | NA | NA | 1 | NA |
| Ven + O + Ibr:Zanubrutinib | NA | -0.218 | NA | NA | -1.071 | 0.635 | NA | NA | 1 | NA |
| Ven + O:Acal | NA | -0.256 | NA | NA | -0.728 | 0.216 | NA | NA | 1 | NA |
| Ven + O:Ven + O + Ibr | NA | -0.449 | NA | NA | -1.039 | 0.141 | NA | NA | 1 | NA |
| Ven + O:Ven + R | NA | 0.398 | NA | NA | -0.013 | 0.809 | NA | NA | 1 | NA |
| Ven + O:Zanubrutinib | NA | -0.667 | NA | NA | -1.283 | -0.051 | NA | NA | 1 | NA |
| Ven + R:Acal | NA | -0.654 | NA | NA | -1.280 | -0.028 | NA | NA | 1 | NA |
| Ven + R:Zanubrutinib | NA | -1.065 | NA | NA | -1.806 | -0.324 | NA | NA | 1 | NA |
| Zanubrutinib:Acal | NA | 0.411 | NA | NA | -0.186 | 1.008 | NA | NA | 1 | NA |
| Q | df | pval | |
|---|---|---|---|
| Total | 0.584 | 1 | 0.445 |
| Within designs | 0.584 | 1 | 0.445 |
| Between designs | 0.000 | 0 | NA |
---
title: "Inconsistency"
---
```{r}
source("R/nma_functions.R")
dat <- load_pairwise_data()
nm <- run_model(dat, model_type = "simple", effect_model = "random")
```
## Local inconsistency: node-splitting
```{r}
ns <- tryCatch(
netmeta::netsplit(
nm,
random = TRUE,
common = FALSE,
backtransf = TRUE
),
error = identity
)
if (inherits(ns, "error")) {
cat("Node-splitting failed:", conditionMessage(ns))
} else {
dir <- ns$direct.random[, c("comparison", "TE", "lower", "upper", "p")]
ind <- ns$indirect.random[, c("comparison", "TE", "lower", "upper", "p")]
cmp <- ns$compare.random[, c("comparison", "z", "p")]
res <- merge(
dir,
ind,
by = "comparison",
all = TRUE,
suffixes = c(".direct", ".indirect")
)
res <- merge(
res,
cmp,
by = "comparison",
all = TRUE
)
res$Q <- res$z^2
res$df <- 1L
names(res)[names(res) == "TE.direct"] <- "Direct"
names(res)[names(res) == "TE.indirect"] <- "Indirect"
names(res)[names(res) == "p.x"] <- "p.direct"
names(res)[names(res) == "p.y"] <- "p.indirect"
names(res)[names(res) == "p"] <- "p.diff"
out <- res[, c(
"comparison",
"Direct",
"Indirect",
"lower.direct",
"upper.direct",
"lower.indirect",
"upper.indirect",
"z",
"Q",
"df",
"p.diff"
)]
numcols <- c(
"Direct",
"Indirect",
"lower.direct",
"upper.direct",
"lower.indirect",
"upper.indirect",
"z",
"Q",
"p.diff"
)
out[numcols] <- lapply(
out[numcols],
function(x) if (is.numeric(x)) round(x, 3) else x
)
out <- out[order(out$comparison), ]
knitr::kable(
out,
caption = "Node-splitting results: direct, indirect, and direct-versus-indirect evidence"
)
}
```
## Global inconsistency: design-by-treatment decomposition
```{r}
dec <- tryCatch(netmeta::decomp.design(nm), error = identity)
if (inherits(dec, "error")) {
cat("Design-by-treatment decomposition failed:", conditionMessage(dec))
} else {
knitr::kable(round(dec$Q.decomp, 3))
}
```