Reproducible Pediatric ICU Mortality Benchmark on PIC v1.1.0 — calibration-first, decision-curve-evaluated, Bayesian regularized-horseshoe with patient-level uncertainty.
picMort is the methodological substrate for a single published paper
on the open-access Pediatric Intensive Care (PIC) v1.1.0 database
from Tongji Hospital, Shanghai (released 2020 via PhysioNet; Zeng et
al., Scientific Data 2020). The package freezes a single cohort
specification, exposes a leakage-audited T+24 h feature panel,
reconstructs PIM3 with documented proxies for inputs PIC does not
expose, and ships a calibration-first evaluation suite that puts
integrated calibration index and decision-curve net benefit alongside
the conventional discrimination metrics.
The package is at v0.1.1, an experimental public release. The companion paper is in near-submission state for Pediatric Critical Care Medicine; the methodology is reflected here but not yet peer-reviewed. Public APIs are marked experimental until the paper has cleared review.
A clinical-prediction model with strong AUROC but poor calibration
can produce negative net benefit at decision thresholds — i.e., it
is actively worse than treating no patient. The recent methodological
consensus (Van Calster et al., BMC Medicine 2019; Vickers et al.,
BMJ 2016; Collins et al., TRIPOD+AI, BMJ 2024) is that
discrimination alone is not enough to clear a model for clinical
translation. picMort is built around that consensus: every model
fit returns a calibration suite and a decision-curve grid by default,
and the Bayesian regularized-horseshoe fit (Carvalho et al.,
Biometrika 2010; Piironen & Vehtari, Electron. J. Stat. 2017)
delivers per-patient 95% credible intervals natively from the
posterior.
This source archive ships alongside the calibration-first manuscript as Supplementary File S2. Install it locally with:
install.packages("picMort_0.1.1.tar.gz",
repos = NULL, type = "source")CRAN submission is deferred to a cohort-agnostic successor release.
Latest development cut from GitHub:
# install.packages("remotes")
remotes::install_github("max578/picMort")Required dependencies are listed in DESCRIPTION under Imports:
(notably data.table, glmnet, xgboost, recipes, rsample,
ggplot2). brms, rstan, dcurves, yardstick, probably,
and the targets stack are in Suggests: and loaded only when the
relevant entry points are called. R >= 4.2 is required.
The PIC v1.1.0 database is open-access via PhysioNet under a
registered data-use agreement at
https://physionet.org/content/picdb/1.1.0/. After credentialing,
mount the CSVs at a stable path and point picMort at that directory
via the PICMORT_DATA_DIR environment variable. The development-tree
fallback is a data_links/pic_v110/ symlink (see ?pic_paths).
Patient data must not be redistributed with this package and is not
included.
library(picMort)
# resolve the PIC v1.1.0 CSV paths; errors clearly if any are missing
paths <- pic_paths()
# assemble the frozen cohort (first ICU stay per patient,
# age 0-18 y, ICU LOS >= 24 h)
cohort <- build_cohort(paths)
# extract T+24h feature panel + missingness indicators;
# the function asserts a feature-matrix / dictionary alignment
# invariant and runs the leakage audit before returning.
feat <- build_features(cohort, paths, window_hours = 24)
# 70/30 stratified train/test split
split <- make_train_test_split(feat, prop = 0.7)
# Bayesian regularized-horseshoe (production: 4 chains x 2000 iter)
fit <- fit_bayes_horseshoe(feat, split$train_idx, chains = 4, iter = 2000,
adapt_delta = 0.99)
# headline metrics on the held-out fold
x_test <- feat$x[split$test_idx, ]
y_test <- feat$y[split$test_idx]
preds <- predict_mortality(fit, x_test)
calibration_suite(preds$prob_raw, y_test, seed = 2026)
decision_curve(list(bayes_horseshoe = preds$prob_raw), y_test,
thresholds = c(0.05, 0.10, 0.20))
discrimination_metrics(list(bayes_horseshoe = preds$prob_raw), y_test,
seed = 2026)Worked examples live in the vignettes:
vignette("cohort_spec", package = "picMort")— the cohort contract.vignette("paper1_baseline", package = "picMort")— the calibration-first comparison of four models, reproducing the manuscript's main analysis end to end.
Until the companion paper is accepted, please cite the package itself:
citation("picMort")The package ships a formal inst/CITATION; the placeholder for the
eventual paper DOI is filled when the manuscript is accepted.
set.seed()is plumbed through the evaluation entry points (calibration_suite(),discrimination_metrics(), …); defaults are documented per-function._targets.Rdrives the end-to-end pipeline;renv.lockis still planned for the next infrastructure pass.- Pure-math units are covered by
testthat; data-dependent tests skip gracefully without registered PIC v1.1.0 source files.
This is an experimental methods package shipped for transparency,
not a CRAN-ready release. The package ships examples for every
exported function, a synthetic toy cohort in inst/extdata/, a
pkgdown configuration, and a formal citation file. Remaining release
gaps:
- No CI matrix (
.github/workflows/) is present in this repository snapshot. Builds are still author-machine only until the workflow lands. - JOSS submission is deferred until the companion paper is accepted.
- CRAN submission is deferred until a cohort-agnostic successor package extracts the calibration/DCA/PIM3 layer.
The CRAN-readiness audit verdict is JOSS submission deferred until the companion paper is accepted; defer CRAN to a cohort-agnostic successor package extracting the calibration/DCA/PIM3 layer.
MIT © 2026 Max Moldovan, Usman Iqbal. See LICENSE.md.
- Max Moldovan (Adelaide; ORCID 0000-0001-9680-8474) — author, creator, methodological lead.
- Usman Iqbal (Bond) — author, thesis advisor.
PIC v1.1.0 acknowledgement: Zeng, X., Yu, G., Lu, Y., et al. (2020). PIC, a pediatric-specific intensive care database. Scientific Data, 7, 14. https://doi.org/10.1038/s41597-020-0355-4. Data collected at the Department of Pediatrics, Tongji Hospital, Tongji Medical College, Huazhong University of Science and Technology, Wuhan, China.