Example: Certolizumab

library(multinma)
options(mc.cores = parallel::detectCores())
#> For execution on a local, multicore CPU with excess RAM we recommend calling
#> options(mc.cores = parallel::detectCores())
#> 
#> Attaching package: 'multinma'
#> The following objects are masked from 'package:stats':
#> 
#>     dgamma, pgamma, qgamma
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(ggplot2)

This vignette describes the analysis of 12 trials comparing 6 treatments against placebo for β€œthe treatment of rheumatoid arthritis (RA) in patients who had failed on disease-modifying anti-rheumatic drugs (DMARDs)” (Dias et al. 2011). The data are available in this package as certolizumab:

head(certolizumab)
#>      study        trt   r   n disease_duration
#> 1  RAPID 1    Placebo  15 199             6.15
#> 2  RAPID 1        CZP 146 393             6.15
#> 3  RAPID 2    Placebo   4 127             5.85
#> 4  RAPID 2        CZP  80 246             5.85
#> 5 Kim 2007    Placebo   9  63             6.85
#> 6 Kim 2007 Adalimumab  28  65             6.85

Dias et al. (2011) used this data to demonstrate baseline risk meta-regression models. Plotting the baseline risk against the treatment effect, we suspect there might be an effect of the baseline risk on the treatment effect. Specifically, the log baseline odds (placebo in this case) seem to be negatively linearly correlated with the odds ratio. For purposes of plotting only, we apply a continuity correction to the Abe 2006 study, in which no events were observed on placebo.

certolizumab <-
  certolizumab %>%
  group_by(study) %>% 
  mutate(
    cc = any(r == 0),
    probability = if_else(cc, (r + 0.5) / (n + 0.5), r / n),
    odds = probability / (1 - probability),
    log_odds = log(odds)
  )

p_baseline_risk <-
  left_join(
    filter(certolizumab, trt != "Placebo"),
    filter(certolizumab, trt == "Placebo"),
    by = "study",
    suffix = c("", "_baseline")
  ) %>%
  mutate(log_odds_ratio = log_odds - log_odds_baseline, n_total = n + n_baseline) %>%
  ggplot(aes(log_odds_baseline)) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  labs(x = "Placebo log odds", y = "log Odds Ratio", size = "Sample Size") +
  theme_multinma()

p_baseline_risk +
  geom_point(aes(y = log_odds_ratio, size = n_total))

Setting up the network

We begin by setting up the network.

cert_net <- set_agd_arm(certolizumab,
                        study = study, trt = trt, n = n, r = r,
                        trt_class = if_else(trt == "Placebo", "Placebo", "Treatment"))
cert_net
#> A network with 12 AgD studies (arm-based).
#> 
#> ------------------------------------------------------- AgD studies (arm-based) ---- 
#>  Study    Treatment arms          
#>  Abe 2006 2: Placebo | Infliximab 
#>  ARMADA   2: Placebo | Adalimumab 
#>  ATTEST   2: Placebo | Infliximab 
#>  CHARISMA 2: Placebo | Tocilizumab
#>  DE019    2: Placebo | Adalimumab 
#>  Kim 2007 2: Placebo | Adalimumab 
#>  OPTION   2: Placebo | Tocilizumab
#>  RAPID 1  2: Placebo | CZP        
#>  RAPID 2  2: Placebo | CZP        
#>  START    2: Placebo | Infliximab 
#>  ... plus 2 more studies
#> 
#>  Outcome type: count
#> ------------------------------------------------------------------------------------
#> Total number of treatments: 7, in 2 classes
#> Total number of studies: 12
#> Reference treatment is: Placebo
#> Network is connected

Plot the network structure.

plot(cert_net, weight_edges = TRUE, weight_nodes = TRUE)

Meta-analysis models

We fit both fixed effect (FE) and random effects (RE) models. The special variable .mu is used in the regression formula to specify a baseline risk meta-regression model.

Fixed effect meta-analysis

cert_fit_FE <- nma(cert_net,
                   trt_effects = "fixed",
                   regression = ~.mu:.trt,
                   prior_intercept = normal(scale = sqrt(1000)),
                   prior_trt = normal(scale = 100),
                   prior_reg = normal(scale = 100),
                   adapt_delta = 0.95)
#> Note: Setting "Placebo" as the network reference treatment.
#> Warning: There were 1 divergent transitions after warmup. See
#> https://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
#> to find out why this is a problem and how to eliminate them.
#> Warning: Examine the pairs() plot to diagnose sampling problems

We may see a few divergent transitions due to the zero on placebo in Abe 2006; increasing adapt_delta to 0.95 here helps to minimise these.

Basic parameter summaries are given by the print() method:

cert_fit_FE
#> A fixed effects NMA with a binomial likelihood (logit link).
#> Regression model: ~.mu:.trt.
#> Centred covariates at the following overall mean values:
#>      .mu 
#> -2.41557 
#> Inference for Stan model: binomial_1par.
#> 4 chains, each with iter=2000; warmup=1000; thin=1; 
#> post-warmup draws per chain=1000, total post-warmup draws=4000.
#> 
#>                                  mean se_mean   sd     2.5%      25%      50%      75%    97.5%
#> beta[.mu:.trtclassTreatment]    -0.93    0.00 0.09    -1.03    -0.99    -0.96    -0.89    -0.69
#> d[Adalimumab]                    2.12    0.00 0.11     1.90     2.05     2.12     2.20     2.35
#> d[CZP]                           1.85    0.00 0.10     1.66     1.78     1.84     1.91     2.05
#> d[Etanercept]                    2.06    0.01 0.32     1.48     1.86     2.05     2.26     2.72
#> d[Infliximab]                    1.67    0.00 0.09     1.48     1.61     1.67     1.74     1.85
#> d[Rituximab]                     0.36    0.01 0.51    -0.71     0.04     0.38     0.71     1.27
#> d[Tocilizumab]                   2.19    0.00 0.14     1.91     2.11     2.20     2.28     2.45
#> lp__                         -1708.68    0.08 3.13 -1715.63 -1710.57 -1708.31 -1706.44 -1703.58
#>                              n_eff Rhat
#> beta[.mu:.trtclassTreatment]   727 1.01
#> d[Adalimumab]                 3907 1.00
#> d[CZP]                        2337 1.00
#> d[Etanercept]                 2871 1.00
#> d[Infliximab]                 3269 1.00
#> d[Rituximab]                  4177 1.00
#> d[Tocilizumab]                2148 1.00
#> lp__                          1587 1.00
#> 
#> Samples were drawn using NUTS(diag_e) at Thu Feb  5 14:15:10 2026.
#> For each parameter, n_eff is a crude measure of effective sample size,
#> and Rhat is the potential scale reduction factor on split chains (at 
#> convergence, Rhat=1).

