CEA Pipeline
Cost-effectiveness analysis scaffolding for the lab — Markov, decision tree, PSA, CEAC, AMA-styled output. Drummond 2015 + CHEERS 2022 standards.
0 SDH Prepub Bullpen/1 CEAs/_shared/. This page documents the reusable engine + currently active pilots.Active pilots
| Pilot | Target journal | Quality scores |
|---|---|---|
| VTE Prophylaxis Apixaban vs Enoxaparin (4-arm decision tree) | DCR | Drummond 8.75/10 CHEERS 26/28 |
| IBD-PSC Surgical Strategy 3-arm lifetime Markov; transitions verified vs Maspero 2023 PMID 37477000 | Ann Surg | Drummond 9.5/10 CHEERS 27/28 |
| CORS CEA Scoping Review PRISMA-2020 SR + exploratory RE-MA of CRS CEAs; extends Leeds-Holubar 2025 JSR (PMID 40967975) | Ann Surg | In progress |
Reusable infrastructure for every CEA project in the Holubar Lab sandbox. Modeled after Leeds 2019/2022 methodology (PMIDs 31596763, 35277799), implemented in Python.
Cost-Effectiveness Analyses/
├── _shared/ ← you are here
│ ├── Scripts/ ← reusable model code
│ ├── Inputs/ ← canonical parameter library w/ PMID provenance
│ ├── Templates/ ← memo + manuscript + notebook templates
│ ├── Docs/ ← methodology + CHEERS checklist + this README
│ └── Validation/ ← reference-case validation artifacts
├── VTE_Prophylaxis_Apixaban_vs_Enoxaparin/ ← Pilot 1
└── IBD-PSC_Surgical_Strategy_CEA/ ← Pilot 2
Scripts (_shared/Scripts/)
| Module | Purpose |
|---|---|
cea_utils.py | Distribution samplers (Beta/Gamma/Normal/Lognormal/Dirichlet/Triangular), method-of-moments parameter conversion, discounting, NMB, ICER table with dominance flagging, CEAC, EVPI. |
markov_engine.py | Cohort Markov simulator with optional half-cycle correction; supports stationary OR time-varying transition matrices; reward vectors stationary OR time-varying. |
decision_tree.py | Recursive node-based tree evaluator (DecisionNode / ChanceNode / TerminalNode), folding back to expected (cost, QALY). PSA wrapper provided. |
plotting.py | CEA plane, CEAC, tornado, Markov trace — all TIFF 600 DPI LZW, Arial, horizontal labels per statistical-output.md. |
reporters.py | Plain-text + AMA three-line .docx ICER tables; PSA summary; CHEERS results paragraph generator. |
All scripts include self-tests in __main__ blocks. Run:
cd "/Volumes/T1 Claude/000 Claude Sandbox/Active Research and Manuscripts/Cost-Effectiveness Analyses/_shared/Scripts"
python3 cea_utils.py # reproduces Leeds 2022 ICER
python3 markov_engine.py # reference-case Markov + time-varying check
python3 decision_tree.py # Leeds-2022-style tree + PSA wrapper
python3 plotting.py # generates 4 canonical figures (CEA plane, CEAC, tornado, Markov trace)
python3 reporters.py # ICER text + .docx + CHEERS snippet
How to scaffold a new CEA project
- Create the project folder with standard subfolder layout:
``bash PROJECT="MyNewCEA" cd "/Volumes/T1 Claude/000 Claude Sandbox/Active Research and Manuscripts/Cost-Effectiveness Analyses" mkdir -p "$PROJECT"/{Scripts,Data,Figures/drafts,Lit} find "$PROJECT" -type d -exec touch {}/z.txt \; ``
- In
Scripts/main_analysis.py, import from_shared/Scripts/via
sys.path injection:
``python from pathlib import Path import sys sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "_shared" / "Scripts")) from cea_utils import Strategy, icer_table, ceac_curve, evpi, sample_beta, sample_gamma from markov_engine import MarkovModel from decision_tree import DecisionNode, ChanceNode, TerminalNode, evaluate_psa from plotting import plot_cea_plane, plot_ceac, plot_tornado, plot_markov_trace from reporters import psa_summary, write_icer_table_docx, cheers_results_snippet ``
- Load inputs from
_shared/Inputs/:
``python import pandas as pd shared_inputs = Path(__file__).resolve().parents[2] / "_shared" / "Inputs" probs = pd.read_csv(shared_inputs / "probabilities.csv").set_index("parameter") costs = pd.read_csv(shared_inputs / "costs.csv").set_index("parameter") utils = pd.read_csv(shared_inputs / "utilities.csv").set_index("parameter") ``
- Verify all parameters used are
VERIFIEDbefore running the analysis
that will go into the manuscript. TODO_* rows are allowed during model building but must be resolved before final results.
- Build the model, run PSA, generate figures + tables, draft the
analytic memo. Each project's Data/ folder holds frozen inputs + results JSON; Figures/ holds draft PNGs + clean TIFFs.
- Cascade: per
project-structure.md, results JSON → notebook →
analytic memo → manuscript → figures. Use /pc to commit.
Validation requirements (per project)
Each project's Validation/ folder (or Scripts/validate.py) must include:
- Face validity — clinical-expert structure review note
- Internal validity — reproduction of a published reference case OR
hand-calculation match at known inputs
- External validity — comparison to independent observational data
when available
- Sensitivity to alternative model structures — if both decision tree
and Markov are plausible for the same question, run both and report agreement
Conventions enforced
- 3%/yr discount rate, half-cycle correction ON, $100K/QALY primary WTP,
10,000 PSA iterations (per _shared/Docs/METHODOLOGY.md)
- Every parameter value has a PMID source or is flagged
TODO_* - Every figure is TIFF 600 DPI LZW + PPTX editable copy
- Every table follows AMA three-line border style
- Every manuscript carries the CHEERS 2022 checklist (Supplementary File)
- Costs and QALYs both discounted by default
- No DOIs in references — PMIDs only
Reference papers (in Odin/PDF Articles/)
- Leeds 2019 — PMID 31596763 — "Cost-Benefit Limitations of Extended VTE
Prophylaxis After Surgery for Crohn's Disease" (DCR)
- Leeds 2022 — PMID 35277799 — "Cost-Effectiveness of Aspirin for Extended
VTE Prophylaxis After Major Surgery for IBD" (J Gastrointest Surg) — SDH co-author
- Neumann 2016 — PMID 27623463 — Second Panel on CEA in Health and Medicine
- Husereau 2022 — PMID 35017145 — CHEERS 2022 reporting guideline
- Briggs et al. — Decision Modelling for Health Economic Evaluation (2006)
— foundational textbook (not in corpus; see CCF library)
For questions, additions, or onboarding help — email Stefan directly:
webmaster@holubarlab.org