For the CLIF Consortium · Fully synthetic · Openly shareable
Use the ready-made data, or pull the levers and generate your own — clinically realistic, CLIF-conformant, and provably synthetic. No credential. No data-use agreement.
How it works
CLIFForge fits a compact parameter pack to aggregate CLIF statistics, then samples whole hospitalizations offline — so the output lands in the real statistical region while staying provably synthetic.
Marginals, couplings, and state transitions are fitted from aggregate statistics only — never row-level records.
Distributions and couplings condense to a versioned pack (~84 KB). No real data lives inside it.
Each synthetic stay follows an internal acuity trajectory, keeping vitals, labs, and organ support coupled (vasopressors ↔ hypotension).
Offline sampling covers all 28 CLIF 2.1 tables; share packages write the 25 website-badged beta/concept Parquets — clinically coherent, and provably synthetic.
🔒 Private by construction. Generation samples from aggregate parameters and never copies a record — no synthetic patient traces back to a real one.
Grab the ready-made data, or write a short TOML recipe.
Run clif-forge generate, or
git clone the committed samples.
Parquet per table, plus the synthetic-vs-real report.
Two ways to use it
Every CLIFForge dataset is both a finished product and a recipe. Grab what's shipped, or change the recipe and generate a cohort that's yours.
Realistic, CLIF 2.1-conformant samples are committed in the repo — an ICU
cohort and a whole-hospital population. Full-size masters (85k ICU, 365k
whole-hospital) ship as exactly 25 website-badged tables
(clif_<table>_2.1_{beta|concept}.parquet) on
Dropbox.
Clone and go.
# clone and inspect — no credential, no fit
git clone https://github.com/sajor2000/clif-forge.git
Install the package, edit a short recipe, and generate a distinct cohort that still looks like the real thing. No two recipes produce the same data — and every one is reproducible from its recipe.
# install and generate your own cohort pip install git+https://github.com/sajor2000/clif-forge.git clif-forge presets clif-forge generate --preset high-acuity --n-patients 5000 --out ./my-icu # teaching rare events: --preset rare-support
Real, not random
CLIFForge fits distributions, couplings, and patient trajectories to aggregate CLIF statistics, then samples offline from a versioned parameter pack. It lands in the real statistical region while staying provably synthetic.
Labs use an empirical-quantile marginal through a Gaussian copula, so skewed, long-tailed distributions (creatinine's kidney tail, lactate's skew) match real — not just their means.
Per-stay lab presence is correlated, so co-ordered panels — a metabolic panel, an arterial blood gas — are measured together rather than independently. CI locks mean ABG co-occurrence on the shareable base pack.
Length-of-stay tails, organ support, and a deterioration-toward-death course (falling pressure, rising creatinine) track the real cohort — with realistic ER/OR/transfer patient flow.
Generation samples from aggregate parameters and never copies a record. No synthetic patient traces back to a real one — verified with distance-to-closest-record and identifiability metrics.
The levers
Change any lever and get a new, still-clinically-realistic, still-conformant dataset. Finer knobs are on the Python API.
| Lever | What it changes | Set with |
|---|---|---|
| Population shape | ICU cohort vs. whole-hospital population | mode |
| Size | Any number of encounters, on any machine | n |
| Demographics | Age shift, Hispanic fraction, exact race mix | age_shift, race_target |
| Illness rates | Ventilation, mortality, vasopressors, CRRT, proning, rare-event ECMO | imv, ecmo_stay… |
| Presets | Shipped recipes: high-acuity, older-cohort, sepsis-heavy, rare-support | --preset / clif-forge presets |
| Patient flow | Admission mix, ward→ICU and outside-hospital→ICU transfers | admission_route |
| Compute footprint | RAM and CPU dials — any cohort runs on an ordinary laptop | --chunk-size, --max-threads |
At a glance
CLIF versions & roadmap
CLIFForge is versioned to the CLIF standard it emits and is schema-driven — so a new version is a refit step, not a rewrite. The version each dataset targets is recorded in its manifest.
Schemas, mCIDE, and the fitted base pack all target 2.1. Every dataset here is 2.1-conformant.
Lands once 3.0 is finalized and there's aggregate data to fit it to — vendor the dictionary, refit, ship.
The same path for every version, so the consortium has one place to pull synthetic data for whichever CLIF version a study needs.
A single home for the datasets is planned at clif-icu.com (not yet live).