Random effects meta-analysis

cert_fit_RE <- nma(cert_net,
                   trt_effects = "random",
                   regression = ~.mu:.trt,
                   prior_intercept = normal(scale = sqrt(1000)),
                   prior_trt = normal(scale = 100),
                   prior_reg = normal(scale = 100),
                   prior_het = half_normal(2.5),
                   adapt_delta = 0.95)
#> Note: Setting "Placebo" as the network reference treatment.
#> Warning: There were 2 divergent transitions after warmup. See
#> https://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup
#> to find out why this is a problem and how to eliminate them.
#> Warning: Examine the pairs() plot to diagnose sampling problems

Basic parameter summaries are given by the print() method:

cert_fit_RE
#> A random effects NMA with a binomial likelihood (logit link).
#> Regression model: ~.mu:.trt.
#> Centred covariates at the following overall mean values:
#>      .mu 
#> -2.41557 
#> Inference for Stan model: binomial_1par.
#> 4 chains, each with iter=2000; warmup=1000; thin=1; 
#> post-warmup draws per chain=1000, total post-warmup draws=4000.
#> 
#>                                  mean se_mean   sd     2.5%      25%      50%      75%    97.5%
#> beta[.mu:.trtclassTreatment]    -0.96    0.00 0.10    -1.11    -1.00    -0.98    -0.92    -0.72
#> d[Adalimumab]                    2.18    0.00 0.20     1.81     2.06     2.17     2.28     2.61
#> d[CZP]                           1.82    0.01 0.23     1.34     1.71     1.82     1.93     2.29
#> d[Etanercept]                    2.02    0.01 0.46     1.15     1.77     2.03     2.29     2.89
#> d[Infliximab]                    1.71    0.00 0.21     1.31     1.60     1.70     1.82     2.14
#> d[Rituximab]                     0.38    0.01 0.59    -0.85     0.03     0.40     0.75     1.46
#> d[Tocilizumab]                   2.24    0.01 0.27     1.73     2.09     2.23     2.38     2.76
#> lp__                         -1714.63    0.14 4.51 -1724.53 -1717.47 -1714.31 -1711.38 -1706.84
#> tau                              0.22    0.01 0.18     0.01     0.10     0.19     0.29     0.70
#>                              n_eff Rhat
#> beta[.mu:.trtclassTreatment]  1131    1
#> d[Adalimumab]                 2007    1
#> d[CZP]                        1804    1
#> d[Etanercept]                 1614    1
#> d[Infliximab]                 2060    1
#> d[Rituximab]                  3697    1
#> d[Tocilizumab]                1550    1
#> lp__                          1097    1
#> tau                            609    1
#> 
#> Samples were drawn using NUTS(diag_e) at Thu Feb  5 14:15:34 2026.
#> For each parameter, n_eff is a crude measure of effective sample size,
#> and Rhat is the potential scale reduction factor on split chains (at 
#> convergence, Rhat=1).

Model comparison

Model fit can be checked using the dic() function:

(dic_FE <- dic(cert_fit_FE))
#> Residual deviance: 27.4 (on 24 data points)
#>                pD: 18.9
#>               DIC: 46.3
(dic_RE <- dic(cert_fit_RE))
#> Residual deviance: 24.4 (on 24 data points)
#>                pD: 21.7
#>               DIC: 46.1

We can also examine the residual deviance contributions with the corresponding plot() method.

plot(dic_FE)

plot(dic_RE)

Baseline risk meta-regression

Plotting the estimated baseline risk effect (fixed effect model) together with the crude odds ratios.

cert_mu_reg <-
  cert_fit_FE %>%
  relative_effects(
    newdata = tibble(.mu = seq(log(0.01), log(0.5), length.out = 20)),
    study = .mu
  ) %>%
  as_tibble() %>%
  mutate(
    trt = .trtb,
    log_odds_baseline = as.numeric(as.character(.study))
  )

p_baseline_risk +
  facet_wrap(vars(trt)) +
  geom_ribbon(aes(ymin = `2.5%`, ymax = `97.5%`), data = cert_mu_reg,
              fill = "darkred", alpha = 0.3) +
  geom_line(aes(y = mean), data = cert_mu_reg,
            colour = "darkred") +
  geom_point(aes(y = log_odds_ratio, size = n_total), alpha = 0.6)

Further results

For comparison with Dias et al. (2011), we can produce relative effects against placebo at the average observed log odds, using the relative_effects() function:

newdata <- data.frame(.mu = cert_fit_FE$xbar[[".mu"]])
(cert_releff_FE <- relative_effects(cert_fit_FE, newdata = newdata))
#> ------------------------------------------------------------------ Study: New 1 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.42
#> 
#>                       mean   sd  2.5%  25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[New 1: Adalimumab]  2.12 0.11  1.90 2.05 2.12 2.20  2.35     3982     2078    1
#> d[New 1: CZP]         1.85 0.10  1.66 1.78 1.84 1.91  2.05     2581     1847    1
#> d[New 1: Etanercept]  2.06 0.32  1.48 1.86 2.05 2.26  2.72     3229     2509    1
#> d[New 1: Infliximab]  1.67 0.09  1.48 1.61 1.67 1.74  1.85     3330     2575    1
#> d[New 1: Rituximab]   0.36 0.51 -0.71 0.04 0.38 0.71  1.27     4416     2233    1
#> d[New 1: Tocilizumab] 2.19 0.14  1.91 2.11 2.20 2.28  2.45     2360     1640    1
plot(cert_releff_FE, ref_line = 0)

