Anchored MAIC generalized to a (possibly disconnected) component
network. Each IPD study is reweighted with maicplus::estimate_weights()
so that its effect-modifier distribution matches a common target
population; the resulting population-adjusted within-study contrasts
(with bootstrap standard errors that propagate the weighting
uncertainty) then replace the corresponding unadjusted aggregate
contrasts. Finally cnma_bridge() combines all contrasts through the
additive component model, yielding relative effects that are both
connected across sub-networks and adjusted to the target population.
Usage
cmaic(
network,
target,
effect_modifiers = NULL,
target_sd = NULL,
n_boot = 500,
seed = NULL,
common = FALSE,
random = TRUE
)Arguments
- network
A
cpaic_network()object that includes IPD.- target
Named numeric vector (or one-row data frame / list) giving the target-population means of the effect modifiers.
- effect_modifiers
Character vector of covariates to match on (defaults to all IPD covariates). Matching only on effect modifiers is the anchored-MAIC convention.
- target_sd
Optional named numeric vector of target standard deviations; when supplied, second moments are matched as well.
- n_boot
Number of bootstrap resamples for the adjusted-contrast standard errors. Default
500.- seed
Optional RNG seed for reproducible bootstrap.
- common, random
Passed to
cnma_bridge().
Value
An object of class cpaic_maic (also inheriting cpaic_bridge
structure via $bridge), with the bridged fit, per-study effective
sample sizes, and the target population.
What the two-stage bridge does and does not adjust
Only the edges carrying individual patient data are population-adjusted to the
target. Every aggregate-only edge keeps its published, study-population
contrast, and the additive bridge then combines all edges as if they estimated
the same component effects. Under effect modification they do not: an aggregate
edge estimates its contrast in its own trial population, while the reweighted
IPD edge estimates it at the target. The two agree only when the aggregate
populations resemble the target, or when the components on those edges are not
effect-modified. Treat a cross-network contrast that leans on aggregate-only
edges as adjusted for the IPD part alone, and prefer cmlnmr(), which carries
the component by effect-modifier interactions through the whole network and so
adjusts every edge to the same target population coherently.
Non-collapsibility and the additive model
cMAIC returns a marginal effect in the target population, and the additive
component model assumes effects add. On a non-collapsible scale (the odds
ratio, the hazard ratio) marginal effects do not add, even when every
conditional effect does. In one simulated target population the marginal
log-odds ratios satisfied
marginal(A) + marginal(B) = 0.6615 while marginal(A+B) = 0.6411; the
additive model is simply false on that scale. cMAIC therefore carries a small
irreducible bias (about +0.02 log-OR there) that survives perfect matching
and infinite sample size. It is small relative to a typical standard error
(about 0.25) but it does not vanish with more data.
Marginal component effects are not generally additive; they add exactly when
the standardized treatment effects remain affine in the component design.
Additivity is therefore a property of the conditional link scale that the
marginal scale inherits only approximately, and the error does not vanish with
sample size. Where it is material, cstc() or cmlnmr(), which target a
conditional effect and inherit additivity exactly, are preferable. Note also
that the two-stage route combines a conditional adjusted edge with aggregate
edges reported on a marginal scale, so it should be regarded as approximate. See
documentation/validation/VALIDATION.md.
Examples
net <- cpaic_network(cpaic_bin_agd, ipd = cpaic_bin_ipd, sm = "OR",
family = "binomial", ipd_covariates = "x1",
inactive = "Placebo")
# \donttest{
fit <- cmaic(net, target = c(x1 = 0), effect_modifiers = "x1",
n_boot = 100, seed = 1)
relative_effects(fit)
#> Relative effects (OR, back-transformed)
#> treatment comparator estimate se lower upper z p
#> A Placebo 1.649 0.401 0.752 3.615 1.248 0.212
#> A+B Placebo 2.460 0.567 0.810 7.466 1.589 0.112
#> A+B+C Placebo 4.941 0.672 1.323 18.448 2.377 0.017
#> A+B+D Placebo 5.324 0.666 1.443 19.647 2.510 0.012
#> B Placebo 1.492 0.401 0.680 3.271 0.999 0.318
effective_sample_size(fit)
#> S3 S4
#> 207.4202 358.1461
# }