Rosenman 2020 - Simulation Results

Summary

In a simulation with observational and RCT units, or strata, and strong unmeasured confounding, every shrinkage estimator beats the RCT-only estimate. Without bias adjustment the gain is small (about 1% risk reduction for , 5% for ) because is very biased; with stabilised IPW the gain is about 25% () and 40% (), close to the oracle at . Common-shrinkage estimators usually beat component-wise ones; Green-Strawderman’s is slightly more robust when covariate distributions differ.

Overview

The paper reports only percent risk-reduction plots (Figs. 1-4), not tables, so the numbers below are the textual claims.

Main Content

Design (Sec. 6.1; patterned on Rosenman et al. 2018)

  • , sampled with unit variances and off-diagonals 0 (prob. 1/2) or (prob. 1/4 each), roughly matching the Women’s Health Initiative covariance structure. .
  • Unmeasured covariate , (correlated with measured covariates).
  • Control outcome , , .
  • Treatment effect varies only with the second covariate . Strata from quantiles of its normal distribution: (“few strata”) and (“many”), equal-size or variable-size (first half of strata have about of the units each, second half ) to make homoscedastic vs heteroscedastic. Stratum effects , rescaled so Cohen’s in the observational study (“weak” effect).
  • 25 covariate/potential-outcome draws 20 treatment draws = 500 simulations.
  • Observational treatment: with (high selection bias; because depends on IPW cannot remove it). RCT: half of each stratum randomly treated.
  • Estimators: ; Green-Strawderman ; an oracle convex combination with true . Metric: percent risk reduction vs , risk estimated as average loss with .

Results

ConditionObservational estimatorTypical risk reduction vs Notes
Same covariate distributions (Fig. 1)unadjustedabout 1% (), 5% () (), () the risk of ; about half the oracle’s gain for few strata; winners: (6 strata, similar size), (6 strata, variable), (20, similar), (20, variable); lags
Same distributions (Fig. 2)SIPWabout 25% (), 40% ()‘s risk is only about 40% above ‘s () and almost identical (); estimators near oracle at ; best for 6 strata/similar size, best for 20/similar, best in the variable-size cases
Different covariate means in (obs. mean vector drawn ) (Fig. 3)unadjustedall degrade vs oracleGreen-Strawderman do better: best in first three conditions, best in 20-strata variable-size
Different covariate means (Fig. 4)SIPWsimilar to Fig. 2 pattern modestly ahead of in every condition

General findings: all proposed estimators beat the RCT-only estimator under every tested condition and also beat the observational-only estimator in risk; estimators with a single shrinkage factor (“1” subscript) tend to outperform component-wise ones; more strata gets closer to the oracle (the asymptotics in ).

Conclusion and extensions (Sec. 7)

Summary: a procedure to derive shrinkage estimators from a URE; two estimators and their corrected versions with testable finite- conditions and asymptotic optimality; sensitivity link via Zhao et al. Extensions suggested: other shrinkage structures (the procedure is general); use auxiliary information to guess which strata are most biased and shrink less there; a thresholding rule that uses alone when it differs from by more than ; weaken the assumptions (well-defined shared strata, equal effects within strata), guidance on choosing strata (many accurate subgroups vs few stable ones; minimum four strata, more if heteroscedastic or weights differ), and robustness measures to violations of Assumption 2.

Examples

# Re-run a miniature version of the simulation logic: oracle vs kappa_1+ vs RCT-only (diagonal case)
import numpy as np
rng = np.random.default_rng(1)
def run(K=20, bias_sd=0.1, sr=0.2, so=0.02, reps=3000):
    out = np.zeros((reps, 4))
    for r in range(reps):
        tau = rng.uniform(0, 1, K); xi = rng.normal(0, bias_sd, K)
        tr = tau + rng.normal(0, sr, K); to = tau + xi + rng.normal(0, so, K)
        lam = min(sr**2 / max(((to - tr)**2).mean(), 1e-12), 1.0)
        k1 = tr - lam*(tr - to)
        lam_or = sr**2 / (sr**2 + so**2 + (xi**2).mean()); orc = tr - lam_or*(tr - to)
        out[r] = [((tr-tau)**2).mean(), ((to-tau)**2).mean(), ((k1-tau)**2).mean(), ((orc-tau)**2).mean()]
    return out.mean(0)      # RCT, OBS, kappa_1+, oracle
print(run())

Output of this miniature (, bias SD 0.1, 3,000 reps; mean squared error per stratum): RCT-only 0.0399, observational-only 0.0105, 0.0100, oracle 0.0082. The data-driven weight recovers most of the oracle’s gain without knowing .

Connections

See Also

Rosenman 2020 - Combining Observational and Experimental Datasets - Overview