(cert_releff_RE <- relative_effects(cert_fit_RE, newdata = newdata))
#> ------------------------------------------------------------------ Study: New 1 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.42
#> 
#>                       mean   sd  2.5%  25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[New 1: Adalimumab]  2.18 0.20  1.81 2.06 2.17 2.28  2.61     2361     1819    1
#> d[New 1: CZP]         1.82 0.23  1.34 1.71 1.82 1.93  2.29     2026     1460    1
#> d[New 1: Etanercept]  2.02 0.46  1.15 1.77 2.03 2.29  2.89     2277     1582    1
#> d[New 1: Infliximab]  1.71 0.21  1.31 1.60 1.70 1.82  2.14     2113     1595    1
#> d[New 1: Rituximab]   0.38 0.59 -0.85 0.03 0.40 0.75  1.46     3974     2709    1
#> d[New 1: Tocilizumab] 2.24 0.27  1.73 2.09 2.23 2.38  2.76     2004     1736    1
plot(cert_releff_RE, ref_line = 0)

Without providing newdata, relative_effects() will produce relative effects per study. Note that the estimated study-specific intercepts are used.

(cert_releff_study_RE <- relative_effects(cert_fit_RE))
#> --------------------------------------------------------------- Study: Abe 2006 ---- 
#> 
#> Covariate values:
#>     .mu
#>  -14.28
#> 
#>                           mean    sd 2.5%  25%  50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[Abe 2006: Adalimumab]  13.86 12.25 2.91 5.56 9.50 17.95 48.82     1186     1238    1
#> d[Abe 2006: CZP]         13.49 12.24 2.69 5.24 9.09 17.49 48.54     1214     1242    1
#> d[Abe 2006: Etanercept]  13.70 12.22 2.89 5.44 9.35 17.68 48.76     1226     1277    1
#> d[Abe 2006: Infliximab]  13.39 12.25 2.43 5.12 9.04 17.35 48.48     1215     1242    1
#> d[Abe 2006: Rituximab]   12.05 12.28 0.90 3.77 7.65 15.99 47.16     1176     1319    1
#> d[Abe 2006: Tocilizumab] 13.91 12.26 2.94 5.62 9.57 18.03 49.07     1174     1238    1
#> 
#> ----------------------------------------------------------------- Study: ARMADA ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.48
#> 
#>                        mean   sd  2.5%   25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[ARMADA: Adalimumab]  2.25 0.53  1.33  1.89 2.22 2.57  3.39     3709     2400    1
#> d[ARMADA: CZP]         1.88 0.52  0.95  1.53 1.85 2.21  3.00     4189     2828    1
#> d[ARMADA: Etanercept]  2.09 0.63  0.89  1.68 2.09 2.48  3.35     3370     2224    1
#> d[ARMADA: Infliximab]  1.78 0.52  0.86  1.42 1.75 2.10  2.91     3608     2611    1
#> d[ARMADA: Rituximab]   0.44 0.77 -1.07 -0.05 0.45 0.93  1.94     4017     2632    1
#> d[ARMADA: Tocilizumab] 2.31 0.55  1.34  1.92 2.28 2.65  3.47     3042     2355    1
#> 
#> ----------------------------------------------------------------- Study: ATTEST ---- 
#> 
#> Covariate values:
#>   .mu
#>  -1.4
#> 
#>                         mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[ATTEST: Adalimumab]   1.21 0.31  0.59  1.01  1.20  1.41  1.83     3393     2543    1
#> d[ATTEST: CZP]          0.84 0.36  0.12  0.61  0.84  1.07  1.55     2326     1870    1
#> d[ATTEST: Etanercept]   1.05 0.55 -0.01  0.73  1.05  1.37  2.09     2128     1757    1
#> d[ATTEST: Infliximab]   0.74 0.34  0.06  0.53  0.74  0.95  1.41     2539     2033    1
#> d[ATTEST: Rituximab]   -0.60 0.63 -1.87 -0.98 -0.57 -0.19  0.58     4127     2683    1
#> d[ATTEST: Tocilizumab]  1.27 0.34  0.60  1.06  1.26  1.48  1.94     2926     2396    1
#> 
#> --------------------------------------------------------------- Study: CHARISMA ---- 
#> 
#> Covariate values:
#>    .mu
#>  -0.94
#> 
#>                           mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[CHARISMA: Adalimumab]   0.77 0.38  0.05  0.52  0.76  1.02  1.52     3252     2312    1
#> d[CHARISMA: CZP]          0.41 0.43 -0.41  0.13  0.40  0.68  1.24     2360     1833    1
#> d[CHARISMA: Etanercept]   0.61 0.60 -0.55  0.26  0.61  0.98  1.75     2028     2016    1
#> d[CHARISMA: Infliximab]   0.30 0.41 -0.49  0.05  0.30  0.57  1.07     2673     2159    1
#> d[CHARISMA: Rituximab]   -1.03 0.67 -2.44 -1.46 -1.01 -0.58  0.19     4156     2817    1
#> d[CHARISMA: Tocilizumab]  0.83 0.40  0.04  0.57  0.84  1.09  1.61     3170     2354    1
#> 
#> ------------------------------------------------------------------ Study: DE019 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.29
#> 
#>                       mean   sd  2.5%   25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[DE019: Adalimumab]  2.06 0.31  1.47  1.86 2.05 2.26  2.68     3375     2171    1
#> d[DE019: CZP]         1.70 0.34  1.02  1.48 1.71 1.91  2.34     2636     1902    1
#> d[DE019: Etanercept]  1.90 0.52  0.91  1.60 1.91 2.22  2.91     2213     1920    1
#> d[DE019: Infliximab]  1.59 0.32  0.97  1.39 1.59 1.80  2.21     3048     2350    1
#> d[DE019: Rituximab]   0.26 0.62 -1.05 -0.12 0.28 0.66  1.44     4447     2552    1
#> d[DE019: Tocilizumab] 2.12 0.35  1.44  1.90 2.12 2.33  2.82     2795     1812    1
#> 
#> --------------------------------------------------------------- Study: Kim 2007 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -1.84
#> 
#>                           mean   sd  2.5%   25%   50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[Kim 2007: Adalimumab]   1.63 0.41  0.85  1.36  1.61 1.89  2.50     3739     1999    1
#> d[Kim 2007: CZP]          1.27 0.44  0.42  0.99  1.26 1.54  2.16     2774     2091    1
#> d[Kim 2007: Etanercept]   1.47 0.60  0.35  1.12  1.48 1.84  2.61     2344     1957    1
#> d[Kim 2007: Infliximab]   1.16 0.42  0.37  0.89  1.15 1.43  2.02     3291     2125    1
#> d[Kim 2007: Rituximab]   -0.17 0.68 -1.56 -0.59 -0.14 0.26  1.15     4277     2621    1
#> d[Kim 2007: Tocilizumab]  1.69 0.43  0.85  1.41  1.68 1.95  2.57     3639     2282    1
#> 
#> ----------------------------------------------------------------- Study: OPTION ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.13
#> 
#>                        mean   sd  2.5%   25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[OPTION: Adalimumab]  1.91 0.30  1.35  1.72 1.90 2.09  2.52     3373     2464    1
#> d[OPTION: CZP]         1.54 0.33  0.87  1.35 1.55 1.74  2.17     2640     1711    1
#> d[OPTION: Etanercept]  1.75 0.52  0.74  1.45 1.75 2.06  2.72     2286     1752    1
#> d[OPTION: Infliximab]  1.44 0.31  0.85  1.25 1.44 1.62  2.06     2973     2273    1
#> d[OPTION: Rituximab]   0.10 0.63 -1.19 -0.27 0.12 0.51  1.28     3962     2818    1
#> d[OPTION: Tocilizumab] 1.97 0.34  1.27  1.75 1.97 2.18  2.65     2383     1925    1
#> 
#> ---------------------------------------------------------------- Study: RAPID 1 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.53
#> 
#>                         mean   sd  2.5%  25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[RAPID 1: Adalimumab]  2.29 0.33  1.67 2.08 2.28 2.49  2.98     3327     1964    1
#> d[RAPID 1: CZP]         1.93 0.35  1.23 1.70 1.92 2.15  2.66     3099     2279    1
#> d[RAPID 1: Etanercept]  2.13 0.53  1.13 1.80 2.13 2.45  3.15     2679     1807    1
#> d[RAPID 1: Infliximab]  1.82 0.33  1.18 1.61 1.81 2.02  2.50     3389     2208    1
#> d[RAPID 1: Rituximab]   0.48 0.65 -0.87 0.07 0.51 0.91  1.69     4133     2948    1
#> d[RAPID 1: Tocilizumab] 2.35 0.38  1.65 2.11 2.34 2.58  3.13     2660     1705    1
#> 
#> ---------------------------------------------------------------- Study: RAPID 2 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -3.55
#> 
#>                         mean   sd  2.5%  25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[RAPID 2: Adalimumab]  3.27 0.57  2.28 2.88 3.23 3.61  4.52     4000     2761    1
#> d[RAPID 2: CZP]         2.90 0.57  1.87 2.51 2.88 3.25  4.11     4250     2859    1
#> d[RAPID 2: Etanercept]  3.11 0.67  1.83 2.67 3.10 3.52  4.44     3853     2278    1
#> d[RAPID 2: Infliximab]  2.80 0.56  1.78 2.41 2.76 3.14  4.00     4139     2815    1
#> d[RAPID 2: Rituximab]   1.46 0.80 -0.08 0.94 1.44 1.98  3.07     4022     2838    1
#> d[RAPID 2: Tocilizumab] 3.33 0.61  2.25 2.92 3.29 3.69  4.62     3460     2346    1
#> 
#> ------------------------------------------------------------------ Study: START ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.32
#> 
#>                       mean   sd  2.5%   25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[START: Adalimumab]  2.09 0.27  1.58  1.92 2.08 2.26  2.63     3059     2273    1
#> d[START: CZP]         1.73 0.30  1.12  1.55 1.73 1.91  2.30     2561     1761    1
#> d[START: Etanercept]  1.93 0.50  0.99  1.65 1.94 2.23  2.88     2440     1717    1
#> d[START: Infliximab]  1.62 0.28  1.09  1.45 1.62 1.79  2.19     2830     2276    1
#> d[START: Rituximab]   0.29 0.61 -0.99 -0.09 0.31 0.68  1.41     4043     2526    1
#> d[START: Tocilizumab] 2.15 0.31  1.57  1.95 2.14 2.34  2.77     2406     1956    1
#> 
#> ------------------------------------------------------------ Study: Strand 2006 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.03
#> 
#>                             mean   sd  2.5%   25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[Strand 2006: Adalimumab]  1.82 0.53  0.84  1.46 1.79 2.14  2.93     4525     2856    1
#> d[Strand 2006: CZP]         1.45 0.55  0.42  1.08 1.43 1.80  2.57     3280     2668    1
#> d[Strand 2006: Etanercept]  1.66 0.69  0.30  1.24 1.67 2.08  3.02     2675     2043    1
#> d[Strand 2006: Infliximab]  1.35 0.54  0.35  0.99 1.33 1.68  2.46     4041     2990    1
#> d[Strand 2006: Rituximab]   0.01 0.78 -1.52 -0.49 0.02 0.52  1.53     4077     2809    1
#> d[Strand 2006: Tocilizumab] 1.87 0.55  0.85  1.51 1.85 2.22  3.01     3974     2784    1
#> 
#> --------------------------------------------------------- Study: Weinblatt 1999 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -3.94
#> 
#>                                mean   sd  2.5%  25%  50%  75% 97.5% Bulk_ESS Tail_ESS Rhat
#> d[Weinblatt 1999: Adalimumab]  3.65 1.32  1.75 2.74 3.44 4.30  6.82     3288     1531    1
#> d[Weinblatt 1999: CZP]         3.28 1.31  1.36 2.38 3.11 3.94  6.44     3529     1629    1
#> d[Weinblatt 1999: Etanercept]  3.49 1.37  1.34 2.54 3.33 4.20  6.70     3322     1590    1
#> d[Weinblatt 1999: Infliximab]  3.18 1.31  1.25 2.26 2.97 3.86  6.39     3367     1670    1
#> d[Weinblatt 1999: Rituximab]   1.84 1.43 -0.41 0.87 1.68 2.58  5.07     3417     1540    1
#> d[Weinblatt 1999: Tocilizumab] 3.71 1.35  1.73 2.80 3.51 4.38  7.04     2957     1404    1

