oalasso 1.0.0
Initial release, implementing the outcome-adaptive lasso of Shortreed & Ertefaie (2017), Biometrics 73(4):1111–1122, doi:10.1111/biom.12679, and the generalized outcome-adaptive lasso (GOAL) of Baldé, Yang & Lefebvre (2023), Biometrics 79(1):514–520, doi:10.1111/biom.13683.
-
oal(): outcome-adaptive lasso propensity scores. Adaptive penalty weights|b_j|^-gammafrom an unpenalized outcome modelY ~ A + Xon the full sample (gaussian()validated;binomial()allowed with a one-time warning, GLM theory per Baldé 2025, doi:10.1016/j.spl.2025.110379); tuning over Shortreed & Ertefaie’s exponent gridlambda_n = n^deltawith the paired penalty exponentgamma = 2*(gamma.factor - delta + 1); selection by the weighted absolute mean difference (wAMD) with|b_j|weights, ATE (default) or ATT weighting; ties take the first minimum in documented grid order. - Exact reproduction of the published objective on
glmnet: every grid point is evaluated ats = mean(pen) * lambda_n / nwithcoef(..., exact = TRUE), undoing glmnet’s internal sum-to-nvars penalty-factor rescaling and its per-observation loss scale (the rejoinder recipe of Jones, Ertefaie & Shortreed 2023, doi:10.1111/biom.13681). The KKT conditions of the target objective are the acceptance criterion in the test suite, with a drift guard against the installed glmnet version. -
method = "goal": Baldé’s elastic-net generalization via the Zou–Hastie data augmentation with the(1 + lambda2)rescale of ALL coefficients including the intercept (Baldé 2025 supplement:expit(cbind(1, X) %*% (1 + lambda2) * coef)); on augmented grid points (lambda2 > 0) the raw penalty constant is(n + q)^deltawithq = paugmentation rows, matching the author’sadaptive.lasso(lambda = n.q^(il))withn.q = n + q.lambda2is selected jointly with(delta, gamma)by the wAMD — the flat first-minimum, equivalent to Baldé’s nested per-lambda2-then-over-lambda2rule — andlambda2 = 0exactly nests plain OAL (no augmentation on that code path). The defaultlambda2gridc(0, 10^c(-2, -1.5, -1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 1))is the author’s published grid (Baldé 2025 supplement, “taken from Zou and Hastie (2005)”), verified against the official GOAL code on 2026-07-02. - Baldé’s reference code runs UNCLIPPED IPW weights; the default
clip = c(0.01, 0.99)is a Shortreed–Ertefaie-lineage safety choice, andclip = c(1e-12, 1 - 1e-12)effectively disables clipping to reproduce the reference behavior. - Fixed standardization protocol: covariates are standardized once (training statistics, all columns including dummies); the outcome model and glmnet fit on the same matrix with
standardize = FALSE; coefficients returned on both scales. - Options with provenance labels printed on every fit:
refit = TRUE(post-selection unpenalized refit, Schnitzer et al. 2025, doi:10.1002/sim.70316, adapted from a longitudinal setting; convergence recorded per grid point), scalargamma(Schnitzer-style fixed exponent crossed with the delta grid), and theoutcome.coefhook (user-supplied weights on the standardized scale — screening use only; zeros become hard exclusions via glmnet’s Inf-to-exclude). - Ecosystem integration:
fit$ps(numeric, named byrownames(data), clipped toclip = c(0.01, 0.99)) drops intoMatchIt::matchit(distance = ),WeightIt::weightit(ps = ), andpsAve::psave(ps.append = );oal_match()/oal_weight()wrappers reuse the stored formula and data;cobalt::bal.tab()works onoalobjects. - Full S3 suite:
print()(provenance line first; retained vs excluded covariates with the instrument-exclusion rationale of Brookhart et al. 2006 and Myers et al. 2011; the literal next call; near-positivity diagnostic when > 5% of scores sit at a clip bound),summary(),plot()("wamd","coef","balance"),coef()(both scales),predict()(works withoutkeep.fits),weights(). - Exported criterion:
oal_wamd()scores any candidate propensity score on the exact S&E wAMD formula (single source of truth; never delegated to cobalt). - Policies: any
NAin used variables is an error naming the variables (never a silent drop); zero-variance and aliased/rank-deficient covariates error; fully deterministic pipeline (no seed argument); English-only messages. - Documented divergences from the author’s legacy
fAL/fOALcode (which is superseded, not reproduced): thefALgamma transcription bug, thevarlistwAMD bug, global-nscoping, per-subsetscale(), and the archivedlqadependency. Seevignette("method-details", package = "oalasso"). - Three vignettes: Getting Started (matching and weighting workflows, reading the output), Using oalasso with psAve (the
ps.appendcomposition and its caveats), and Method details and provenance (all formulas, the exact penalty-scale correction, provenance table, relation to other software, honest nonlinear-extension notes).
