The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
Model-averaged propensity scores selected by prognostic-score balance.
psAve implements the propensity score model averaging
method of Kabata, Stuart & Shintani (2024, BMC Medical Research
Methodology). Instead of committing to a single propensity score
model, psave() fits several candidate models (logistic
regression, CART, random forest, gradient boosting, or any
SuperLearner wrapper), and combines them as a convex
mixture whose weights are chosen on a simplex grid to optimize balance
on the prognostic score — the predicted outcome under
the untreated condition, estimated from untreated units only (Hansen
2008). Because the prognostic score summarizes the covariates as
they relate to the outcome, balancing it targets exactly the
covariate directions that drive bias in the treatment effect; in the
paper’s simulations this “Prog (Ave)” strategy achieved the lowest and
most robust bias and RMSE across 16 scenarios. Covariate-balance (SMD,
KS) and prediction-accuracy (log loss) criteria from the paper are also
available.
psAve is a companion to the MatchIt/WeightIt/cobalt ecosystem, not a
replacement for any part of it. The deliverable is a plain numeric
vector of propensity scores, handed to MatchIt::matchit()
as a distance measure or to WeightIt::weightit() as a
propensity score (thin psave_match() /
psave_weight() wrappers do this without retyping the
formula); balance assessment — including prognostic-score balance —
works out of the box via cobalt::bal.tab(); effect
estimation stays where it belongs, in
MatchIt/WeightIt/survey/marginaleffects.
Estimands: ATT (default) and ATE.
# install.packages("remotes")
remotes::install_github("kabajiro/psAve")library(psAve)
data("lalonde", package = "MatchIt")
set.seed(1234)
fit <- psave(treat ~ age + educ + race + married + nodegree + re74 + re75,
data = lalonde, outcome = ~ re78) # defaults: criterion = "prog", ATT
m <- psave_match(fit, method = "nearest") # a genuine matchit object
cobalt::bal.tab(m, distance = data.frame(prog = fit$prog))lalonde matching workflow, interpreting
output, and why using the outcome in the design stage does not bias the
analysis.survey::svyglm() estimator.If you use psAve, please cite the paper:
Kabata, D., Stuart, E. A., & Shintani, A. (2024). Prognostic score-based model averaging approach for propensity score estimation. BMC Medical Research Methodology, 24, 228. doi:10.1186/s12874-024-02350-y
@article{kabata2024prognostic,
author = {Kabata, Daijiro and Stuart, Elizabeth A. and Shintani, Ayumi},
title = {Prognostic score-based model averaging approach for propensity score estimation},
journal = {BMC Medical Research Methodology},
year = {2024},
volume = {24},
pages = {228},
doi = {10.1186/s12874-024-02350-y}
}GPL (>= 2)
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.