To produce predictions against a reference baseline risk distribution, predict() will use the .mu values sampled from the baseline distribution, for example:

predict(cert_fit_RE, baseline = distr(qnorm, mean = cert_fit_RE$xbar[[".mu"]], sd = 0.5))
#> ------------------------------------------------------------------ Study: New 1 ---- 
#> 
#>                           mean   sd   2.5%    25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[New 1: Placebo]     -2.42 0.51  -3.43  -2.76 -2.43 -2.08 -1.43     4032     3972    1
#> pred[New 1: Adalimumab]  -8.14 0.96  -9.81  -8.72 -8.21 -7.63 -6.01     1910     1468    1
#> pred[New 1: CZP]         -8.51 1.05 -10.29  -9.11 -8.57 -8.00 -6.23     1814     1467    1
#> pred[New 1: Etanercept]  -8.30 1.20 -10.42  -8.98 -8.36 -7.69 -5.73     1707     1511    1
#> pred[New 1: Infliximab]  -8.61 1.01 -10.41  -9.19 -8.67 -8.09 -6.43     1814     1473    1
#> pred[New 1: Rituximab]   -9.95 1.09 -12.02 -10.62 -9.98 -9.32 -7.67     2181     1597    1
#> pred[New 1: Tocilizumab] -8.09 0.94  -9.73  -8.65 -8.16 -7.59 -5.97     2057     1555    1

