ranger num.threads = 1, xgboost
nthread = 1), in line with CRAN’s at-most-2-cores policy;
raise via control for real analyses (fixes the CRAN
incoming pre-test NOTE “Re-building vignettes had CPU time 7.7 times
elapsed time”). Selection results are unchanged.Initial release, implementing Kabata, Stuart & Shintani (2024), BMC Medical Research Methodology 24:228, doi:10.1186/s12874-024-02350-y.
psave(): model-averaged propensity scores as a convex
combination of candidate models ("glm",
"rpart", "ranger", "xgboost" by
default; any "SL.*" SuperLearner wrapper; or user-supplied
ps.matrix/prog.matrix), with mixing weights
selected on a simplex grid.ps.append / prog.append: extra
user-supplied candidate score columns (a vector of length n, or a
matrix/all-numeric data frame with unique column names) appended AFTER
the candidates from ps.methods/ps.matrix and
prog.methods/prog.matrix. Appended propensity
columns are validated (strictly in (0, 1)) and clipped like every other
candidate; grid tie-breaking favors the base candidates. Supplying
prog.matrix or prog.append without
outcome is an explicit error (prognostic candidates require
the outcome; gamma is selected by outcome-prediction MSE among untreated
units)."prog"
(weighted ASMD of the model-averaged prognostic score, the recommended
default; per-candidate targets via prog.target),
"smd", "ks", and "logloss".
Estimands: ATT (default) and ATE, with the supplement’s
estimand-specific weight formulas.gamma selected by
unweighted untreated-set MSE. gaussian() and
binomial() outcome families.average = FALSE vertex mode selects the single best
candidate propensity score by the chosen criterion.fit$ps drops into
MatchIt::matchit(distance = ) and
WeightIt::weightit(ps = ); psave_match() /
psave_weight() wrappers reuse the stored formula and data
to eliminate row-misalignment; cobalt::bal.tab() works
directly on psave objects.print() (with the literal next call),
summary() (mixing weights, all-criteria diagnostics table,
full balance table), plot() ("balance",
"distribution", "criterion"),
fitted(), weights(), predict()
(with keep.fits = TRUE).simplex_grid() (integer-composition
simplex enumeration defining the tie-breaking order) and
psave_criteria() (all four criteria for any propensity
score vector).rowSums == 1 filter silently dropped ~10.6% of grid
points); proper weighted-eCDF KS statistic; binomial()
family for binary responses; no train/test-inconsistent
scale(); strict complete-case handling (NAs
error, never dropped). See
vignette("method-details", package = "psAve").survey::svyglm()), and Method details.