| Language: | en-GB |
| Title: | Doubly Robust Matching-Adjusted Indirect Comparison for HTA |
| Version: | 0.1.0 |
| Description: | Implements Doubly Robust Matching-Adjusted Indirect Comparison (DR-MAIC) for population-adjusted indirect treatment comparisons in health technology appraisal (HTA). The package provides: (1) standard MAIC via entropy balancing / exponential tilting; (2) augmented/doubly robust MAIC combining inverse probability weighting with outcome regression; (3) comprehensive covariate balance diagnostics including standardised mean differences, Love plots, and effective sample size; (4) sensitivity analyses including E-values, weight trimming, and variable exclusion analyses; (5) bootstrap confidence intervals; and (6) submission-ready outputs aligned with NICE Decision Support Unit Technical Support Document 18, Cochrane Handbook guidance on indirect comparisons, and ISPOR best practice guidelines. Supports binary (risk difference, risk ratio, odds ratio) and time-to-event (hazard ratio) outcomes. |
| License: | GPL (≥ 3) |
| Encoding: | UTF-8 |
| RoxygenNote: | 7.3.3 |
| Depends: | R (≥ 4.0.0) |
| Imports: | stats, survival, boot, ggplot2 |
| Suggests: | knitr, rmarkdown, testthat (≥ 3.0.0) |
| VignetteBuilder: | knitr |
| Config/testthat/edition: | 3 |
| LazyData: | true |
| URL: | https://github.com/Anupama-Singh01/drMAIC |
| BugReports: | https://github.com/Anupama-Singh01/drMAIC/issues |
| NeedsCompilation: | no |
| Packaged: | 2026-03-24 19:14:24 UTC; AnupamaSingh |
| Author: | Anupama Singh [aut, cre] |
| Maintainer: | Anupama Singh <anupama.singh@pharmacoevidence.com> |
| Repository: | CRAN |
| Date/Publication: | 2026-03-29 15:50:15 UTC |
drMAIC: Doubly Robust Matching-Adjusted Indirect Comparison
Description
The drMAIC package implements doubly robust (DR) and standard MAIC
methods for population-adjusted indirect treatment comparisons (ITC) in
health technology appraisal (HTA). It is designed for settings where:
One trial provides individual patient data (IPD)
One or more comparators provide only aggregate data (AgD)
A population-adjusted ITC is required for payer/HTA submissions
Core workflow
-
compute_weights(): Estimate MAIC weights via entropy balancing -
dr_maic(): Compute standard MAIC, STC, and DR-MAIC estimates -
maic_diagnostics(): Assess covariate balance and weight quality -
bootstrap_ci(): Non-parametric bootstrap confidence intervals -
sensitivity_analysis(): E-values, trimming, LOVO analyses -
nice_report(): NICE/HTA submission-ready formatted output
Statistical methods
The doubly robust estimator combines inverse probability weighting (MAIC) with outcome regression (STC/g-computation):
\hat\theta_{DR} = \hat\theta_{STC} + \sum_i \omega_i(Y_i - \hat m(X_i))
This estimator is consistent if either the weight model or the outcome regression model is correctly specified.
Guideline alignment
-
NICE DSU TSD 18: Weight estimation, ESS, balance assessment
-
Cochrane Handbook Chapter 23: Transitivity, consistency assumptions
-
ISPOR Task Force: Sensitivity analysis, uncertainty reporting
-
Remiro-Azocar et al. (2022): DR estimation framework
Author(s)
Maintainer: Anupama Singh anupama.singh@pharmacoevidence.com
References
Phillippo DM, Ades AE, Dias S, et al. (2016). NICE DSU Technical Support Document 18.
Remiro-Azocar A, Heath A, Baio G. (2022). Methods for population-adjusted indirect comparisons in HTA. Statistics in Medicine, 41(28), 5558-5569.
Signorovitch JE, Wu EQ, Yu AP, et al. (2010). Comparative effectiveness without head-to-head trials. PharmacoEconomics, 28(10), 935-945.
See Also
Useful links:
Report bugs at https://github.com/Anupama-Singh01/drMAIC/issues
Bootstrap Confidence Intervals for DR-MAIC
Description
Computes non-parametric bootstrap confidence intervals for the DR-MAIC indirect treatment comparison estimate. Three interval types are available: percentile, basic (Hall), and bias-corrected and accelerated (BCa).
Usage
bootstrap_ci(
dr_maic_result,
R = 1000L,
ci_type = c("bca", "perc", "norm"),
alpha = 0.05,
seed = NULL,
parallel = FALSE,
verbose = TRUE
)
Arguments
dr_maic_result |
An object of class |
R |
Integer; number of bootstrap replicates. Default 1000. Use R >= 2000 for stable BCa intervals. |
ci_type |
Character; bootstrap CI type: |
alpha |
Numeric; significance level. Default 0.05. |
seed |
Integer; random seed for reproducibility. |
parallel |
Logical; use parallel computation if |
verbose |
Logical; show progress. Default |
Details
Bootstrap procedure: The IPD are resampled with replacement B times. For each bootstrap replicate:
MAIC weights are recomputed on the resampled IPD.
The DR-MAIC estimator is evaluated.
The ITC is computed.
Bootstrap resampling captures variance from both the weight estimation and outcome regression steps, providing honest uncertainty quantification for the doubly robust estimator.
Bootstrap CI methods (per Efron and Tibshirani, 1993):
-
Percentile: uses the 2.5th and 97.5th percentiles of the bootstrap distribution.
-
BCa (Bias-Corrected and Accelerated): adjusts for bias and skewness. Recommended method per ISPOR guidance.
-
Normal: uses bootstrap standard error with normal quantiles.
NICE guidance alignment: NICE DSU TSD 18 recommends bootstrap CIs for MAIC to capture parameter uncertainty from the weight estimation step.
Value
A list of class "maic_bootstrap" containing:
ci_maicBootstrap CI for standard MAIC ITC.
ci_stcBootstrap CI for STC ITC.
ci_drBootstrap CI for DR-MAIC ITC.
se_boot_drBootstrap SE for DR-MAIC.
boot_distributionData frame of bootstrap replicate estimates.
boot_plotggplot2 bootstrap distribution plot.
ci_typeCI type used.
RNumber of bootstrap replicates.
References
Efron B, Tibshirani RJ. (1993). An Introduction to the Bootstrap. Chapman and Hall/CRC.
Phillippo DM, et al. (2016). NICE DSU TSD 18.
Examples
data(nsclc_ipd); data(nsclc_agd)
w <- compute_weights(nsclc_ipd,
c(age = nsclc_agd$mean_age, ecog = nsclc_agd$prop_ecog1,
smoker = nsclc_agd$prop_smoker), c("age","ecog","smoker"))
res <- dr_maic(w, "response", "binary",
comparator_estimate = nsclc_agd$response_rate,
comparator_se = nsclc_agd$response_se)
boot_res <- bootstrap_ci(res, R = 500, seed = 42)
print(boot_res)
boot_res$boot_plot
Check Assumptions for DR-MAIC
Description
Runs a structured check of the key assumptions required for valid DR-MAIC inference, aligned with NICE DSU TSD 18 and Cochrane guidance.
Usage
check_assumptions(
maic_weights,
dr_maic_result = NULL,
ess_threshold = 30,
smd_threshold = 0.1
)
Arguments
maic_weights |
A |
dr_maic_result |
Optional |
ess_threshold |
Minimum acceptable ESS% threshold. Default 30. |
smd_threshold |
Maximum acceptable |SMD| after weighting. Default 0.1. |
Value
A data frame summarising assumption check results (invisibly). Prints a structured checklist to the console.
Compute MAIC Weights via Entropy Balancing
Description
Estimates matching-adjusted indirect comparison (MAIC) weights by solving the entropy balancing / exponential tilting problem. Weights are chosen so that the weighted moments of the IPD covariates match the aggregate data (AgD) target moments. The method follows the approach described in Signorovitch et al. (2010) and formalised by Phillippo et al. (2016) and NICE DSU TSD 18.
Usage
compute_weights(
ipd,
target_moments,
match_vars = NULL,
match_var_types = NULL,
optimizer = "BFGS",
maxit = 10000L,
verbose = TRUE
)
Arguments
ipd |
A data frame of individual patient data from the index trial.
Must contain the covariates listed in |
target_moments |
A named numeric vector or list of target aggregate
statistics (means, and optionally variances/proportions) from the comparator
study AgD. Names must match column names in |
match_vars |
Character vector of covariate names to match. If |
match_var_types |
Named character vector specifying the type of each
matching variable: |
optimizer |
Optimisation algorithm passed to |
maxit |
Maximum iterations for optimiser. Default 10000. |
verbose |
Logical; print convergence information. Default |
Details
Statistical method:
Given individual patient data (IPD) from study A (index trial) with covariates
X_i, i=1,\ldots,n and target aggregate statistics \bar{X}_{target}
from study B (comparator), MAIC weights are defined by exponential tilting:
w_i = \exp(X_i^\top \hat{\lambda})
where \hat{\lambda} solves the moment-matching equations:
\sum_{i=1}^n w_i X_i = n \bar{X}_{target}
Equivalently, \hat{\lambda} minimises the convex objective:
Q(\lambda) = \sum_{i=1}^n \exp(X_i^\top \lambda) - n \lambda^\top \bar{X}_{target}
Weights are returned in two forms: raw (unnormalized, sum to n_eff) and normalized (sum to 1). The normalized weights are used for estimation.
NICE alignment: The weight computation follows NICE DSU TSD 18 (Phillippo et al., 2016, 2020) guidance on MAIC for population-adjusted ITC.
Value
A list of class "maic_weights" containing:
weightsNumeric vector of normalized weights (sum to 1), length n.
weights_rawNumeric vector of unnormalized weights.
lambdaEstimated Lagrange multiplier vector
\hat{\lambda}.essEffective sample size.
ess_pctESS as percentage of original n.
n_originalOriginal sample size.
convergenceConvergence code from
stats::optim()(0 = success).balance_beforeSMD before weighting (named vector).
balance_afterSMD after weighting (named vector).
match_varsCharacter vector of matched variables.
target_momentsTarget moments used for matching.
ipdOriginal IPD data frame (stored for downstream functions).
References
Signorovitch JE, Wu EQ, Yu AP, et al. (2010). Comparative effectiveness without head-to-head trials: a method for matching-adjusted indirect comparisons applied to psoriasis treatment with adalimumab or etanercept. PharmacoEconomics, 28(10), 935-945.
Phillippo DM, Ades AE, Dias S, et al. (2016). Methods for population-adjusted indirect comparisons in submissions to NICE. NICE Decision Support Unit TSD 18.
Phillippo DM, Ades AE, Dias S, et al. (2020). Population adjustment methods for indirect comparisons: A review of national institute for health and care excellence technology appraisals. International Journal of Technology Assessment in Health Care, 36(5), 454-461.
Examples
# Load example NSCLC dataset
data(nsclc_ipd)
data(nsclc_agd)
# Target moments from AgD comparator trial
target <- c(
age = nsclc_agd$mean_age,
ecog = nsclc_agd$prop_ecog1,
smoker = nsclc_agd$prop_smoker
)
# Compute MAIC weights
w <- compute_weights(
ipd = nsclc_ipd,
target_moments = target,
match_vars = c("age", "ecog", "smoker")
)
print(w)
summary(w)
Doubly Robust MAIC Estimation
Description
Estimates a population-adjusted treatment effect using the doubly robust (augmented) MAIC estimator. This combines inverse probability weighting (MAIC) with outcome regression (parametric g-computation / STC) into a single estimator that is consistent if either the weight model or the outcome model is correctly specified.
Usage
dr_maic(
maic_weights,
outcome_var,
outcome_type = c("binary", "continuous", "tte"),
time_var = NULL,
comparator_estimate,
comparator_se = NULL,
effect_measure = NULL,
outcome_model_formula = NULL,
outcome_model_family = NULL,
additional_covariates = NULL,
alpha = 0.05
)
Arguments
maic_weights |
An object of class |
outcome_var |
Character string; name of the outcome column in the IPD. |
outcome_type |
Character string; type of outcome:
|
time_var |
Character string; for |
comparator_estimate |
Numeric; the outcome estimate from the comparator
(AgD) study B. For binary outcomes, a proportion; for TTE, a median survival
or log-HR depending on |
comparator_se |
Numeric; standard error of |
effect_measure |
Character string; scale for the treatment effect:
|
outcome_model_formula |
A formula for the outcome regression model.
If |
outcome_model_family |
GLM family for outcome model. Default |
additional_covariates |
Character vector of additional prognostic covariates to include in the outcome model (beyond matched variables). These improve efficiency but are not required for the DR property. |
alpha |
Significance level for confidence intervals. Default 0.05. |
Details
Statistical framework:
Let study A (index) provide IPD with outcome Y_i and covariates
X_i, and study B (comparator) provide AgD with outcome summary
statistic \hat{\theta}_B. MAIC weights \omega_i target the
covariate distribution of population B.
Three estimators are implemented:
(1) Standard MAIC (IPW):
\hat{\theta}_{MAIC} = \frac{\sum_i \omega_i Y_i}{\sum_i \omega_i}
(2) Standardised Treatment Comparison / g-computation (STC):
\hat{\theta}_{STC} = \frac{\sum_i \omega_i \hat{m}(X_i)}{\sum_i \omega_i}
where \hat{m}(X_i) = \hat{E}[Y \mid X_i] from an outcome regression
model fitted on the IPD.
(3) Doubly Robust / Augmented estimator (DR-MAIC):
\hat{\theta}_{DR} = \hat{\theta}_{STC} + \frac{\sum_i \omega_i (Y_i - \hat{m}(X_i))}{\sum_i \omega_i}
The DR estimator equals the MAIC estimator plus a bias-correction term
based on outcome model residuals, weighted towards population B. It is
consistent if either (i) the weights \omega_i correctly balance
covariates (outcome model may be misspecified), or (ii) the outcome model
\hat{m} is correctly specified (weights may be misspecified) —
the double robustness property (Lunceford and Davidian, 2004; Tan, 2010;
Remiro-Azocar, 2022).
The indirect treatment comparison is then:
\hat{\Delta} = \hat{\theta}_{DR,A} - \hat{\theta}_B
For binary outcomes the comparison can be on the risk difference, log-risk ratio, or log-odds ratio scale. For time-to-event outcomes, the log-hazard ratio is estimated via a weighted Cox model (or Weibull regression).
Alignment with guidelines:
NICE DSU TSD 18 (Phillippo et al., 2016; 2020)
Cochrane Handbook Chapter 23 (Dias et al.)
ISPOR Task Force on Indirect Treatment Comparisons
Remiro-Azócar et al. (2022) Statistics in Medicine
Value
A list of class "dr_maic" containing:
theta_maicMAIC (IPW) estimate in population B.
theta_stcSTC (g-computation) estimate in population B.
theta_drDoubly robust estimate in population B.
theta_comparatorComparator estimate (from AgD).
itc_maicIndirect treatment comparison (MAIC): A vs B effect.
itc_stcIndirect treatment comparison (STC): A vs B effect.
itc_drIndirect treatment comparison (DR): A vs B effect.
effect_measureEffect measure used.
outcome_modelFitted outcome model object.
residualsOutcome model residuals (Y_i - m_hat_i).
dr_correctionThe augmentation term (STC correction).
maic_weightsThe
maic_weightsobject used.nOriginal sample size.
essEffective sample size.
References
Remiro-Azócar A, Heath A, Baio G. (2022). Methods for population-adjusted indirect comparisons in health technology appraisal. Medical Decision Making, 42(3), 386-401.
Lunceford JK, Davidian M. (2004). Stratification and weighting via the propensity score in estimation of causal treatment effects. Statistics in Medicine, 23(19), 2937-2960.
Tan Z. (2010). Bounded, efficient and doubly robust estimation with inverse weighting. Biometrika, 97(3), 661-682.
Phillippo DM, Ades AE, Dias S, et al. (2016). NICE DSU Technical Support Document 18: Methods for population-adjusted indirect comparisons in submissions to NICE.
Examples
data(nsclc_ipd)
data(nsclc_agd)
# Step 1: Compute weights
w <- compute_weights(
ipd = nsclc_ipd,
target_moments = c(age = nsclc_agd$mean_age,
ecog = nsclc_agd$prop_ecog1,
smoker = nsclc_agd$prop_smoker),
match_vars = c("age", "ecog", "smoker")
)
# Step 2: DR-MAIC for binary outcome
res <- dr_maic(
maic_weights = w,
outcome_var = "response",
outcome_type = "binary",
comparator_estimate = nsclc_agd$response_rate,
comparator_se = nsclc_agd$response_se,
effect_measure = "OR"
)
print(res)
summary(res)
Covariate Balance Diagnostics for MAIC
Description
Produces covariate balance diagnostics following NICE DSU TSD 18 and Cochrane guidance. Includes: standardised mean differences (SMD) before and after weighting, Love plot, weight distribution visualisations, and effective sample size reporting.
Usage
maic_diagnostics(
maic_weights,
plot_type = "all",
threshold = 0.1,
title_suffix = NULL
)
Arguments
maic_weights |
An object of class |
plot_type |
Character vector specifying which plots to produce:
|
threshold |
Numeric; SMD threshold line on Love plot. Default 0.1 (standard threshold used by NICE and Austin and Stuart, 2015). |
title_suffix |
Optional character string appended to plot titles. |
Details
Standardised Mean Difference (SMD):
SMD_j = \frac{\bar{X}_{j,weighted} - \mu_{j,target}}{s_j}
where s_j is the unweighted standard deviation of covariate j in the
IPD (per NICE DSU TSD 18 recommendation). |SMD| < 0.1 indicates good balance.
Effective Sample Size (ESS):
ESS = \frac{(\sum_i w_i)^2}{\sum_i w_i^2}
ESS should be interpreted relative to the original n. ESS < 30% of n is a warning threshold per NICE guidance.
Value
A list of class "maic_diagnostics" containing:
balance_tableData frame with SMD before/after weighting.
essEffective sample size.
ess_pctESS as % of original n.
n_balancedNumber of variables with |SMD| < threshold after weighting.
love_plotggplot2 Love plot object.
weight_plotggplot2 weight distribution plot.
all_balancedLogical; TRUE if all |SMD| < threshold after weighting.
References
Austin PC, Stuart EA. (2015). Moving towards best practice when using inverse probability of treatment weighting (IPTW) using the propensity score to estimate causal treatment effects in observational studies. Statistics in Medicine, 34(28), 3661-3679.
Phillippo DM, Ades AE, Dias S, et al. (2016). NICE DSU TSD 18.
Examples
data(nsclc_ipd)
data(nsclc_agd)
w <- compute_weights(
ipd = nsclc_ipd,
target_moments = c(age = nsclc_agd$mean_age,
ecog = nsclc_agd$prop_ecog1,
smoker = nsclc_agd$prop_smoker),
match_vars = c("age", "ecog", "smoker")
)
diag <- maic_diagnostics(w)
print(diag)
diag$love_plot
diag$weight_plot
Generate NICE/HTA Submission-Ready Report
Description
Produces a structured, submission-ready report of the DR-MAIC analysis aligned with NICE DSU TSD 18, Cochrane Handbook Chapter 23, and ISPOR best practice guidance for population-adjusted indirect treatment comparisons.
Usage
nice_report(
dr_maic_result,
bootstrap_result = NULL,
sensitivity_result = NULL,
study_a_name = "Study A",
study_b_name = "Study B",
indication = "",
treatment_a = "Treatment A",
treatment_b = "Treatment B",
submission_date = format(Sys.Date(), "%d %B %Y"),
output_format = "console"
)
Arguments
dr_maic_result |
An object of class |
bootstrap_result |
Optional object of class |
sensitivity_result |
Optional object of class |
study_a_name |
Character; name of the index trial (Study A). Default |
study_b_name |
Character; name of the comparator trial (Study B). Default |
indication |
Character; disease indication. Default |
treatment_a |
Character; treatment in index trial. |
treatment_b |
Character; treatment in comparator trial. |
submission_date |
Character; date of submission. Default: today's date. |
output_format |
Character; |
Details
The report includes the following sections:
-
Study and population characteristics - IPD summary and AgD target moments
-
Weight estimation - ESS, convergence, moment-matching results
-
Covariate balance - SMD table (NICE TSD 18 format)
-
Treatment effect estimates - MAIC, STC, and DR-MAIC ITCs
-
Uncertainty - Bootstrap CIs (if provided)
-
Sensitivity analysis - E-values and trimming (if provided)
-
Assumptions and limitations - per NICE and Cochrane guidance
-
Methods description - citable methods paragraph
Value
A list of class "nice_report" (invisibly) containing all
formatted sections. Also prints to console.
References
Phillippo DM, Ades AE, Dias S, et al. (2016). NICE DSU TSD 18.
Dias S, Sutton AJ, Ades AE, Welton NJ. (2013). A generalised linear modelling framework for pairwise and network meta-analysis of randomised controlled trials. Statistics in Medicine, 32(13), 2312-2330.
Higgins JPT, et al. (2023). Cochrane Handbook for Systematic Reviews of Interventions, Version 6.4. Chapter 23.
ISPOR Task Force. (2014). Indirect treatment comparison/network meta-analysis study questionnaire to assess relevance and credibility. Value in Health.
Examples
data(nsclc_ipd); data(nsclc_agd)
w <- compute_weights(nsclc_ipd,
c(age = nsclc_agd$mean_age, ecog = nsclc_agd$prop_ecog1,
smoker = nsclc_agd$prop_smoker), c("age","ecog","smoker"))
res <- dr_maic(w, "response", "binary",
comparator_estimate = nsclc_agd$response_rate,
comparator_se = nsclc_agd$response_se)
nice_report(res,
study_a_name = "KEYNOTE-024",
study_b_name = "IMpower150",
indication = "Advanced NSCLC",
treatment_a = "Pembrolizumab",
treatment_b = "Atezolizumab + Bevacizumab + Chemo")
Simulated NSCLC Aggregate Data (Study B — Comparator)
Description
Simulated aggregate data (AgD) representing published summary statistics from a hypothetical comparator trial in advanced NSCLC.
Usage
nsclc_agd
Format
A list with the following elements:
- mean_age
Mean age of trial population.
- prop_ecog1
Proportion with ECOG 1/2.
- prop_smoker
Proportion with smoking history.
- prop_pdl1_high
Proportion with PD-L1 >=50%.
- prop_prior_lines
Proportion with >= 1 prior line.
- response_rate
Observed response rate (proportion).
- response_se
Standard error of response rate.
- n_agd
Sample size of comparator trial.
- os_median
Median OS in months.
- os_hr_ref
Log-HR (vs common reference arm, if available).
Source
Simulated data. Not based on any real trial. For illustration only.
Examples
data(nsclc_agd)
str(nsclc_agd)
Simulated NSCLC Individual Patient Data (Study A)
Description
A simulated individual patient dataset (IPD) representing a hypothetical single-arm trial of an immunotherapy agent in advanced non-small cell lung cancer (NSCLC). Created for demonstration of the drMAIC package.
Usage
nsclc_ipd
Format
A data frame with 200 rows and 8 variables:
- patient_id
Patient identifier.
- age
Age in years (continuous).
- ecog
ECOG performance status (binary: 0 = ECOG 0, 1 = ECOG 1/2).
- smoker
Smoking history (binary: 1 = ever-smoker, 0 = never-smoker).
- pdl1_high
PD-L1 expression >=50% (binary: 1 = high, 0 = low/negative).
- prior_lines
Number of prior lines of therapy (0 or 1).
- response
Objective response (binary: 1 = responder, 0 = non-responder).
- os_time
Overall survival time in months (censored).
- os_event
Overall survival event indicator (1 = death, 0 = censored).
Source
Simulated data. Not based on any real trial. For illustration only.
Examples
data(nsclc_ipd)
head(nsclc_ipd)
summary(nsclc_ipd)
Sensitivity Analysis for DR-MAIC
Description
Conducts pre-specified sensitivity analyses for the DR-MAIC indirect treatment comparison, including: (1) E-value analysis for unmeasured confounding; (2) weight trimming sensitivity; (3) variable exclusion (leave-one-out) analysis; and (4) outcome model specification sensitivity.
Usage
sensitivity_analysis(
dr_maic_result,
trim_percentiles = c(0.9, 0.95, 0.99),
lovo = TRUE,
outcome_model_specs = NULL,
alpha = 0.05
)
Arguments
dr_maic_result |
An object of class |
trim_percentiles |
Numeric vector of weight trimming percentiles (0-1).
Default |
lovo |
Logical; run leave-one-variable-out analysis. Default |
outcome_model_specs |
Optional list of alternative outcome model formulas for specification sensitivity. |
alpha |
Significance level. Default 0.05. |
Details
E-value analysis: The E-value quantifies the minimum strength of unmeasured confounding required to explain away the observed treatment effect (VanderWeele & Ding, 2017). For an observed risk ratio RR:
E\text{-value} = RR + \sqrt{RR(RR - 1)}
For OR, the converted RR = OR^{0.5} is used (when outcome is not rare).
A large E-value indicates the result is robust to unmeasured confounding.
Weight trimming sensitivity: Extreme weights are trimmed at specified percentiles, and the effect estimate is recomputed. This assesses the influence of patients with extreme weights on the ITC.
Leave-one-variable-out (LOVO): Each matched variable is excluded in turn, and the full DR-MAIC analysis is re-run. This assesses which variables most influence the estimate.
Assumptions tested (per NICE DSU TSD 18 and Cochrane guidance):
Transportability: the matched population is exchangeable with target B
No unmeasured effect modifiers: E-value addresses this
Positivity: overlap between IPD and target assessed via weight distribution
SUTVA: assumed throughout
Value
A list of class "maic_sensitivity" containing:
evalueE-value for the main DR-MAIC estimate.
evalue_ciE-value for the confidence interval boundary.
trim_resultsData frame of trimming sensitivity results.
lovo_resultsData frame of leave-one-variable-out results.
evalue_plotggplot2 E-value plot.
trim_plotggplot2 trimming sensitivity plot.
lovo_plotggplot2 LOVO plot.
References
VanderWeele TJ, Ding P. (2017). Sensitivity analysis in observational research: introducing the E-value. Annals of Internal Medicine, 167(4), 268-274.
Phillippo DM, et al. (2016). NICE DSU TSD 18.
Cochrane Handbook, Chapter 23: Including variants on randomized trials.
Examples
data(nsclc_ipd)
data(nsclc_agd)
w <- compute_weights(nsclc_ipd,
c(age = nsclc_agd$mean_age, ecog = nsclc_agd$prop_ecog1,
smoker = nsclc_agd$prop_smoker),
c("age","ecog","smoker"))
res <- dr_maic(w, "response", "binary",
comparator_estimate = nsclc_agd$response_rate,
comparator_se = nsclc_agd$response_se)
sa <- sensitivity_analysis(res)
sa$evalue
sa$trim_plot