When not passing a baseline distribution, predictions will be produced per study. The estimated study-specific intercepts are used in the baseline risk meta-regression.

predict(cert_fit_RE)
#> --------------------------------------------------------------- Study: Abe 2006 ---- 
#> 
#>                               mean    sd   2.5%    25%    50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[Abe 2006: Placebo]     -14.28 12.22 -49.53 -18.29  -9.93 -6.06 -3.40     1243     1266    1
#> pred[Abe 2006: Adalimumab]  -14.41 12.28 -49.67 -18.43 -10.14 -6.17 -3.30     1205     1268    1
#> pred[Abe 2006: CZP]         -14.78 12.30 -49.99 -18.85 -10.50 -6.49 -3.45     1182     1266    1
#> pred[Abe 2006: Etanercept]  -14.57 12.33 -49.84 -18.63 -10.28 -6.28 -3.06     1175     1239    1
#> pred[Abe 2006: Infliximab]  -14.88 12.28 -50.01 -19.00 -10.61 -6.60 -3.72     1178     1275    1
#> pred[Abe 2006: Rituximab]   -16.22 12.28 -51.31 -20.28 -11.93 -7.93 -4.90     1219     1230    1
#> pred[Abe 2006: Tocilizumab] -14.35 12.27 -49.53 -18.37 -10.06 -6.09 -3.23     1206     1276    1
#> 
#> ----------------------------------------------------------------- Study: ARMADA ---- 
#> 
#>                            mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[ARMADA: Placebo]     -2.48 0.49 -3.51 -2.79 -2.44 -2.13 -1.59     4817     2832    1
#> pred[ARMADA: Adalimumab]  -2.61 0.59 -3.80 -2.98 -2.59 -2.22 -1.47     2808     2253    1
#> pred[ARMADA: CZP]         -2.97 0.66 -4.30 -3.39 -2.95 -2.55 -1.69     2182     1544    1
#> pred[ARMADA: Etanercept]  -2.77 0.81 -4.36 -3.26 -2.76 -2.26 -1.21     1978     1780    1
#> pred[ARMADA: Infliximab]  -3.08 0.62 -4.33 -3.45 -3.07 -2.67 -1.93     2569     2094    1
#> pred[ARMADA: Rituximab]   -4.42 0.80 -6.08 -4.92 -4.39 -3.87 -2.98     3506     2478    1
#> pred[ARMADA: Tocilizumab] -2.55 0.60 -3.80 -2.92 -2.53 -2.14 -1.43     3162     2151    1
#> 
#> ----------------------------------------------------------------- Study: ATTEST ---- 
#> 
#>                            mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[ATTEST: Placebo]     -1.40 0.24 -1.89 -1.56 -1.39 -1.23 -0.95     5431     2758    1
#> pred[ATTEST: Adalimumab]  -1.53 0.38 -2.25 -1.76 -1.54 -1.30 -0.79     2345     1915    1
#> pred[ATTEST: CZP]         -1.90 0.44 -2.74 -2.15 -1.90 -1.64 -1.02     1885     1640    1
#> pred[ATTEST: Etanercept]  -1.69 0.64 -2.86 -2.05 -1.69 -1.33 -0.47     1884     1608    1
#> pred[ATTEST: Infliximab]  -2.00 0.40 -2.79 -2.24 -2.00 -1.76 -1.22     2094     1883    1
#> pred[ATTEST: Rituximab]   -3.34 0.66 -4.69 -3.75 -3.30 -2.90 -2.10     3808     2771    1
#> pred[ATTEST: Tocilizumab] -1.47 0.39 -2.24 -1.71 -1.47 -1.23 -0.72     2942     2168    1
#> 
#> --------------------------------------------------------------- Study: CHARISMA ---- 
#> 
#>                              mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[CHARISMA: Placebo]     -0.94 0.32 -1.58 -1.16 -0.93 -0.72 -0.35     4726     2843    1
#> pred[CHARISMA: Adalimumab]  -1.07 0.43 -1.91 -1.36 -1.07 -0.79 -0.23     2596     1912    1
#> pred[CHARISMA: CZP]         -1.44 0.49 -2.38 -1.74 -1.44 -1.14 -0.46     2117     1830    1
#> pred[CHARISMA: Etanercept]  -1.23 0.68 -2.53 -1.62 -1.23 -0.84 -0.02     2045     1698    1
#> pred[CHARISMA: Infliximab]  -1.54 0.46 -2.43 -1.84 -1.54 -1.25 -0.68     2310     2027    1
#> pred[CHARISMA: Rituximab]   -2.88 0.69 -4.29 -3.30 -2.88 -2.43 -1.61     3707     2766    1
#> pred[CHARISMA: Tocilizumab] -1.02 0.43 -1.88 -1.30 -1.01 -0.73 -0.19     3120     2288    1
#> 
#> ------------------------------------------------------------------ Study: DE019 ---- 
#> 
#>                           mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[DE019: Placebo]     -2.29 0.25 -2.79 -2.45 -2.29 -2.13 -1.84     4962     2718    1
#> pred[DE019: Adalimumab]  -2.42 0.37 -3.14 -2.66 -2.43 -2.19 -1.72     2570     1774    1
#> pred[DE019: CZP]         -2.79 0.44 -3.62 -3.04 -2.80 -2.53 -1.93     1974     1528    1
#> pred[DE019: Etanercept]  -2.58 0.63 -3.74 -2.94 -2.59 -2.22 -1.39     1988     1540    1
#> pred[DE019: Infliximab]  -2.89 0.40 -3.68 -3.14 -2.90 -2.65 -2.12     2155     1628    1
#> pred[DE019: Rituximab]   -4.23 0.66 -5.61 -4.65 -4.21 -3.79 -2.99     3635     2821    1
#> pred[DE019: Tocilizumab] -2.37 0.38 -3.11 -2.61 -2.37 -2.12 -1.59     2964     2038    1
#> 
#> --------------------------------------------------------------- Study: Kim 2007 ---- 
#> 
#>                              mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[Kim 2007: Placebo]     -1.84 0.37 -2.61 -2.07 -1.83 -1.59 -1.16     5262     2721    1
#> pred[Kim 2007: Adalimumab]  -1.97 0.46 -2.87 -2.27 -1.98 -1.68 -1.08     3213     2617    1
#> pred[Kim 2007: CZP]         -2.34 0.52 -3.36 -2.66 -2.34 -2.02 -1.32     2432     1976    1
#> pred[Kim 2007: Etanercept]  -2.13 0.69 -3.43 -2.53 -2.13 -1.73 -0.80     2154     1762    1
#> pred[Kim 2007: Infliximab]  -2.44 0.49 -3.45 -2.75 -2.44 -2.14 -1.52     2658     2315    1
#> pred[Kim 2007: Rituximab]   -3.78 0.71 -5.29 -4.20 -3.76 -3.32 -2.42     3960     2880    1
#> pred[Kim 2007: Tocilizumab] -1.92 0.47 -2.87 -2.20 -1.91 -1.61 -0.98     3373     2126    1
#> 
#> ----------------------------------------------------------------- Study: OPTION ---- 
#> 
#>                            mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[OPTION: Placebo]     -2.13 0.23 -2.61 -2.28 -2.12 -1.97 -1.71     5078     3188    1
#> pred[OPTION: Adalimumab]  -2.26 0.36 -2.94 -2.50 -2.28 -2.05 -1.52     2318     1679    1
#> pred[OPTION: CZP]         -2.63 0.44 -3.47 -2.87 -2.64 -2.39 -1.73     1828     1521    1
#> pred[OPTION: Etanercept]  -2.42 0.63 -3.59 -2.77 -2.43 -2.07 -1.22     1917     1644    1
#> pred[OPTION: Infliximab]  -2.73 0.40 -3.52 -2.98 -2.74 -2.50 -1.97     1984     1602    1
#> pred[OPTION: Rituximab]   -4.07 0.65 -5.46 -4.47 -4.04 -3.65 -2.83     3883     2516    1
#> pred[OPTION: Tocilizumab] -2.21 0.36 -2.94 -2.44 -2.21 -1.97 -1.51     2940     2079    1
#> 
#> ---------------------------------------------------------------- Study: RAPID 1 ---- 
#> 
#>                             mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[RAPID 1: Placebo]     -2.53 0.27 -3.09 -2.71 -2.53 -2.34 -2.03     4971     2813    1
#> pred[RAPID 1: Adalimumab]  -2.66 0.39 -3.44 -2.90 -2.66 -2.42 -1.89     2521     2166    1
#> pred[RAPID 1: CZP]         -3.03 0.46 -3.89 -3.29 -3.03 -2.76 -2.11     1964     1773    1
#> pred[RAPID 1: Etanercept]  -2.82 0.65 -4.04 -3.20 -2.82 -2.45 -1.60     1888     1705    1
#> pred[RAPID 1: Infliximab]  -3.13 0.43 -3.97 -3.40 -3.13 -2.86 -2.30     2138     1918    1
#> pred[RAPID 1: Rituximab]   -4.47 0.67 -5.87 -4.88 -4.45 -4.04 -3.19     3638     2603    1
#> pred[RAPID 1: Tocilizumab] -2.60 0.40 -3.42 -2.85 -2.60 -2.36 -1.82     2952     2226    1
#> 
#> ---------------------------------------------------------------- Study: RAPID 2 ---- 
#> 
#>                             mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[RAPID 2: Placebo]     -3.55 0.54 -4.72 -3.88 -3.52 -3.18 -2.59     5608     2897    1
#> pred[RAPID 2: Adalimumab]  -3.68 0.61 -4.96 -4.07 -3.66 -3.27 -2.56     3643     2472    1
#> pred[RAPID 2: CZP]         -4.05 0.65 -5.39 -4.45 -4.03 -3.62 -2.87     2783     1916    1
#> pred[RAPID 2: Etanercept]  -3.84 0.80 -5.46 -4.32 -3.81 -3.35 -2.38     2303     1948    1
#> pred[RAPID 2: Infliximab]  -4.15 0.63 -5.49 -4.54 -4.11 -3.74 -3.03     3234     2359    1
#> pred[RAPID 2: Rituximab]   -5.49 0.81 -7.18 -5.99 -5.46 -4.94 -4.03     4017     2786    1
#> pred[RAPID 2: Tocilizumab] -3.63 0.61 -4.96 -4.00 -3.60 -3.22 -2.51     3058     2744    1
#> 
#> ------------------------------------------------------------------ Study: START ---- 
#> 
#>                           mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[START: Placebo]     -2.32 0.18 -2.70 -2.45 -2.32 -2.20 -1.98     5203     2849    1
#> pred[START: Adalimumab]  -2.45 0.34 -3.08 -2.66 -2.47 -2.25 -1.78     2273     1817    1
#> pred[START: CZP]         -2.82 0.41 -3.57 -3.05 -2.84 -2.60 -1.99     1803     1504    1
#> pred[START: Etanercept]  -2.61 0.62 -3.75 -2.94 -2.63 -2.27 -1.43     1818     1491    1
#> pred[START: Infliximab]  -2.92 0.37 -3.64 -3.14 -2.93 -2.71 -2.24     1917     1606    1
#> pred[START: Rituximab]   -4.26 0.64 -5.61 -4.64 -4.24 -3.85 -3.05     3738     2427    1
#> pred[START: Tocilizumab] -2.40 0.35 -3.06 -2.61 -2.40 -2.19 -1.71     2817     2219    1
#> 
#> ------------------------------------------------------------ Study: Strand 2006 ---- 
#> 
#>                                 mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[Strand 2006: Placebo]     -2.03 0.51 -3.09 -2.36 -2.01 -1.68 -1.14     5460     2844    1
#> pred[Strand 2006: Adalimumab]  -2.17 0.58 -3.36 -2.55 -2.16 -1.77 -1.09     3497     2591    1
#> pred[Strand 2006: CZP]         -2.53 0.63 -3.82 -2.93 -2.52 -2.11 -1.38     2905     2179    1
#> pred[Strand 2006: Etanercept]  -2.33 0.77 -3.83 -2.79 -2.32 -1.85 -0.89     2386     2015    1
#> pred[Strand 2006: Infliximab]  -2.64 0.60 -3.86 -3.01 -2.63 -2.24 -1.53     3067     2289    1
#> pred[Strand 2006: Rituximab]   -3.97 0.78 -5.60 -4.46 -3.93 -3.46 -2.51     4455     2595    1
#> pred[Strand 2006: Tocilizumab] -2.11 0.58 -3.31 -2.49 -2.08 -1.71 -1.03     3912     2564    1
#> 
#> --------------------------------------------------------- Study: Weinblatt 1999 ---- 
#> 
#>                                    mean   sd  2.5%   25%   50%   75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[Weinblatt 1999: Placebo]     -3.94 1.31 -7.14 -4.62 -3.74 -3.02 -2.00     3606     1600    1
#> pred[Weinblatt 1999: Adalimumab]  -4.07 1.35 -7.27 -4.78 -3.88 -3.13 -1.98     3235     1566    1
#> pred[Weinblatt 1999: CZP]         -4.44 1.38 -7.71 -5.15 -4.23 -3.49 -2.29     2890     1563    1
#> pred[Weinblatt 1999: Etanercept]  -4.23 1.43 -7.66 -4.94 -4.03 -3.27 -2.09     2647     1585    1
#> pred[Weinblatt 1999: Infliximab]  -4.54 1.36 -7.82 -5.25 -4.36 -3.60 -2.44     3068     1557    1
#> pred[Weinblatt 1999: Rituximab]   -5.88 1.46 -9.24 -6.69 -5.72 -4.89 -3.51     2953     1547    1
#> pred[Weinblatt 1999: Tocilizumab] -4.01 1.34 -7.18 -4.70 -3.80 -3.07 -1.97     3457     1601    1

