Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,14 @@
* Improvement: `?set_agd` states what an aggregate Poisson row assumes about
exposure, and the `shoulder` and `caries` help pages describe their
reference comparison as an estimate rather than a known truth.
* Improvement: The README and vignettes state that ML-UMR is for single-arm
indirect comparisons of fully disconnected evidence, and that each worked
example builds hypothetical single-arm trials from randomized trials only to
illustrate the method; randomized trials connected through a common arm call
for ML-NMR or another appropriate method. `vignette("count-outcomes")` explains why its SPFA rate
ratio is the same in both populations and at every covariate profile (a
directly transportable effect), and the README states that the marginal
hazard ratio varies over time even when both studies share one baseline shape.
* Feature: New hex-sticker logo with a broken-anchor motif.

## Dependencies
Expand Down
69 changes: 46 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,25 @@
<!-- badges: end -->

***mlumr*** implements Multilevel Unanchored Meta-Regression (ML-UMR), a
population-adjusted indirect treatment comparison for *disconnected* evidence
networks: individual patient data (IPD) for one treatment, aggregate data (AgD)
for the comparator, and no common reference arm (e.g., comparing single-arm
studies). It estimates treatment effects while adjusting for cross-trial
differences in prognostic factors, extending Multilevel Network
Meta-Regression (ML-NMR; Phillippo et al., 2020) to the unanchored setting.
population-adjusted single-arm indirect treatment comparison for treatments
from *fully disconnected* evidence: individual patient data (IPD) for one
treatment, aggregate data (AgD) for the comparator, and no common reference arm
(e.g., comparing single-arm studies). It estimates treatment effects while
adjusting for cross-trial differences in prognostic factors, extending
Multilevel Network Meta-Regression (ML-NMR; Phillippo et al., 2020) to the
single-arm, fully unanchored setting.

It provides four estimators behind one data interface, two of them ML-UMR
variants:

- **ML-UMR** (Bayesian): the shared prognostic factor assumption (SPFA) model
and the relaxed SPFA model, fitted via Stan with quasi-Monte Carlo
integration and a Gaussian copula for population adjustment
- **STC** (frequentist): one-arm simulated treatment comparison via
- **STC** (frequentist): unanchored simulated treatment comparison via
comparator-population G-computation, with delta-method standard errors for
binary, continuous, and count outcomes and a nonparametric bootstrap for
time-to-event
- **Naive** (benchmark): unadjusted comparison of crude outcome summaries
- **Naive** (benchmark): unadjusted comparison of outcomes across studies

Binary, continuous, count, and time-to-event outcomes are supported.

Expand Down Expand Up @@ -141,12 +142,23 @@ Kaplan-Meier curves. Neither choice is assumption-free, so fit both and report
which was used.

After marginalization the hazard ratio is generally time-varying in the SPFA
and relaxed models alike, because each arm weights the covariate distribution
by its own survival and the two risk sets diverge; study-specific shapes add
the ratio of the baselines on top of that. The scalar marginal hazard ratio is
therefore its value at one time, chosen with `at_time`, and the primary
reported estimand should be the `loghr` curve or the collapsible RMST effects.
See `vignette("survival-outcomes")`.
and relaxed models alike, and this holds even when both studies share one
baseline shape (`aux_by = "none"`). A shared shape makes the *conditional*
hazard ratio constant over time, but each arm's marginal hazard averages over
the patients still at risk, and the two arms lose their high-risk patients at
different rates, so the covariate mix of the two risk sets diverges: the hazard
ratio is not collapsible. With a common Weibull shape of 1.5, one standard
normal prognostic covariate with a log hazard ratio of 0.8 and a conditional
hazard ratio of 0.50, for example, the marginal hazard ratio rises from 0.50 at
the start of follow-up to 0.66 later on. It stays constant only when no
covariate is prognostic or the treatments do not differ. Study-specific shapes
add the ratio of the baselines on top of that. The scalar marginal hazard ratio
is therefore its value at one time. With study-specific shapes that is the first
prediction time or the time chosen with `at_time`; with a shared shape it is the
`t -> 0` limit, the only `at_time` accepted is 0, and for an SPFA fit it equals
the conditional hazard ratio. The primary reported estimand should be the
`loghr` curve (`predict(type = "loghr")`) or the collapsible RMST effects. See
`vignette("survival-outcomes")`.

