The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

cdtmbnma

cdtmbnma is an R source package for Bayesian component, dose, and time model-based network meta-analysis with dose-dependent interaction surfaces.

The core model fits arm-level component-dose networks. Each treatment arm is represented by a dose vector, where zero means the component is absent. The model estimates component Emax dose-response curves and, when the data identify them, pairwise dose-dependent interaction surfaces. It supports continuous outcomes with known arm standard errors and binary outcomes through a binomial-logit likelihood.

The package also includes a stage-one longitudinal model for repeated arm means: a two-component exponential time-course model with a bilinear interaction on the long-term asymptote.

Contents

Installation

A Stan backend is required to fit models. cmdstanr is recommended.

install.packages("posterior")
install.packages("cmdstanr", repos = c("https://stan-dev.r-universe.dev", getOption("repos")))
cmdstanr::install_cmdstan()

install.packages("remotes")
remotes::install_local("cdtmbnma_0.2.1.tar.gz", build_vignettes = TRUE)

rstan can be used instead of cmdstanr by installing rstan and calling cdt_fit(..., backend = "rstan") or cdt_time_fit(..., backend = "rstan").

Quick start: single-timepoint dose plane

library(cdtmbnma)

sv <- sacval_example()

sv_design <- cdt_data(
  sv,
  study = "study",
  components = c("d_sac", "d_val"),
  outcome = "continuous",
  y = "y",
  se = "se",
  dstar = c(d_sac = 200, d_val = 320)
)

fit <- cdt_fit(
  sv_design,
  interaction = "bilinear",
  chains = 4,
  iter_warmup = 1000,
  iter_sampling = 1000,
  seed = 1
)

summary(fit)
coef(fit)
plot(fit)
predict(fit, data.frame(d_sac = 100, d_val = 160))

For a binary outcome, use outcome = "binary" and supply events and n_binary instead of y and se.

Interaction surfaces

For component doses d_c and d_c', the single-timepoint model has three options.

The additive model uses no interaction:

cdt_fit(design, interaction = "none")

The bilinear model adds one parameter per component pair:

[ {cc’}(d_c, d{c’}) = _{cc’} () (). ]

The saturating general pharmacodynamic interaction surface is:

[ {cc’}(d_c, d{c’}) = _{cc’} . ]

Both surfaces are centred on additivity. They vanish whenever either component is absent.

Quick start: two-component time-course model

long_dat <- data.frame(
  study = rep("trial1", 6),
  arm = rep(c("placebo", "A", "AB"), each = 2),
  week = rep(c(4, 8), 3),
  dose_A = rep(c(0, 10, 10), each = 2),
  dose_B = rep(c(0, 0, 20), each = 2),
  y = c(0, 0, -1, -2, -2, -3),
  se = rep(1, 6)
)

time_design <- cdt_time_data(
  long_dat,
  study = "study",
  arm = "arm",
  time = "week",
  components = c("dose_A", "dose_B"),
  y = "y",
  se = "se",
  dstar = c(dose_A = 10, dose_B = 20)
)

# fit_time <- cdt_time_fit(time_design)

The time-course interface is intentionally narrower than the main interface: two components, continuous outcomes, exponential time-course, and a bilinear interaction on the long-term asymptote.

Notes on interpretation

The null is additivity on the modelled scale: mean difference for continuous outcomes and log odds for binary outcomes. A favourable interaction relative to that additive component model is a statistical interaction on the chosen scale; it is not automatically equivalent to Bliss independence, Loewe additivity, or a pharmacological mechanism.

The interaction surface is identifiable only for component pairs that co-occur in at least one arm. If no component pair co-occurs, cdt_fit() falls back to the additive model.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.