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.