```r
# Index IPD with a Surv outcome; comparator from a digitized KM curve
Expand Down Expand Up @@ -179,10 +191,10 @@ predict(fit, type = "rmst") # restricted mean survival time

| Method | Data required | Type of ITC | Pairwise only | Type of treatment effect | Target population |
|--------|:------------:|:----------:|:-------------:|:------------------------:|:------------------:|
| MAIC | IPD + AgD | Anchored or unanchored | Yes | Marginal | Comparator |
| STC | IPD + AgD | Unanchored | Yes | Marginal | Comparator |
| MAIC | IPD + AgD | Anchored or fully unanchored (single-arm) | Yes | Marginal | Comparator |
| STC | IPD + AgD | Anchored or fully unanchored (single-arm) | Yes | Marginal | Comparator |
| ML-NMR | IPD + AgD | Anchored | No | Marginal or conditional | Any pre-specified target |
| **ML-UMR** | IPD + AgD | Unanchored | Yes | Marginal or conditional | Any pre-specified target |
| **ML-UMR** | IPD + AgD | Fully unanchored (single-arm) | Yes | Marginal or conditional | Any pre-specified target |

The **index population is the decision-relevant target** in most health
technology assessment (HTA) settings:
Expand All @@ -200,10 +212,19 @@ assumptions, and adequate covariate overlap.
ML-UMR is most appropriate when:

1. You have IPD for one treatment and AgD for the comparator
2. No common reference arm connects the evidence (unanchored)
2. Indirectly comparing treatments from single-arm trials (i.e., fully
disconnected evidence where no common reference arm connects the evidence)
3. Binary, continuous, count, or time-to-event outcomes are of interest
4. Covariate distributions differ between trial populations

ML-UMR should only be used for fully unanchored, single-arm comparisons.
Randomized trials that share a common arm, or are otherwise connected, should
never be broken into single-arm evidence to fit it: connected evidence calls for
ML-NMR (for example with multinma) or another appropriate method. The vignettes'
worked examples do exactly that, creating hypothetical single-arm trials from
randomized trials by dropping a common reference arm or by treating a trial's
arms as separate sources, only to illustrate the method.

## Key functions

| Function | Purpose |
Expand Down Expand Up @@ -264,14 +285,15 @@ For survival, `aux_by = NULL` resolves to `".study"`; the mlumr-specific
`aux_by = "none"` shares one baseline shape across both studies.

The cleanest practice is still to **use one package per session**, matched to
the network type (anchored connected → multinma; unanchored disconnected →
mlumr). When both must be attached, disambiguate with the namespace prefix:
the evidence (anchored, connected network → multinma; single-arm, fully
disconnected evidence → mlumr). When both must be attached, disambiguate with
the namespace prefix:

```r
library(multinma)
library(mlumr)

# mlumr fits ML-UMR (disconnected, two-trial)
# mlumr fits ML-UMR (single-arm, fully disconnected evidence)
fit_umr <- mlumr::mlumr(dat, model = "spfa")

# multinma fits ML-NMR (connected network)
Expand Down Expand Up @@ -305,7 +327,7 @@ Detailed tutorials are available as package vignettes, in reading order:
- `vignette("fitting-and-diagnostics")`: sampler control, backends, priors,
and MCMC diagnostics
- `vignette("choosing-a-method")`: assumptions, model comparison, and a
decision guide for ML-UMR vs STC vs naive
decision guide for ML-UMR vs STC vs naive in single-arm indirect comparisons
- `vignette("subgroup-identification")`: how many jointly defined aggregate
subgroup rows the relaxed model needs, the geometry those rows must have, and
how to read `check_identification()`
Expand All @@ -331,7 +353,8 @@ mlumr implements multilevel unanchored meta-regression (ML-UMR):
> <https://www.ispor.org/heor-resources/presentations-database/presentation-cti/ispor-2026/poster-session-3-3/surviving-unanchored-indirect-comparisons-an-extension-of-multilevel-unanchored-meta-regression-ml-umr-for-survival-analyses>