We can also produce treatment rankings, rank probabilities, and cumulative rank probabilities.

(cert_ranks <- posterior_ranks(cert_fit_RE, newdata = newdata,
                               lower_better = FALSE))
#> ------------------------------------------------------------------ Study: New 1 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.42
#> 
#>                          mean   sd 2.5% 25% 50% 75% 97.5% Bulk_ESS Tail_ESS Rhat
#> rank[New 1: Placebo]     6.76 0.43    6   7   7   7     7     3099       NA    1
#> rank[New 1: Adalimumab]  2.08 0.87    1   1   2   3     4     2862     1784    1
#> rank[New 1: CZP]         3.84 0.92    2   3   4   4     5     2735     2479    1
#> rank[New 1: Etanercept]  2.86 1.44    1   2   3   4     5     2526     1208    1
#> rank[New 1: Infliximab]  4.40 0.83    2   4   5   5     5     1947     2095    1
#> rank[New 1: Rituximab]   6.20 0.54    6   6   6   6     7     3034       NA    1
#> rank[New 1: Tocilizumab] 1.87 0.99    1   1   2   2     4     2144     1651    1
plot(cert_ranks)

(cert_rankprobs <- posterior_rank_probs(cert_fit_RE, newdata = newdata,
                                        lower_better = FALSE))
