Explicit Model Specifications: The package
architecture has been fundamentally updated to explicitly separate
outcome prediction from population weighting. The formula
argument across all strategy_*() functions now accepts a
list containing outcome_model and
balance_model. This conceptual split makes the statistical
intent of methods like MAIC much clearer (i.e., defining exactly which
covariates to balance vs. which to regress on) and future-proofs the
package for upcoming doubly-robust methods that require both models
simultaneously.
# New recommended approach
strategy_maic(
formula = list(
outcome_model = y ~ trt,
balance_model = ~ age + sex
)
)
# Legacy approach (still supported)
strategy_maic(formula = y ~ trt + age + sex)To support this new architecture, strategy_maic()
introduces intelligent defaults for missing formula components:
If a traditional single formula is passed (legacy support), it
automatically infers the balance_model by stripping the
response and treatment variables.
If balance_model is omitted from a list, it acts as
a delayed function defaulting to a linear sum of all covariates found in
the aggregate-level data (ALD).
If outcome_model is omitted, it gracefully defaults
to y ~ trt.
outstandR() gains a new verbose
argument (defaulting to TRUE), allowing users to silence
console output during simulations or repetitive tasks. It also
introduces proactive warnings for computationally expensive operations
(e.g., very high n_boot for MAIC, or large \(N \times R\) for ML G-computation) to
prevent users from thinking the session has hung.
MAIC weight estimation can now balance covariate variances and covariances, reducing residual confounding from mismatched distributions.
Added the moments argument to strategy definition
functions and calc_maic(). Setting moments = 2
automatically expands the balancing formula to include squared
terms.
Added the int argument to strategy definition
functions and calc_maic(). Setting int = TRUE
automatically expands the balancing formula to include all two-way
interactions between covariates.
Automatic variance target calculation when
moments = 2, the maic.boot() function now
automatically calculates the required aggregate target for squared terms
(\(E[X^2]\)) internally using the base
variable’s mean and sd provided in the
ALD.
Fixed a critical bug in strategy_mim() and
strategy_gcomp_bayes() where covariate uncertainty was not
being fully propagated due to incorrect looping over predicted
samples.
Significantly improved the performance of the MAIC method by
refactoring maic.boot() to pre-calculate balance and
outcome matrices, reducing redundant computations during bootstrap
iterations.
guess_treatment_name() (used under the hood by all
strategies when trt_var is NULL) is now
smarter. It correctly identifies the treatment variable by checking for
duplicated variables in interaction terms, or by falling back to the
last main effect term.
check_balance_formula() has been added to provide
strict validation for balance models. It ensures the formula is
one-sided (no response variable) and throws an informative warning if
the treatment variable is mistakenly included.
check_formula() now explicitly intercepts
Surv objects in outcome models. It throws a clear,
informative error stating that survival data support is officially
scheduled for a later version.
Improved reproducibility and side-effect management by switching
to withr::local_seed() for local random seed
handling.
Updated the print.outstandR() method to handle
delayed balance model functions, providing clearer output for
auto-generated models.
Standardized strategy naming: strategy_gcomp_stan()
is now strategy_gcomp_bayes() to more accurately reflect
the underlying statistical approach.
strategy_stc() is now deprecated and will be removed in
a future release. Simulated Treatment Comparison (STC) is being phased
out in favor of G-computation approaches (e.g.,
strategy_gcomp_ml()), which offer better statistical
properties for population adjustment.outstandR 1.0.0 marks a major milestone, transforming
the original code from the Remiro-Azocar study into a generalized,
user-friendly R package.
The aggregate-level data (ALD) input has been redesigned to use a standard long format, replacing the legacy format used in the original study.
Treatment labels and covariate names are no longer hard-coded.
outstandR now dynamically extracts treatment arms (e.g.,
rather than “A”, “B”, “C”) and general covariates directly from your
input data (5119596).
Covariate generation functions have been separated and moved into
their own standalone package, simcovariates.
The family argument in outstandR() has
been expanded to support binary (binomial), continuous
(gaussian), and count data (poisson).
Input data can now contain any combination of binary and continuous covariates, specifically upgraded for MAIC (4fb1e21).
simulate_ALD_pseudo_pop() now accepts user-provided
marginal arguments for a target distribution. These can be defined
optionally via marginal_distns and
marginal_params in strategy_gcomp_ml() and
strategy_gcomp_bayes().
Users can now explicitly select the outcome scale (e.g.,
log-odds, risk difference, relative risk) using the new
scale argument in outstandR().
Added support for optional correlation structures in ALD simulations (d48d0ab).
The main outstandR() function now returns absolute
values in addition to treatment contrasts (2f1fbd7).
Added a dedicated print() method for
outstandR objects to cleanly display analysis results
(983cb2f).
Comprehensive, separate vignettes demonstrating workflows for binary, continuous, and count outcome data (fc10a68).
A complete package documentation website has been built using
pkgdown and is now available via GitHub Pages
(4df16f2).