Skip to main content

Decision-analytic modeling for health economic evaluation and health technology assessment: probabilistic parameters, cohort and individual-level simulation engines, cost-effectiveness analysis, and value of information

Project description

heormodel

CI codecov PyPI DOI License: MIT

heormodel is a Python decision-analytic modeling framework for health economic evaluation and health technology assessment.

heormodel covers the full cost-effectiveness analysis workflow in one package. It supports probabilistic parameter specification for a range of models: Markov cohort state-transition models, microsimulation models, and discrete-event simulation models. It builds the incremental cost-effectiveness ratio (ICER) table and runs value-of-information analysis. If you are not ready to port your model to Python, you can also bring your existing model results directly into the package.

Read more in the documentation: pedroliman.github.io/heormodel

Install

If you are new to Python, I recommend installing it with uv. Once you have a working Python installation, run this from your terminal within your project's folder:

pip install heormodel
# or using uv, which I prefer:
# (run uv init once)
uv init
uv add heormodel

Quickstart

Here is a quick example to get you started: a three-state Markov cohort state-transition model comparing treatment with standard care, evaluated by probabilistic sensitivity analysis. This code builds the model, runs it, and reports the ICER table and the expected value of perfect information.

import numpy as np
import pandas as pd
from heormodel.models import CohortSpec, MarkovModel
from heormodel.params import Beta, Gamma, ParameterSet
from heormodel.run import SeedManager, run_psa
from heormodel.cea import icer_table
from heormodel.voi import evpi

# define your model.
def model(p, intervention):
    p_progress = p["p_progress"] * (p["rr_treat"] if intervention == "Treatment" else 1.0)
    # Transition matrix. Rows: Current state. Columns: Next state.
    P = np.array([
        [1 - p_progress - p["p_die"], p_progress, p["p_die"]],
        [0.0, 1 - p["p_die_sick"], p["p_die_sick"]],
        [0.0, 0.0, 1.0],
    ])
    cost = np.array([0.0, p["c_sick"], 0.0])
    if intervention == "Treatment":
        cost[:2] += p["c_treat"]
    return CohortSpec(P, cost, np.array([1.0, p["u_sick"], 0.0]))

# create the MarkovModel engine.
engine = MarkovModel(states=("Healthy", "Sick", "Dead"),
                     interventions=("Standard care", "Treatment"),
                     transitions_and_rewards=model, n_cycles=40)

# Define your parameters:
params = ParameterSet({
    "p_progress": Beta(20, 180), "rr_treat": Beta(60, 40),
    "p_die": Beta(5, 995), "p_die_sick": Beta(50, 450),
    "c_sick": Gamma(100, 250.0), "c_treat": Gamma(100, 80.0),
    "u_sick": Beta(150, 50),
})

# sample your parameters:
draws = params.sample(1000, seed=SeedManager(1).generator())

# run your model over your parameters.
outcomes = run_psa(engine, draws).outcomes

# Get the ICER table.
icer_table(outcomes).round(1)
#                    cost  effect  inc_cost  inc_effect     icer status
# intervention
# Standard care  142910.9    11.2       NaN         NaN      NaN     ND
# Treatment      233676.2    13.4   90765.3         2.2  41130.9     ND

# And from here your EVPI
round(evpi(outcomes, wtp=50_000), 1)
# 2738.7

Once you master this workflow, you can do a lot more with the package, like defining microsimulations, discrete-event simulation models, and compartmental transmission models written as ordinary differential equations (the ODEModel engine, with a susceptible-exposed-infectious-recovered vaccination example). The package also has a calibration function you can use to calibrate some parameters, take others from the literature, then run a full probabilistic sensitivity analysis.

Development

Developer documentation lives in devdocs/. See the CHANGELOG.md for recent changes and follow the release process: RELEASING.md.

Requires Python 3.11+ and uv:

uv venv && uv pip install -e ".[dev]"
uv run pytest
uv run pytest --doctest-modules src
uv run ruff check . && uv run mypy

The site in docs/ builds with Quarto and quartodoc; tutorials execute at render time. With Quarto installed and uv sync --extra docs:

uv run quartodoc build --config docs/_quarto.yml
quarto preview docs

Each tutorial also carries an "Open in Colab" badge backed by a runnable notebook under docs/_notebooks/. Regenerate the badges and notebooks after editing a tutorial; continuous integration checks they stay in sync:

uv run python docs/build_colab_notebooks.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

heormodel-0.7.2.tar.gz (102.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

heormodel-0.7.2-py3-none-any.whl (90.0 kB view details)

Uploaded Python 3

File details

Details for the file heormodel-0.7.2.tar.gz.

File metadata

  • Download URL: heormodel-0.7.2.tar.gz
  • Upload date:
  • Size: 102.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for heormodel-0.7.2.tar.gz
Algorithm Hash digest
SHA256 2b988e31081c48f0526f46f88bfdcf65134d98eb31a787d0fe4e665fc4df54df
MD5 ee2de3c21dd99588d8cbd0fe9df05761
BLAKE2b-256 431b4a2aa0449cd5c65b7fa02ed5bbf0261212546bb70d1c6d563b2e0e5b36ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for heormodel-0.7.2.tar.gz:

Publisher: release.yml on pedroliman/heormodel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file heormodel-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: heormodel-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 90.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for heormodel-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e0d6f97debef866fbbacd0f3dcad5948d3bde01a6a09953fd416ca21f2175bfa
MD5 3c20a0f9aadb065524cb7471118e1962
BLAKE2b-256 541e72b0af1a7c1bf00ab4b17f2bdcf9ea4678bd903a8fedf768abbef25b2c8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for heormodel-0.7.2-py3-none-any.whl:

Publisher: release.yml on pedroliman/heormodel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page