#> ------------------------------------------------------------------ Study: New 1 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.42
#> 
#>                       p_rank[1] p_rank[2] p_rank[3] p_rank[4] p_rank[5] p_rank[6] p_rank[7]
#> d[New 1: Placebo]          0.00      0.00      0.00      0.00      0.00      0.24      0.76
#> d[New 1: Adalimumab]       0.28      0.43      0.24      0.04      0.01      0.00      0.00
#> d[New 1: CZP]              0.02      0.06      0.23      0.46      0.23      0.01      0.00
#> d[New 1: Etanercept]       0.25      0.17      0.26      0.15      0.17      0.01      0.00
#> d[New 1: Infliximab]       0.01      0.02      0.11      0.29      0.56      0.01      0.00
#> d[New 1: Rituximab]        0.00      0.00      0.00      0.00      0.02      0.74      0.24
#> d[New 1: Tocilizumab]      0.45      0.31      0.16      0.05      0.02      0.00      0.00
plot(cert_rankprobs)

(cert_cumrankprobs <- posterior_rank_probs(cert_fit_RE, cumulative = TRUE,
                                           newdata = newdata, lower_better = FALSE))
#> ------------------------------------------------------------------ Study: New 1 ---- 
#> 
#> Covariate values:
#>    .mu
#>  -2.42
#> 
#>                       p_rank[1] p_rank[2] p_rank[3] p_rank[4] p_rank[5] p_rank[6] p_rank[7]
#> d[New 1: Placebo]          0.00      0.00      0.00      0.00      0.00      0.24         1
#> d[New 1: Adalimumab]       0.28      0.71      0.95      0.99      1.00      1.00         1
#> d[New 1: CZP]              0.02      0.08      0.31      0.77      0.99      1.00         1
#> d[New 1: Etanercept]       0.25      0.41      0.67      0.82      0.99      1.00         1
#> d[New 1: Infliximab]       0.01      0.03      0.14      0.43      0.99      1.00         1
#> d[New 1: Rituximab]        0.00      0.00      0.00      0.01      0.02      0.76         1
#> d[New 1: Tocilizumab]      0.45      0.77      0.93      0.98      1.00      1.00         1
plot(cert_cumrankprobs)

