This vignette describes the analysis of treatments for moderate-to-severe plaque psoriasis from an HTA report (Woolacott et al. 2006), replicating the analysis in NICE Technical Support Document 2 (Dias et al. 2011). The data are available in this package as hta_psoriasis
:
head(hta_psoriasis)
#> studyn studyc year trtn trtc sample_size PASI50 PASI75 PASI90
#> 1 1 Elewski 2004 1 Supportive care 193 12 5 1
#> 2 1 Elewski 2004 2 Etanercept 25 mg 196 59 46 21
#> 3 1 Elewski 2004 3 Etanercept 50 mg 194 54 56 40
#> 4 2 Gottlieb 2003 1 Supportive care 55 5 1 0
#> 5 2 Gottlieb 2003 2 Etanercept 25 mg 57 23 11 6
#> 6 3 Lebwohl 2003 1 Supportive care 122 13 5 1
Outcomes are ordered multinomial success/failure to achieve 50%, 75%, or 90% reduction in symptoms on the Psoriasis Area and Severity Index (PASI) scale. Some studies report ordered outcomes at all three cutpoints, others only one or two:
dplyr::filter(hta_psoriasis, studyc %in% c("Elewski", "Gordon", "ACD2058g", "Altmeyer"))
#> studyn studyc year trtn trtc sample_size PASI50 PASI75 PASI90
#> 1 1 Elewski 2004 1 Supportive care 193 12 5 1
#> 2 1 Elewski 2004 2 Etanercept 25 mg 196 59 46 21
#> 3 1 Elewski 2004 3 Etanercept 50 mg 194 54 56 40
#> 4 5 Gordon 2003 1 Supportive care 187 18 8 NA
#> 5 5 Gordon 2003 4 Efalizumab 369 118 98 NA
#> 6 6 ACD2058g 2004 1 Supportive care 170 25 NA NA
#> 7 6 ACD2058g 2004 4 Efalizumab 162 99 NA NA
#> 8 10 Altmeyer 1994 1 Supportive care 51 NA 1 NA
#> 9 10 Altmeyer 1994 6 Fumaderm 49 NA 12 NA
Here, the outcome counts are given as “exclusive” counts. That is, for a study reporting all outcomes (e.g. Elewski), the counts represent the categories 50 < PASI < 75, 75 < PASI < 90, and 90 < PASI < 100, and the corresponding columns are named by the lower end of the interval. Missing values are used where studies only report a subset of the outcomes. For a study reporting only two outcomes, say PASI50 and PASI75 as in Gordon, the counts represent the categories 50 < PASI < 75 and 75 < PASI < 100. For a study reporting only one outcome, say PASI70 as in Altmeyer, the count represents 70 < PASI < 100. We also need the count for the lowest category (i.e. no higher outcomes achieved), which is equal to the sample size minus the counts in the other observed categories.
We begin by setting up the network. We have arm-level ordered multinomial count data, so we use the function set_agd_arm()
. The function multi()
helps us to specify the ordered outcomes correctly.
pso_net <- set_agd_arm(hta_psoriasis,
study = paste(studyc, year),
trt = trtc,
r = multi(r0 = sample_size - rowSums(cbind(PASI50, PASI75, PASI90), na.rm = TRUE),
PASI50, PASI75, PASI90,
inclusive = FALSE,
type = "ordered"))
pso_net
#> A network with 16 AgD studies (arm-based).
#>
#> ------------------------------------------------------- AgD studies (arm-based) ----
#> Study Treatments
#> ACD2058g 2004 2: Supportive care | Efalizumab
#> ACD2600g 2004 2: Supportive care | Efalizumab
#> Altmeyer 1994 2: Supportive care | Fumaderm
#> Chaudari 2001 2: Supportive care | Infliximab
#> Elewski 2004 3: Supportive care | Etanercept 25 mg | Etanercept 50 mg
#> Ellis 1991 2: Supportive care | Ciclosporin
#> Gordon 2003 2: Supportive care | Efalizumab
#> Gottlieb 2003 2: Supportive care | Etanercept 25 mg
#> Gottlieb 2004 2: Supportive care | Infliximab
#> Guenther 1991 2: Supportive care | Ciclosporin
#> ... plus 6 more studies
#>
#> Outcome type: ordered (4 categories)
#> ------------------------------------------------------------------------------------
#> Total number of treatments: 8
#> Total number of studies: 16
#> Reference treatment is: Supportive care
#> Network is connected
Plot the network structure.
plot(pso_net, weight_edges = TRUE, weight_nodes = TRUE) +
# Nudge the legend over
ggplot2::theme(legend.box.spacing = ggplot2::unit(0.75, "in"),
plot.margin = ggplot2::margin(0.1, 0, 0.1, 0.75, "in"))
We fit both fixed effect (FE) and random effects (RE) models.
First, we fit a fixed effect model using the nma()
function with trt_effects = "fixed"
, using a probit link function link = "probit"
. We use \(\mathrm{N}(0, 10^2)\) prior distributions for the treatment effects \(d_k\), and \(\mathrm{N}(0, 100^2)\) prior distributions for the study-specific intercepts \(\mu_j\). We can examine the range of parameter values implied by these prior distributions with the summary()
method:
summary(normal(scale = 10))
#> A Normal prior distribution: location = 0, scale = 10.
#> 50% of the prior density lies between -6.74 and 6.74.
#> 95% of the prior density lies between -19.6 and 19.6.
summary(normal(scale = 100))
#> A Normal prior distribution: location = 0, scale = 100.
#> 50% of the prior density lies between -67.45 and 67.45.
#> 95% of the prior density lies between -196 and 196.
We also need to specify prior distributions for the latent cutpoints \(c_\textrm{PASI75}\) and \(c_\textrm{PASI90}\) on the underlying scale - here the PASI standardised mean difference due to the probit link (the cutpoint \(c_\textrm{PASI50}=0\)). To make these easier to reason about, we actually specify priors on the differences between adjacent cutpoints, e.g. \(c_\textrm{PASI90} - c_\textrm{PASI75}\) and \(c_\textrm{PASI75} - c_\textrm{PASI50}\). These can be given any positive-valued prior distribution, and Stan will automatically impose the necessary ordering constraints behind the scenes. We choose to give these implicit flat priors flat()
.
The model is fitted using the nma()
function.
pso_fit_FE <- nma(pso_net,
trt_effects = "fixed",
link = "probit",
prior_intercept = normal(scale = 100),
prior_trt = normal(scale = 10),
prior_aux = flat())
#> Note: Setting "Supportive care" as the network reference treatment.
Basic parameter summaries are given by the print()
method:
pso_fit_FE
#> A fixed effects NMA with a ordered likelihood (probit link).
#> Inference for Stan model: ordered_multinomial.
#> 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% n_eff Rhat
#> d[Ciclosporin] 1.93 0.01 0.35 1.28 1.69 1.92 2.15 2.64 1376 1.00
#> d[Efalizumab] 1.19 0.00 0.06 1.08 1.15 1.19 1.23 1.30 2076 1.00
#> d[Etanercept 25 mg] 1.52 0.00 0.09 1.33 1.45 1.52 1.58 1.70 2109 1.00
#> d[Etanercept 50 mg] 1.92 0.00 0.10 1.73 1.86 1.92 1.99 2.11 2350 1.00
#> d[Fumaderm] 1.48 0.01 0.48 0.62 1.14 1.45 1.77 2.54 2704 1.00
#> d[Infliximab] 2.34 0.00 0.27 1.83 2.16 2.33 2.51 2.88 2965 1.00
#> d[Methotrexate] 1.62 0.01 0.45 0.74 1.31 1.61 1.92 2.50 1706 1.00
#> lp__ -3405.24 0.10 3.70 -3413.54 -3407.49 -3404.82 -3402.65 -3399.22 1299 1.01
#> cc[PASI50] 0.00 NaN 0.00 0.00 0.00 0.00 0.00 0.00 NaN NaN
#> cc[PASI75] 0.76 0.00 0.03 0.70 0.74 0.76 0.78 0.82 4971 1.00
#> cc[PASI90] 1.57 0.00 0.05 1.46 1.53 1.57 1.60 1.67 5935 1.00
#>
#> Samples were drawn using NUTS(diag_e) at Wed Nov 25 18:22:46 2020.
#> 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).
Note: the treatment effects are the opposite sign to those in TSD 2 (Dias et al. 2011). This is because we parameterise the linear predictor as \(\mu_j + d_k + c_m\), rather than \(\mu_j + d_k - c_m\). The interpretation here thus follows that of a standard binomial probit (or logit) regression; SMDs (or log ORs) greater than zero mean that the treatment increases the probability of an event compared to the comparator (and less than zero mean a reduction in probability). Here higher outcomes are positive, and all of the active treatments are estimated to increase the response (i.e. a greater reduction) on the PASI scale compared to the network reference (supportive care).
By default, summaries of the study-specific intercepts \(\mu_j\) are hidden, but could be examined by changing the pars
argument:
The prior and posterior distributions can be compared visually using the plot_prior_posterior()
function:
Focusing specifically on the cutpoints we see that these are highly identified by the data, which is why the implicit flat priors work for these parameters.
We now fit a random effects model using the nma()
function with trt_effects = "random"
. Again, we use \(\mathrm{N}(0, 10^2)\) prior distributions for the treatment effects \(d_k\), \(\mathrm{N}(0, 100^2)\) prior distributions for the study-specific intercepts \(\mu_j\), implicit flat prior distributions for the latent cutpoints, and we additionally use a \(\textrm{half-N}(2.5^2)\) prior for the heterogeneity standard deviation \(\tau\). We can examine the range of parameter values implied by these prior distributions with the summary()
method:
summary(normal(scale = 10))
#> A Normal prior distribution: location = 0, scale = 10.
#> 50% of the prior density lies between -6.74 and 6.74.
#> 95% of the prior density lies between -19.6 and 19.6.
summary(normal(scale = 100))
#> A Normal prior distribution: location = 0, scale = 100.
#> 50% of the prior density lies between -67.45 and 67.45.
#> 95% of the prior density lies between -196 and 196.
summary(half_normal(scale = 2.5))
#> A half-Normal prior distribution: location = 0, scale = 2.5.
#> 50% of the prior density lies between 0 and 1.69.
#> 95% of the prior density lies between 0 and 4.9.
Fitting the RE model
pso_fit_RE <- nma(pso_net,
trt_effects = "random",
link = "probit",
prior_intercept = normal(scale = 100),
prior_trt = normal(scale = 10),
prior_aux = flat(),
prior_het = half_normal(scale = 2.5),
adapt_delta = 0.99)
#> Note: Setting "Supportive care" as the network reference treatment.
Basic parameter summaries are given by the print()
method:
pso_fit_RE
#> A random effects NMA with a ordered likelihood (probit link).
#> Inference for Stan model: ordered_multinomial.
#> 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% n_eff Rhat
#> d[Ciclosporin] 2.02 0.01 0.42 1.29 1.74 1.98 2.27 2.97 1803 1.00
#> d[Efalizumab] 1.18 0.00 0.18 0.79 1.10 1.19 1.27 1.56 1983 1.00
#> d[Etanercept 25 mg] 1.53 0.00 0.24 1.06 1.40 1.52 1.65 2.03 2242 1.00
#> d[Etanercept 50 mg] 1.93 0.01 0.26 1.41 1.80 1.93 2.06 2.47 2256 1.00
#> d[Fumaderm] 1.48 0.01 0.62 0.34 1.07 1.46 1.85 2.76 2758 1.00
#> d[Infliximab] 2.32 0.01 0.38 1.55 2.09 2.31 2.55 3.05 3396 1.00
#> d[Methotrexate] 1.71 0.01 0.63 0.60 1.31 1.68 2.08 3.11 1876 1.00
#> lp__ -3410.98 0.30 6.83 -3424.57 -3415.67 -3410.74 -3406.12 -3398.23 520 1.01
#> tau 0.29 0.01 0.21 0.02 0.14 0.25 0.40 0.80 409 1.01
#> cc[PASI50] 0.00 NaN 0.00 0.00 0.00 0.00 0.00 0.00 NaN NaN
#> cc[PASI75] 0.76 0.00 0.03 0.70 0.73 0.76 0.78 0.82 7845 1.00
#> cc[PASI90] 1.56 0.00 0.05 1.46 1.53 1.56 1.60 1.67 9191 1.00
#>
#> Samples were drawn using NUTS(diag_e) at Wed Nov 25 18:24:09 2020.
#> 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).
By default, summaries of the study-specific intercepts \(\mu_j\) and study-specific relative effects \(\delta_{jk}\) are hidden, but could be examined by changing the pars
argument:
The prior and posterior distributions can be compared visually using the plot_prior_posterior()
function:
Model fit can be checked using the dic()
function:
(dic_FE <- dic(pso_fit_FE))
#> Residual deviance: 75.1 (on 58 data points)
#> pD: 25.6
#> DIC: 100.7
The random effects model has a lower DIC and the residual deviance is closer to the number of data points, so is preferred in this case.
We can also examine the residual deviance contributions with the corresponding plot()
method.
Most data points are fit well, with posterior mean residual deviances close to the degrees of freedom. The Meffert 1997 study has a substantially higher residual deviance contribution, which could be investigated further to see why this study appears to be an outlier.
Dias et al. (2011) produce absolute predictions of probability of achieving responses at each PASI cutoff, assuming a Normal distribution for the baseline probit probability of PASI50 response on supportive care with mean \(-1.097\) and precision \(123\). We can replicate these results using the predict()
method. The baseline
argument takes a distr()
distribution object, with which we specify the corresponding Normal distribution. We set type = "response"
to produce predicted probabilities (type = "link"
would produce predicted probit probabilities).
pred_FE <- predict(pso_fit_FE,
baseline = distr(qnorm, mean = -1.097, sd = 123^-0.5),
type = "response")
pred_FE
#> mean sd 2.5% 25% 50% 75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[Supportive care, PASI50] 0.14 0.02 0.10 0.12 0.14 0.15 0.18 3675 3431 1
#> pred[Supportive care, PASI75] 0.03 0.01 0.02 0.03 0.03 0.04 0.05 3723 3723 1
#> pred[Supportive care, PASI90] 0.00 0.00 0.00 0.00 0.00 0.00 0.01 3957 3542 1
#> pred[Ciclosporin, PASI50] 0.78 0.10 0.56 0.72 0.79 0.86 0.94 1466 1888 1
#> pred[Ciclosporin, PASI75] 0.53 0.14 0.27 0.43 0.52 0.63 0.79 1472 1823 1
#> pred[Ciclosporin, PASI90] 0.25 0.11 0.08 0.16 0.23 0.31 0.51 1499 1889 1
#> pred[Efalizumab, PASI50] 0.54 0.04 0.46 0.51 0.54 0.56 0.62 2969 3904 1
#> pred[Efalizumab, PASI75] 0.25 0.03 0.19 0.23 0.25 0.28 0.33 3017 3662 1
#> pred[Efalizumab, PASI90] 0.07 0.02 0.04 0.06 0.07 0.08 0.11 3158 3193 1
#> pred[Etanercept 25 mg, PASI50] 0.66 0.05 0.56 0.63 0.66 0.69 0.75 2624 3008 1
#> pred[Etanercept 25 mg, PASI75] 0.37 0.05 0.27 0.34 0.37 0.40 0.47 2776 3313 1
#> pred[Etanercept 25 mg, PASI90] 0.13 0.03 0.08 0.11 0.13 0.15 0.19 3022 3058 1
#> pred[Etanercept 50 mg, PASI50] 0.79 0.04 0.71 0.77 0.80 0.82 0.86 2799 3687 1
#> pred[Etanercept 50 mg, PASI75] 0.53 0.05 0.42 0.49 0.53 0.56 0.63 2925 3423 1
#> pred[Etanercept 50 mg, PASI90] 0.23 0.04 0.16 0.20 0.23 0.26 0.32 3076 3299 1
#> pred[Fumaderm, PASI50] 0.63 0.16 0.32 0.52 0.64 0.75 0.93 2942 2357 1
#> pred[Fumaderm, PASI75] 0.37 0.17 0.11 0.24 0.34 0.47 0.77 2933 2328 1
#> pred[Fumaderm, PASI90] 0.14 0.11 0.02 0.06 0.11 0.19 0.47 2948 2286 1
#> pred[Infliximab, PASI50] 0.88 0.05 0.76 0.85 0.89 0.92 0.97 3076 3115 1
#> pred[Infliximab, PASI75] 0.68 0.10 0.48 0.62 0.68 0.75 0.86 3101 3064 1
#> pred[Infliximab, PASI90] 0.38 0.11 0.19 0.30 0.37 0.45 0.61 3148 3116 1
#> pred[Methotrexate, PASI50] 0.68 0.15 0.35 0.58 0.70 0.80 0.92 1784 2359 1
#> pred[Methotrexate, PASI75] 0.42 0.17 0.13 0.29 0.40 0.53 0.75 1785 2334 1
#> pred[Methotrexate, PASI90] 0.17 0.11 0.02 0.09 0.15 0.23 0.45 1793 2357 1
plot(pred_FE)
pred_RE <- predict(pso_fit_RE,
baseline = distr(qnorm, mean = -1.097, sd = 123^-0.5),
type = "response")
pred_RE
#> mean sd 2.5% 25% 50% 75% 97.5% Bulk_ESS Tail_ESS Rhat
#> pred[Supportive care, PASI50] 0.14 0.02 0.10 0.12 0.14 0.15 0.18 4023 3849 1
#> pred[Supportive care, PASI75] 0.03 0.01 0.02 0.03 0.03 0.04 0.05 4409 4100 1
#> pred[Supportive care, PASI90] 0.00 0.00 0.00 0.00 0.00 0.00 0.01 4525 3758 1
#> pred[Ciclosporin, PASI50] 0.80 0.10 0.57 0.74 0.81 0.88 0.97 2125 1851 1
#> pred[Ciclosporin, PASI75] 0.56 0.15 0.28 0.45 0.55 0.67 0.87 2137 1841 1
#> pred[Ciclosporin, PASI90] 0.28 0.14 0.08 0.18 0.25 0.35 0.63 2157 1816 1
#> pred[Efalizumab, PASI50] 0.53 0.08 0.37 0.49 0.53 0.58 0.69 2317 1885 1
#> pred[Efalizumab, PASI75] 0.26 0.06 0.14 0.22 0.25 0.29 0.39 2333 1832 1
#> pred[Efalizumab, PASI90] 0.07 0.03 0.03 0.06 0.07 0.09 0.14 2387 1748 1
#> pred[Etanercept 25 mg, PASI50] 0.66 0.09 0.47 0.62 0.67 0.71 0.83 2592 1994 1
#> pred[Etanercept 25 mg, PASI75] 0.38 0.09 0.20 0.32 0.37 0.43 0.58 2606 1961 1
#> pred[Etanercept 25 mg, PASI90] 0.14 0.06 0.05 0.10 0.13 0.16 0.27 2639 1958 1
#> pred[Etanercept 50 mg, PASI50] 0.79 0.08 0.62 0.75 0.80 0.84 0.92 2656 1887 1
#> pred[Etanercept 50 mg, PASI75] 0.53 0.10 0.32 0.47 0.53 0.59 0.74 2657 1772 1
#> pred[Etanercept 50 mg, PASI90] 0.24 0.08 0.10 0.19 0.23 0.28 0.43 2672 1831 1
#> pred[Fumaderm, PASI50] 0.63 0.20 0.22 0.49 0.64 0.78 0.95 2978 2239 1
#> pred[Fumaderm, PASI75] 0.37 0.20 0.06 0.22 0.35 0.51 0.82 2971 2276 1
#> pred[Fumaderm, PASI90] 0.16 0.14 0.01 0.06 0.11 0.21 0.55 3030 2182 1
#> pred[Infliximab, PASI50] 0.87 0.08 0.67 0.84 0.89 0.93 0.98 3212 2685 1
#> pred[Infliximab, PASI75] 0.67 0.13 0.37 0.59 0.68 0.76 0.89 3341 2685 1
#> pred[Infliximab, PASI90] 0.37 0.14 0.13 0.28 0.36 0.46 0.66 3404 2574 1
#> pred[Methotrexate, PASI50] 0.70 0.18 0.30 0.58 0.72 0.84 0.98 2206 1796 1
#> pred[Methotrexate, PASI75] 0.45 0.21 0.10 0.29 0.43 0.59 0.90 2218 1782 1
#> pred[Methotrexate, PASI90] 0.21 0.17 0.02 0.09 0.16 0.28 0.68 2217 1755 1
plot(pred_RE)
We can modify the plots using standard ggplot2
functions. For example, to plot the cutpoints together with a colour coding (instead of split into facets):
library(ggplot2)
plot(pred_RE, position = position_dodge(width = 0.75)) +
facet_null() +
aes(colour = Category) +
scale_colour_brewer(palette = "Blues")
If the baseline
argument is omitted, predicted probabilities will be produced for every study in the network based on their estimated baseline probit probability \(\mu_j\).
Treatment rankings, rank probabilities, and cumulative rank probabilities can also be produced. We set lower_better = FALSE
since higher outcome categories are better (the outcomes are positive).
(pso_ranks <- posterior_ranks(pso_fit_RE, lower_better = FALSE))
#> mean sd 2.5% 25% 50% 75% 97.5% Bulk_ESS Tail_ESS Rhat
#> rank[Supportive care] 7.99 0.11 8 8 8 8 8 2183 NA 1
#> rank[Ciclosporin] 2.77 1.26 1 2 3 4 5 3245 2904 1
#> rank[Efalizumab] 6.36 0.79 4 6 7 7 7 2347 NA 1
#> rank[Etanercept 25 mg] 4.91 1.05 3 4 5 6 7 3020 2395 1
#> rank[Etanercept 50 mg] 3.01 1.19 1 2 3 4 5 2159 1658 1
#> rank[Fumaderm] 4.91 1.95 1 3 5 7 7 3224 2000 1
#> rank[Infliximab] 1.79 1.17 1 1 1 2 5 1713 2033 1
#> rank[Methotrexate] 4.25 1.87 1 3 4 6 7 2732 2439 1
plot(pso_ranks)
(pso_rankprobs <- posterior_rank_probs(pso_fit_RE, lower_better = FALSE))
#> p_rank[1] p_rank[2] p_rank[3] p_rank[4] p_rank[5] p_rank[6] p_rank[7] p_rank[8]
#> d[Supportive care] 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.99
#> d[Ciclosporin] 0.16 0.29 0.28 0.17 0.07 0.02 0.00 0.00
#> d[Efalizumab] 0.00 0.00 0.01 0.02 0.09 0.37 0.51 0.00
#> d[Etanercept 25 mg] 0.00 0.01 0.08 0.22 0.39 0.26 0.04 0.00
#> d[Etanercept 50 mg] 0.08 0.30 0.27 0.25 0.08 0.02 0.01 0.00
#> d[Fumaderm] 0.07 0.09 0.10 0.11 0.17 0.18 0.28 0.01
#> d[Infliximab] 0.59 0.19 0.13 0.06 0.02 0.01 0.00 0.00
#> d[Methotrexate] 0.10 0.11 0.14 0.18 0.17 0.15 0.14 0.00
plot(pso_rankprobs)
(pso_cumrankprobs <- posterior_rank_probs(pso_fit_RE, lower_better = FALSE, cumulative = TRUE))
#> p_rank[1] p_rank[2] p_rank[3] p_rank[4] p_rank[5] p_rank[6] p_rank[7] p_rank[8]
#> d[Supportive care] 0.00 0.00 0.00 0.00 0.00 0.00 0.01 1
#> d[Ciclosporin] 0.16 0.46 0.74 0.90 0.98 1.00 1.00 1
#> d[Efalizumab] 0.00 0.00 0.01 0.03 0.12 0.49 1.00 1
#> d[Etanercept 25 mg] 0.00 0.02 0.09 0.31 0.70 0.96 1.00 1
#> d[Etanercept 50 mg] 0.08 0.38 0.65 0.90 0.98 0.99 1.00 1
#> d[Fumaderm] 0.07 0.16 0.26 0.36 0.53 0.71 0.99 1
#> d[Infliximab] 0.59 0.78 0.90 0.96 0.99 1.00 1.00 1
#> d[Methotrexate] 0.10 0.21 0.35 0.53 0.70 0.85 1.00 1
plot(pso_cumrankprobs)
Dias, S., N. J. Welton, A. J. Sutton, and A. E. Ades. 2011. “NICE DSU Technical Support Document 2: A Generalised Linear Modelling Framework for Pair-Wise and Network Meta-Analysis of Randomised Controlled Trials.” National Institute for Health and Care Excellence. http://nicedsu.org.uk/.
Woolacott, N., N. Hawkins, A. Mason, A. Kainth, Z. Khadjesari, Y. Bravo Vergel, K. Misso, et al. 2006. “Etanercept and Efalizumab for the Treatment of Psoriasis: A Systematic Review.” Health Technology Assessment 10 (46). https://doi.org/10.3310/hta10460.