ML-UMR is an adaptation of multilevel network meta-regression (ML-NMR) to the
unanchored case, where no common comparator arm links the two studies:
single-arm, fully unanchored case, where no common comparator arm links the two
studies:

> Phillippo, D. M., Dias, S., Ades, A. E., Belger, M., Brnabic, A.,
> Schacht, A., Saure, D., Kadziola, Z., & Welton, N. J. (2020).
Expand Down
2 changes: 1 addition & 1 deletion _pkgdown.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ navbar:
- text: Methods
- text: Fitting, priors, and diagnostics
href: articles/fitting-and-diagnostics.html
- text: "Choosing a method: ML-UMR, STC, and naive"
- text: "Choosing a method for single-arm indirect comparisons"
href: articles/choosing-a-method.html
- text: Aggregate subgroup information for the relaxed model
href: articles/subgroup-identification.html
Expand Down
10 changes: 6 additions & 4 deletions inst/REFERENCES.bib
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,12 @@ @Article{Leahy2019
}

@Misc{ChandlerIshakTransport,
author = {Chandler, Conor and Ishak, K. Jack},
title = {Reframing Population-Adjusted Indirect Comparisons as a Transportability Problem: An Estimand-Based Perspective and Implications for Health Technology Assessment},
year = {2026},
note = {Manuscript},
author = {Chandler, Conor and Ishak, K. Jack},
title = {Reframing Population-Adjusted Indirect Comparisons as a Transportability Problem: An Estimand-Based Perspective and Implications for Health Technology Assessment},
year = {2026},
howpublished = {Preprint},
doi = {10.48550/arXiv.2602.17041},
url = {https://arxiv.org/abs/2602.17041},
}

@Misc{ChandlerIshak2025,
Expand Down
8 changes: 8 additions & 0 deletions vignettes/binary-outcomes.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ package [@multinma]). It is the unanchored, two-study analogue of multinma's
> possible, which is not the problem this vignette is about. The unanchored
> framing is a construction for illustration; the section *Checking against the
> anchored comparison* below puts the omitted arms back to use.
>
> **Hypothetical single-arm trials.** UNCOVER-2 and FIXTURE are randomized
> trials. Dropping their common reference arms (placebo and etanercept) turns
> them into hypothetical single-arm trials and leaves fully disconnected
> evidence; we do this only to illustrate ML-UMR. In practice, randomized
> trials should never be analyzed this way: ML-NMR (for example with
> `multinma`) or another appropriate method should be used for them. ML-UMR
> should only be used for fully unanchored, single-arm comparisons.

## The clinical question

Expand Down
8 changes: 8 additions & 0 deletions vignettes/binary-outcomes.Rmd.orig
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@ package [@multinma]). It is the unanchored, two-study analogue of multinma's
> possible, which is not the problem this vignette is about. The unanchored
> framing is a construction for illustration; the section *Checking against the
> anchored comparison* below puts the omitted arms back to use.
>
> **Hypothetical single-arm trials.** UNCOVER-2 and FIXTURE are randomized
> trials. Dropping their common reference arms (placebo and etanercept) turns
> them into hypothetical single-arm trials and leaves fully disconnected
> evidence; we do this only to illustrate ML-UMR. In practice, randomized
> trials should never be analyzed this way: ML-NMR (for example with
> `multinma`) or another appropriate method should be used for them. ML-UMR
> should only be used for fully unanchored, single-arm comparisons.

## The clinical question

Expand Down
Loading
Loading