It is also possible to combine baseline risk meta-regression with regular meta-regression. For example, we can add disease_duration to the regression formula.

nma(cert_net,
    trt_effects = "fixed",
    regression = ~(disease_duration + .mu):.trt,
    prior_intercept = normal(scale = sqrt(1000)),
    prior_trt = normal(scale = 100),
    prior_reg = normal(scale = 100),
    adapt_delta = 0.95)
#> Note: Setting "Placebo" as the network reference treatment.
#> A fixed effects NMA with a binomial likelihood (logit link).
#> Regression model: ~(disease_duration + .mu):.trt.
#> Centred covariates at the following overall mean values:
#> disease_duration              .mu 
#>         8.209583        -2.415570 
#> Inference for Stan model: binomial_1par.
#> 4 chains, each with iter=2000; warmup=1000; thin=1; 
#> post-warmup draws per chain=1000, total post-warmup draws=4000.
#> 
#>                                               mean se_mean   sd     2.5%      25%      50%      75%
#> beta[disease_duration:.trtclassTreatment]    -0.01    0.00 0.04    -0.09    -0.04    -0.01     0.01
#> beta[.trtclassTreatment:.mu]                 -0.93    0.00 0.09    -1.05    -1.00    -0.97    -0.89
#> d[Adalimumab]                                 2.15    0.00 0.15     1.86     2.05     2.15     2.25
#> d[CZP]                                        1.82    0.00 0.14     1.56     1.72     1.81     1.90
#> d[Etanercept]                                 2.13    0.01 0.36     1.46     1.89     2.11     2.35
#> d[Infliximab]                                 1.67    0.00 0.09     1.48     1.61     1.68     1.74
#> d[Rituximab]                                  0.39    0.01 0.52    -0.68     0.06     0.42     0.76
#> d[Tocilizumab]                                2.17    0.00 0.15     1.87     2.07     2.17     2.27
#> lp__                                      -1708.98    0.07 3.14 -1716.09 -1710.87 -1708.68 -1706.67
#>                                              97.5% n_eff Rhat
#> beta[disease_duration:.trtclassTreatment]     0.07  1568    1
#> beta[.trtclassTreatment:.mu]                 -0.68   887    1
#> d[Adalimumab]                                 2.44  2157    1
#> d[CZP]                                        2.11  1499    1
#> d[Etanercept]                                 2.89  2010    1
#> d[Infliximab]                                 1.85  4134    1
#> d[Rituximab]                                  1.34  4198    1
#> d[Tocilizumab]                                2.46  3418    1
#> lp__                                      -1703.73  1936    1
#> 
#> Samples were drawn using NUTS(diag_e) at Thu Feb  5 14:16:01 2026.
#> For each parameter, n_eff is a crude measure of effective sample size,
#> and Rhat is the potential scale reduction factor on split chains (at 
#> convergence, Rhat=1).

References

Dias, S., A. J. Sutton, N. J. Welton, and A. E. Ades. 2011. β€œNICE DSU Technical Support Document 3: Heterogeneity: Subgroups, Meta-Regression, Bias and Bias-Adjustment.” National Institute for Health and Care Excellence. https://sheffield.ac.uk/nice-dsu.