Population-specific relative effects
ML-NMR relative effects by study population
multinma plaque psoriasis example.
multinma::relative_effects() + plot()
What it shows
With effect modifiers in the model, a relative effect is only defined for a population. ML-NMR produces population-average conditional effects, evaluated at each population’s covariate distribution on the model’s linear predictor scale, for every study population in the network (or any target population supplied). A standard NMA forest plot would show one row per treatment; this display repeats it for every population so that the effect modification becomes visible.
How to read it
- Panels: study populations.
- Rows: treatments versus the reference.
- Points and bars: posterior median with 66% and 95% credible intervals, on the model scale (here probit).
Interpretation
The ordering of treatments is identical in every population, with ixekizumab Q2W highest and etanercept lowest, and the probit differences shift only slightly between populations. On this scale, effect modification by the included covariates is modest. The marginal effects show how the same model translates into larger between-population differences on the probability scale.
Pitfalls
- Conditional effects on a link scale are not directly interpretable as risk differences; report marginal effects for decisions.
- The populations are defined by summary statistics for aggregate studies; the correlation structure between covariates is assumed.
- Stable effects across the network’s populations do not guarantee stability in a very different target population.
Code
Shared model (R/models/plaque-psoriasis-mlnmr.R)
# ML-NMR of PASI 75 response in plaque psoriasis (Phillippo et al. 2020):
# IPD from 4 ixekizumab trials, aggregate data from 5 secukinumab trials.
library(multinma)
library(dplyr)
trt_class <- function(trtc) case_when(
trtc == "PBO" ~ "Placebo",
trtc %in% c("IXE_Q2W", "IXE_Q4W", "SEC_150", "SEC_300") ~ "IL-17 blocker",
trtc == "ETN" ~ "TNFa blocker",
trtc == "UST" ~ "IL-12/23 blocker"
)
# Rescale covariates: BSA as a proportion, weight in 10 kg, duration in decades
pso_ipd <- plaque_psoriasis_ipd |>
mutate(bsa = bsa / 100, weight = weight / 10, durnpso = durnpso / 10,
prevsys = as.numeric(prevsys), psa = as.numeric(psa),
trtclass = trt_class(trtc)) |>
filter(complete.cases(durnpso, prevsys, bsa, weight, psa, pasi75))
pso_agd <- plaque_psoriasis_agd |>
mutate(bsa_mean = bsa_mean / 100, bsa_sd = bsa_sd / 100,
weight_mean = weight_mean / 10, weight_sd = weight_sd / 10,
durnpso_mean = durnpso_mean / 10, durnpso_sd = durnpso_sd / 10,
prevsys = prevsys / 100, psa = psa / 100,
trtclass = trt_class(trtc))
pso_net <- combine_network(
set_ipd(pso_ipd, study = studyc, trt = trtc, r = pasi75, trt_class = trtclass),
set_agd_arm(pso_agd, study = studyc, trt = trtc, r = pasi75_r, n = pasi75_n,
trt_class = trtclass),
trt_ref = "PBO"
)
# Quasi-Monte Carlo integration points over each aggregate study's covariates
pso_net <- add_integration(pso_net,
durnpso = distr(qgamma, mean = durnpso_mean, sd = durnpso_sd),
prevsys = distr(qbern, prob = prevsys),
bsa = distr(qlogitnorm, mean = bsa_mean, sd = bsa_sd),
weight = distr(qgamma, mean = weight_mean, sd = weight_sd),
psa = distr(qbern, prob = psa),
n_int = 64
)
# Fixed-effect ML-NMR, probit link, effect modifiers shared within treatment class
pso_fit <- nma(pso_net, trt_effects = "fixed", link = "probit", likelihood = "bernoulli2",
regression = ~ (durnpso + prevsys + bsa + weight + psa) * .trt,
class_interactions = "common",
prior_intercept = normal(scale = 10), prior_trt = normal(scale = 10),
prior_reg = normal(scale = 10), init_r = 0.1, QR = TRUE, seed = 2026,
int_thin = 8, int_check = FALSE) # save partial integrals for the error plotFigure
library(multinma)
source("R/models/plaque-psoriasis-mlnmr.R") # builds pso_net and fits pso_fit
# Population-average conditional relative effects (probit scale) against
# placebo in each of the 9 study populations
plot(relative_effects(pso_fit), ref_line = 0)References
- Phillippo DM, Dias S, Ades AE, et al. Multilevel network meta-regression for population-adjusted treatment comparisons. J R Stat Soc Ser A. 2020;183:1189-1210. doi:10.1111/rssa.12579
relative_effects()reference. multinma documentation. dmphillippo.github.io/multinma
