Skip to content

Cost-effectiveness microsimulation model for IXA-001 (aldosterone synthase inhibitor) vs Spironolactone in resistant hypertension. Features dual-branch phenotyping, PA risk modifiers, AF tracking, and interactive Streamlit dashboard.

Notifications You must be signed in to change notification settings

danribes/hypertension-microsim

Repository files navigation

Hypertension Cardiorenal Microsimulation Model

Individual-Level State-Transition Microsimulation for IXA-001 Cost-Effectiveness Analysis

Python Streamlit Docker License Version

A pharmacoeconomic evaluation tool for hypertension treatments in patients with resistant hypertension and cardiorenal disease. Features dual cardiac-renal disease branches, atrial fibrillation tracking, and societal perspective cost analysis.

Table of Contents


Overview

This model simulates the lifetime progression of hypertensive patients through dual disease branches (cardiac and renal), evaluating the cost-effectiveness of novel antihypertensive treatments against standard care. It implements cutting-edge methodologies from health economics and clinical research to provide robust pharmacoeconomic evidence for reimbursement decisions.

Model Type: Individual-Level State-Transition Microsimulation (IL-STM) Cycle Length: Monthly (to capture acute events and rapid renal transitions) Time Horizon: Lifetime (up to age 100) Perspective: Healthcare payer OR Societal (configurable) Discount Rate: 3% per annum (costs and QALYs)


Target Population: Resistant Hypertension

This model is specifically designed for resistant hypertension (rHTN) — a distinct clinical phenotype that demands specialized modeling approaches.

What is Resistant Hypertension?

Definition: Blood pressure remaining above target (≥130/80 mmHg) despite optimal use of ≥3 antihypertensive agents from different classes, including a diuretic, at maximally tolerated doses.

Prevalence: 10-15% of treated hypertensive patients (~11,000 per 1 million plan members)

Why Resistant HTN Requires Microsimulation

Unlike general hypertension, resistant HTN patients present unique characteristics that make cohort-level Markov models inadequate:

Characteristic General HTN Resistant HTN Modeling Implication
Prior CV events 5-10% 25-35% Individual history tracking essential
CKD (eGFR <60) 10-15% 30-40% Dual cardiac-renal pathways
Diabetes 20-25% 40-50% Accelerated progression modeling
Primary aldosteronism 5-10% 15-20% IXA-001 target subpopulation
Target organ damage 15-20% 60-70% Higher baseline event rates
Obesity (BMI ≥30) 30-35% 50-60% Metabolic phenotype identification

Primary Aldosteronism — The IXA-001 Target

15-20% of resistant HTN patients have primary aldosteronism — a condition where autonomous aldosterone production drives hypertension. This population is the core target for IXA-001 (aldosterone synthase inhibitor):

  • Enhanced treatment response: ~70% better BP reduction with IXA-001 (modifier 1.70)
  • Higher baseline risk: 2.05× HF risk, 1.8× renal risk, 12× AF risk due to aldosterone-mediated fibrosis
  • Identifiable from clinical workup: Aldosterone-to-renin ratio screening

The model captures this via:

  • has_primary_aldosteronism patient attribute
  • Treatment response modifiers in BaselineRiskProfile.get_treatment_response_modifier()
  • Phenotype-specific risk adjustments (HF 2.05×, ESRD 1.8×, MI 1.4×, Stroke 1.5×, AF 3.0×)
  • NEW: Atrial fibrillation tracking with treatment-specific risk reduction (60% with IXA-001 vs 40% with spironolactone)

Why This Population Needs Individual-Level Modeling

  1. History matters intensely: A patient with prior MI + CKD Stage 3 + diabetes has fundamentally different risk than one with rHTN alone
  2. Competing risks are amplified: CV death vs. renal death vs. other-cause mortality compete more aggressively
  3. Treatment response is heterogeneous: Primary aldosteronism patients respond better to ASIs than those with arterial stiffness
  4. Time-dependent covariates: SBP, eGFR, and potassium levels change dynamically month-to-month

Quick Start with Docker

The fastest way to run the Cost-Effectiveness Analysis (CEA) web interface.

Prerequisites

Platform Requirements
macOS Docker Desktop for Mac
Windows Docker Desktop for Windows with WSL 2 backend
Linux Docker Engine and Docker Compose

Run with Docker Compose (Recommended)

# Clone the repository
git clone https://github.com/danribes/hypertension-microsim.git
cd hypertension_microsim

# Start the application
docker compose up

# Access the web interface at http://localhost:8502

To stop: Ctrl+C or docker compose down

Alternative: Docker Run

# Build the image
docker build -t hypertension-microsim .

# Run the container
docker run -p 8502:8501 hypertension-microsim

# Access the web interface at http://localhost:8502

Web Interface Features

The Streamlit interface provides:

  • Interactive Parameters: Cohort size, time horizon, cost perspective (US/UK), economic perspective (healthcare/societal)
  • Key Metrics: Incremental costs, QALYs, ICER with interpretation
  • Outcomes Table: Comprehensive comparison of events and costs
  • Event Charts: Visual comparison of cardiac, renal, and AF events
  • CE Plane: Cost-effectiveness quadrant analysis
  • WTP Analysis: Net monetary benefit at various thresholds

Installation (Local)

Prerequisites

  • Python 3.8 or higher
  • pip (Python package manager)

Setup

# Clone the repository
git clone https://github.com/danribes/hypertension-microsim.git
cd hypertension-microsim

# Create virtual environment (recommended)
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

Running the Web Interface Locally

streamlit run streamlit_app.py

Then open http://localhost:8502 in your browser.


Key Features

1. Individual-Level State-Transition Model (IL-STM)

Unlike cohort-level Markov models, this microsimulation tracks each patient individually through time, enabling:

  • Patient history tracking: Prior MI, stroke, time since events
  • Continuous risk factors: Exact eGFR, SBP, age (not discretized into health states)
  • Treatment adherence: Individual-level compliance tracking
  • Memory effects: Risk depends on full patient trajectory, not just current state

2. Dual Disease Branch Architecture

Patients simultaneously progress through independent cardiac and renal pathways:

Cardiac Branch:

No Acute Event → [MI, Stroke, HF, AF] → Chronic HF → Death (Cardiac)
                      ↓ (recurrent)
                Post-MI/Stroke/AF Management

Renal Branch:

CKD Stage 1-2 → Stage 3a → Stage 3b → Stage 4 → ESRD → Death (Renal)
    (eGFR ≥60)   (45-59)   (30-44)   (15-29)  (<15)

3. Dynamic Systolic Blood Pressure (SBP) Model

Stochastic monthly updates reflecting real-world BP variability:

SBP(t+1) = SBP(t) + β_age + ε - treatment_effect

Where:
  β_age = 0.05 mmHg/month (age-related drift)
  ε ~ N(0, 2 mmHg)        (stochastic variation)
  treatment_effect        (medication-specific reduction)

Advantages:

  • Captures biological variability in BP over time
  • Enables treatment response heterogeneity across patients
  • Supports adherence modeling (BP rebounds if non-adherent)

4. Enhanced eGFR Decline Model

Continuous decline equation with multiple risk factors:

Δ_eGFR_monthly = base_decline_age * diabetes_multiplier * BP_continuous_effect

Where:
  base_decline_age = {0.5 (age <50), 0.8 (50-65), 1.2 (65-75), 1.8 (75+)} / 12
  diabetes_multiplier = 1.5 if diabetic, else 1.0
  BP_continuous_effect = 1 + 0.05 * max(0, SBP - 140)

Advantages over categorical models:

  • Smooth transitions (no artificial threshold effects)
  • SBP-kidney interaction (every 1 mmHg above 140 accelerates decline)
  • Age stratification (faster decline in elderly)

5. Atrial Fibrillation as Aldosterone-Specific Outcome (NEW)

AF is a critical aldosterone-mediated outcome with dramatically elevated risk in PA patients:

Key Mechanisms:

  • Aldosterone promotes atrial fibrosis and electrical remodeling
  • Left atrial enlargement from volume overload
  • Direct pro-arrhythmic effects

Implementation:

  • 12× baseline AF risk for PA patients (per Monticone S et al. JACC 2018)
  • IXA-001 provides 60% AF risk reduction (vs 40% for spironolactone)
  • AF tracked as a new event with associated costs and disutility
  • Chronic AF management costs ($8,500/year including DOAC therapy)

6. Societal Perspective with Indirect Costs (NEW)

The model now supports full societal perspective analysis:

Direct Costs: Medical care, hospitalizations, drug costs Indirect Costs:

  • Productivity loss from chronic disability (post-stroke, HF)
  • Acute absenteeism (MI: 7 days, stroke: 30 days, HF: 5 days)
  • Annual wage loss multipliers (stroke: 20%, HF: 15%)

Economic Perspective Options:

  • healthcare_system: Direct medical costs only (traditional HTA)
  • societal: Direct + indirect costs (comprehensive analysis)

7. Four-Dimensional Baseline Risk Stratification

Every patient is classified at baseline across four risk dimensions using a dual-branch age-based architecture:

A. Renal Risk (Mutually Exclusive Pathways)

The model routes patients to one of three renal risk systems based on age and eGFR:

                    ┌─────────────────────────────────────┐
                    │        Patient at Baseline          │
                    └─────────────────────────────────────┘
                                      │
                                      ▼
                            ┌─────────────────┐
                            │   eGFR > 60?    │
                            └─────────────────┘
                             /              \
                           Yes              No
                           /                  \
                          ▼                    ▼
                ┌─────────────────┐    ┌─────────────────┐
                │   Age ≥ 60?     │    │     KDIGO       │
                └─────────────────┘    │  (CKD pathway)  │
                 /              \      └─────────────────┘
               Yes              No
               /                  \
              ▼                    ▼
        ┌─────────────┐    ┌─────────────────┐
        │    GCUA     │    │     EOCRI       │
        │ (Geriatric) │    │  (Age 18-59)    │
        └─────────────┘    └─────────────────┘

GCUA Phenotypes (age ≥60, eGFR > 60):

  • Type I (Accelerated Ager): High renal + High CVD risk
  • Type II (Silent Renal): High renal + Low CVD risk (missed by Framingham)
  • Type III (Vascular Dominant): Low renal + High CVD risk
  • Type IV (Senescent): High mortality risk (de-escalate treatment)
  • Moderate/Low: Standard preventive care

EOCRI Phenotypes (age 18-59, eGFR > 60):

  • Type A (Early Metabolic): Elevated uACR + Diabetes/Obesity → Aggressive BP + SGLT2i + Statin
  • Type B (Silent Renal): Elevated uACR + No Diabetes → Early ASI/RAASi + SGLT2i (key target population)
  • Type C (Premature Vascular): Normal uACR + High Lipids/Smoker → Statins + Antiplatelets
  • Low Risk: Normal uACR + No vascular risk factors → Standard HTN Management

Note: EOCRI Type B patients are the key value driver - they have low short-term CVD risk (would be classified as "low risk" by Framingham) but high long-term renal progression risk due to elevated albuminuria.

KDIGO Risk Matrix (eGFR ≤ 60, any age):

           A1 (<30)   A2 (30-300)   A3 (>300)
G1 (≥90)     Low       Moderate        High
G2 (60-89)   Low       Moderate        High
G3a (45-59)  Moderate  High            Very High
G3b (30-44)  High      Very High       Very High
G4 (15-29)   Very High Very High       Very High
G5 (<15)     Very High Very High       Very High

B. Cardiovascular Risk (All Patients)

Framingham 10-Year CVD Risk:

  • Low (<5%)
  • Borderline (5-7.4%)
  • Intermediate (7.5-19.9%)
  • High (≥20%)

C. Purpose

Enables subgroup cost-effectiveness analysis:

  • "Is IXA-001 cost-effective specifically in PA patients?"
  • "What's the ICER for KDIGO Very High Risk subgroup?"
  • "Do high Framingham patients benefit more?"
  • "How do EOCRI Type B (younger silent renal) patients compare to GCUA Type II?"

Dual Cardiac-Renal Pathway Interactions

The model tracks cardiac and renal states independently and concurrently — a patient can be Post-MI and CKD Stage 4 simultaneously. This dual-pathway architecture enables realistic modeling of the cardiorenal syndrome spectrum.

What Is Modelled

Interaction Mechanism Code Reference
Additive cost accrual Cardiac + renal state costs stacked (e.g. Post-MI $5,500/yr + CKD-4 $8,000/yr) src/costs/costs.py:463-514
SGLT2i dual benefit 40% slower eGFR decline + 30% HF risk reduction src/patient.py:484, src/transitions.py:562
eGFR as CV risk predictor Worse renal function increases cardiac event probabilities via PREVENT equations src/risks/prevent.py
ESRD CV mortality 9% additional annual CV death risk for ESRD patients src/transitions.py:645
Hyperkalemia management Stepped approach (monitor → binder → dose reduce → stop) for MRA + renal dysfunction src/treatment.py:260-347
AF cross-pathway outcome 12× risk for PA patients with cardiac + renal cost implications src/transitions.py:962-1077

SGLT2 Inhibitor as Dual-Benefit Agent

SGLT2 inhibitors are the primary cross-pathway treatment mechanism:

  • Assigned at baseline if eGFR < 60 or HF present (40% real-world uptake)
  • Renal protection: 40% reduction in eGFR decline rate (DAPA-CKD trial data)
  • Cardiac protection: 30% reduction in HF hospitalization risk (DAPA-HF/EMPEROR-Reduced)
  • Additive cost: ~$450/month (US), independent of IXA-001 vs spironolactone arm

Cost Structure for Dual-Burden Patients

Costs are additive across pathways:

Total Annual Cost = Cardiac State Cost + Renal State Cost + Drug Costs + SGLT2i (if applicable)

Example (Post-MI + CKD Stage 4 + PA patient on IXA-001):
  Post-MI management:    $5,500/year
  CKD Stage 4:           $8,000/year
  IXA-001:               $6,000/year
  SGLT2i:                $5,400/year
  Standard care:           $900/year
  ─────────────────────────────────
  Total:                $25,800/year

Known Limitations

The following cardiorenal interactions are not explicitly modelled and represent areas for future enhancement:

Limitation Clinical Relevance Impact
Acute kidney injury (AKI) Post-MI cardiogenic shock causes AKI in ~20% of cases May underestimate renal costs post-cardiac event
Cardiorenal syndrome Type 1-4 CRS feedback loops between heart and kidney Bidirectional organ damage not captured dynamically
Treatment escalation for dual burden No logic to intensify renoprotection when cardiac patient develops CKD Treatment remains BP-driven only
Cross-event time dependencies Stroke risk elevated for 12 months post-MI Events treated as independent within each cycle
Differential SBP targets CKD-4+ patients may warrant different BP goals All patients share same target (<140 mmHg)
ACEi/ARB for RAS subgroup RAS identified but no differential treatment pathway May underestimate benefit of targeted RAS treatment

Treatment for Dual-Burden Patients

Currently, treatment decisions are BP-driven only (src/treatment.py):

  • Intensify if SBP > 130 mmHg (with 50% clinical inertia probability)
  • No consideration of simultaneous cardiac + renal states when escalating or de-escalating treatment
  • SGLT2i is the only agent providing explicit dual-pathway benefit (cardiac + renal)
  • Hyperkalemia management is the only renal-aware treatment adjustment (stepped approach for MRA patients with rising K+)

Model Architecture

Complete Model Diagram (Version 4.0)

┌─────────────────────────────────────────────────────────────────────────────┐
│                    HYPERTENSION MICROSIMULATION MODEL v4.0                   │
│                 (With AF Tracking & Societal Perspective)                    │
└─────────────────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────────────────┐
│  1. POPULATION GENERATION                                                    │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │  Demographics: Age, Sex, BMI                                          │   │
│  │  Risk Factors: SBP, eGFR, uACR, Lipids, Diabetes                     │   │
│  │  Secondary HTN Etiology: PA (21%), OSA (15%), RAS (11%), Pheo (1%)   │   │
│  │  Baseline Risk Profiles: GCUA/EOCRI/KDIGO + Framingham               │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────────┘
                                     │
                                     ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  2. MONTHLY SIMULATION LOOP                                                  │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │  For each patient, each month:                                        │   │
│  │                                                                        │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐  │   │
│  │  │  A. ADHERENCE CHECK                                              │  │   │
│  │  │     • P(Adherent → Non-Adherent) based on demographics          │  │   │
│  │  │     • Treatment-specific factors (spiro side effects)           │  │   │
│  │  │     • Update treatment effect (30% if non-adherent)             │  │   │
│  │  └─────────────────────────────────────────────────────────────────┘  │   │
│  │                           │                                            │   │
│  │                           ▼                                            │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐  │   │
│  │  │  B. SAFETY MONITORING (MRA patients)                            │  │   │
│  │  │     • Quarterly K+ check if on spironolactone                   │  │   │
│  │  │     • Hyperkalemia management (K+ >5.0: binder/dose/stop)       │  │   │
│  │  │     • Add lab costs ($15) and binder costs ($500/month)         │  │   │
│  │  └─────────────────────────────────────────────────────────────────┘  │   │
│  │                           │                                            │   │
│  │                           ▼                                            │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐  │   │
│  │  │  C. COGNITIVE PROGRESSION                                        │  │   │
│  │  │     • Normal → MCI → Dementia (SPRINT-MIND)                     │  │   │
│  │  │     • Risk: Age + Cumulative SBP burden                         │  │   │
│  │  └─────────────────────────────────────────────────────────────────┘  │   │
│  │                           │                                            │   │
│  │                           ▼                                            │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐  │   │
│  │  │  D. ATRIAL FIBRILLATION CHECK (NEW)                             │  │   │
│  │  │     • Base rate by age (0.2-5% annual)                          │  │   │
│  │  │     • PA patients: 12× baseline risk (Monticone 2018)           │  │   │
│  │  │     • IXA-001: 60% risk reduction | Spiro: 40% reduction        │  │   │
│  │  │     • HF patients: additional 4× risk                           │  │   │
│  │  │     • Record AF event, apply costs & disutility                 │  │   │
│  │  └─────────────────────────────────────────────────────────────────┘  │   │
│  │                           │                                            │   │
│  │                           ▼                                            │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐  │   │
│  │  │  E. CARDIOVASCULAR EVENTS (PREVENT Equations)                   │  │   │
│  │  │     • MI, Stroke (ischemic/hemorrhagic), TIA, HF, CV Death      │  │   │
│  │  │     • Base probability from PREVENT (age, sex, SBP, eGFR, etc.) │  │   │
│  │  │     • Phenotype modifiers (PA: MI 1.4×, Stroke 1.5×, HF 2.05×)  │  │   │
│  │  │     • Treatment risk factor (efficacy coefficients)             │  │   │
│  │  │     • Competing risks framework (Putter 2007)                   │  │   │
│  │  └─────────────────────────────────────────────────────────────────┘  │   │
│  │                           │                                            │   │
│  │                           ▼                                            │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐  │   │
│  │  │  F. COST ACCUMULATION                                           │  │   │
│  │  │     ┌─────────────────────────────────────────────────────────┐ │  │   │
│  │  │     │  DIRECT COSTS                                           │ │  │   │
│  │  │     │  • Drug costs (IXA: $500, Spiro: $15, SGLT2i: $450)    │ │  │   │
│  │  │     │  • State management (HTN, post-MI, post-stroke, HF, CKD)│ │  │   │
│  │  │     │  • Acute event costs (MI: $25K, Stroke: $15-22K, etc.) │ │  │   │
│  │  │     │  • AF costs (acute: $8.5K, chronic: $8.5K/year)        │ │  │   │
│  │  │     └─────────────────────────────────────────────────────────┘ │  │   │
│  │  │     ┌─────────────────────────────────────────────────────────┐ │  │   │
│  │  │     │  INDIRECT COSTS (Societal Perspective)                  │ │  │   │
│  │  │     │  • Acute absenteeism (MI: 7d, Stroke: 30d × $240/day)  │ │  │   │
│  │  │     │  • Chronic disability (Stroke: 20%, HF: 15% wage loss) │ │  │   │
│  │  │     │  • Working age (<65) only                               │ │  │   │
│  │  │     └─────────────────────────────────────────────────────────┘ │  │   │
│  │  └─────────────────────────────────────────────────────────────────┘  │   │
│  │                           │                                            │   │
│  │                           ▼                                            │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐  │   │
│  │  │  G. QALY ACCUMULATION                                           │  │   │
│  │  │     • Baseline utility by age (0.87 @ 40 → 0.67 @ 90)          │  │   │
│  │  │     • State disutilities (post-MI: -0.12, HF: -0.15, AF: -0.05)│  │   │
│  │  │     • SBP-based gradient (uncontrolled HTN: up to -0.08)       │  │   │
│  │  │     • Half-cycle correction applied                            │  │   │
│  │  │     • Discounting at 3% per annum                              │  │   │
│  │  └─────────────────────────────────────────────────────────────────┘  │   │
│  │                           │                                            │   │
│  │                           ▼                                            │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐  │   │
│  │  │  H. STATE UPDATES                                               │  │   │
│  │  │     • Dynamic SBP equation (age drift + ε - treatment)         │  │   │
│  │  │     • eGFR decline (KFRE-informed, phenotype-modified)         │  │   │
│  │  │     • Renal state transitions (CKD stages based on eGFR)       │  │   │
│  │  │     • Age increment                                             │  │   │
│  │  └─────────────────────────────────────────────────────────────────┘  │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────────┘
                                     │
                                     ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│  3. RESULTS AGGREGATION                                                      │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │  • Mean costs (direct, indirect, total) per patient                  │   │
│  │  • Mean QALYs per patient                                            │   │
│  │  • Event counts (MI, Stroke, HF, AF, ESRD, Deaths)                   │   │
│  │  • ICER calculation (with dominance classification)                  │   │
│  │  • Subgroup stratification by secondary HTN etiology                 │   │
│  │  • Threshold price analysis                                          │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────────┘

Treatment Effect Flow (PA Patients)

┌─────────────────────────────────────────────────────────────────────────────┐
│  TREATMENT EFFECT CALCULATION FOR PA PATIENTS                                │
└─────────────────────────────────────────────────────────────────────────────┘

1. BASE TREATMENT EFFECT
   ┌─────────────────────────────────────────────────────────────────────────┐
   │  IXA-001: 20 mmHg SBP reduction (SD: 6) - Phase III RFP data            │
   │  Spironolactone: 9 mmHg SBP reduction (SD: 6)                           │
   └─────────────────────────────────────────────────────────────────────────┘
                                     │
                                     ▼
2. PA TREATMENT RESPONSE MODIFIER (get_treatment_response_modifier)
   ┌─────────────────────────────────────────────────────────────────────────┐
   │  IXA-001 in PA: 1.70× (70% enhanced response)                          │
   │  Spironolactone in PA: 1.40× (40% enhanced response)                   │
   │                                                                          │
   │  Effective SBP reduction:                                                │
   │    IXA-001: 24 × 1.70 = 40.8 mmHg                                       │
   │    Spiro:   9 × 1.40 = 12.6 mmHg                                        │
   └─────────────────────────────────────────────────────────────────────────┘
                                     │
                                     ▼
3. TRANSLATION TO RISK REDUCTION (_get_treatment_risk_factor)
   ┌─────────────────────────────────────────────────────────────────────────┐
   │  Efficacy coefficients (aldosterone-mediated outcomes):                  │
   │    MI: 0.30, Stroke: 0.40, HF: 0.50, ESRD: 0.55, Death: 0.35           │
   │                                                                          │
   │  Formula: risk_factor = 1.0 - (modifier - 1.0) × efficacy_coeff         │
   │                                                                          │
   │  Example for HF with IXA-001 (modifier=1.70, coeff=0.50):               │
   │    risk_factor = 1.0 - (1.70 - 1.0) × 0.50 = 1.0 - 0.35 = 0.65         │
   │    → 35% HF risk reduction                                              │
   └─────────────────────────────────────────────────────────────────────────┘
                                     │
                                     ▼
4. PA BASELINE RISK MODIFIERS (get_dynamic_modifier)
   ┌─────────────────────────────────────────────────────────────────────────┐
   │  PA patients have elevated baseline event rates:                         │
   │    MI: 1.40× (coronary remodeling, microvascular disease)               │
   │    Stroke: 1.50× (vascular stiffness, AF-mediated emboli)               │
   │    HF: 2.05× (HR from Monticone 2018, cardiac fibrosis)                 │
   │    ESRD: 1.80× (aldosterone-mediated renal fibrosis)                    │
   │    AF: 3.0× (on top of 12× base rate = extreme risk)                    │
   │    Death: 1.60× (combined pathways)                                     │
   └─────────────────────────────────────────────────────────────────────────┘

How Event Probabilities Are Actually Assigned

Two-Layer Architecture: The risk stratification systems (Framingham, KDIGO, GCUA, EOCRI) are calculated once at baseline and serve two purposes:

  1. Classification for subgroup analysis and reporting
  2. Dynamic modification via phenotype-specific multipliers on event probabilities

The model uses a layered risk calculation:

PREVENT Risk Calculator (src/risks/prevent.py)

The AHA PREVENT equations calculate 10-year CVD risk using:

Input Variable Description
Age Patient age (30-79 years)
Sex Male/Female (separate coefficients)
Systolic BP True physiological SBP (accounting for white coat effect)
eGFR Current kidney function (mL/min/1.73m²)
Diabetes Binary indicator
Smoking Current smoking status
Total Cholesterol mg/dL
HDL Cholesterol mg/dL
BMI Body mass index
UACR Urine albumin-creatinine ratio (optional enhancement)

Conversion to Monthly Probabilities:

10-year risk → Annual risk → Monthly probability
p_annual = 1 - (1 - p_10yr)^0.1
p_monthly = 1 - (1 - p_annual)^(1/12)

Prior Event Multipliers (src/transitions.py)

Patients with prior cardiovascular events have elevated risk:

Prior Event Risk Multiplier
MI 2.5×
Stroke 3.0×
TIA 2.0×
Heart Failure 2.0×

Treatment Effects on Risk (src/treatment.py)

Blood pressure reduction translates to risk reduction via meta-analysis-derived relative risks:

Outcome RR per 10 mmHg SBP Reduction
Stroke 0.64 (36% reduction)
MI 0.78 (22% reduction)
Heart Failure 0.72 (28% reduction)
Total CVD 0.75 (25% reduction)

Example Calculation:

Patient: 65yo male, SBP 160, eGFR 55, diabetic, smoker, PA
PREVENT 10-year CVD risk: 28%
PA baseline modifier (HF): 2.05×
Prior MI multiplier: 2.5×
Adjusted 10-year risk: 143% (capped at 95%)
Monthly probability: ~2.5%

With IXA-001 treatment (40 mmHg effective reduction in PA):
Treatment risk factor: 0.65 (35% reduction)
Adjusted monthly probability: ~1.6%

Phenotype-Specific Risk Modifiers

The BaselineRiskProfile.get_dynamic_modifier() method returns outcome-specific multipliers:

Secondary HTN Etiology Modifiers (Primary Focus)

Etiology MI Stroke HF ESRD AF Death Reference
Primary Aldosteronism 1.40× 1.50× 2.05× 1.80× 3.0× 1.60× Monticone 2018
Obstructive Sleep Apnea 1.25× 1.35× 1.40× 1.30× 1.5× 1.35× Marin 2005
Renal Artery Stenosis 1.30× 1.40× 1.35× 1.60× 1.2× 1.40× Dworkin 2006
Pheochromocytoma 1.50× 1.60× 1.30× 1.10× 1.3× 1.50× Lenders 2014
Essential HTN 1.0× 1.0× 1.0× 1.0× 1.0× 1.0× Baseline

Treatment Response Modifiers

Etiology IXA-001 Response Spironolactone Response
Primary Aldosteronism 1.70× 1.40×
Obstructive Sleep Apnea 1.20× 1.15×
Renal Artery Stenosis 0.90× 0.85×
Pheochromocytoma 0.70× 0.65×
Essential HTN 1.0× 1.0×

Results

This section presents the comprehensive cost-effectiveness analysis results for IXA-001 vs Spironolactone following Option B structural changes (elevated PA event rates, AF tracking, societal perspective).

Study Design

  • Population: 2,000 resistant hypertension patients
  • Time Horizon: 20 years
  • Perspective: Societal (direct + indirect costs)
  • Discount Rate: 3% per annum (costs and QALYs)
  • Comparators: IXA-001 ($500/month) vs Spironolactone ($15/month)
  • Willingness-to-Pay Threshold: $150,000/QALY

Subgroup Definitions

Patients were stratified by secondary hypertension etiology stored in baseline_risk_profile.secondary_htn_etiology:

Subgroup Description Prevalence Key Characteristics
PA Primary Aldosteronism ~21% 12× AF risk, 2.05× HF risk, IXA-001 target
OSA Obstructive Sleep Apnea ~15% Enhanced response to aldosterone-targeting
RAS Renal Artery Stenosis ~11% High renal risk, moderate treatment response
Pheo Pheochromocytoma ~1% Poor ASI response, requires alpha/beta blockade
Essential Essential Hypertension ~52% Standard baseline risk

Microsimulation Results by Subgroup (20-Year, Societal Perspective)

Subgroup N Mean Cost IXA Mean Cost Spiro Δ Cost Mean QALYs IXA Mean QALYs Spiro Δ QALYs ICER ($/QALY)
PA 425 $164,240 $143,690 +$20,550 4.550 4.466 +0.084 $245,441
OSA 305 $134,132 $100,887 +$33,245 5.667 5.539 +0.129 $258,370
RAS 221 $145,188 $119,282 +$25,906 4.278 4.186 +0.092 $281,298
Essential 1,030 $142,725 $114,157 +$28,568 5.574 5.636 -0.062 DOMINATED

Event Prevention Analysis (PA Subgroup)

Event IXA-001 Spironolactone Events Prevented Rate Ratio
MI 21 39 +18 0.54
Stroke 27 48 +21 0.56
Heart Failure 24 41 +17 0.59
New AF 225 258 +33 0.87
CV Deaths 271 270 -1 1.00

Key Finding: In PA patients, IXA-001 prevents substantially more MI (18), stroke (21), HF (17), and AF (33) events compared to spironolactone over 20 years.

Atrial Fibrillation Prevention (NEW Outcome)

Subgroup AF Events (IXA-001) AF Events (Spiro) AF Prevented Clinical Significance
PA 225 258 +33 Primary aldosterone-mediated outcome
OSA 72 77 +5 Moderate benefit
RAS 41 44 +3 Minimal benefit
Essential 238 238 0 No differential

Cost Component Analysis

The incremental drug cost of IXA-001 over 20 years is approximately $116,400 (($500 - $15) × 12 months × 20 years). Event cost savings partially offset this premium:

Subgroup Drug Cost Premium Event Cost Savings Indirect Cost Diff Net Incremental Cost
PA $116,400 ~$95,850 +$368 $20,550
OSA $116,400 ~$83,155 +$594 $33,245
RAS $116,400 ~$90,494 -$94 $25,906
Essential $116,400 ~$87,832 -$634 $28,568

Key Finding: Event cost savings from prevented MI, stroke, HF, and AF offset 72-83% of the drug cost premium.

Threshold Price Analysis (at $150,000/QALY WTP)

Subgroup Current ICER Δ QALYs Threshold Price Price Reduction Needed
PA $245,441 +0.084 $467/month 6.7%
OSA $258,370 +0.129 $442/month 11.6%
RAS $281,298 +0.092 $450/month 10.1%
Essential DOMINATED -0.062 N/A N/A

Key Findings and Clinical Recommendations

1. PA Patients Are the Primary Value Driver

  • Largest event reduction: 18 fewer MIs, 21 fewer strokes, 17 fewer HF events, 33 fewer AF events
  • Positive QALY gain: +0.084 QALYs over 20 years
  • Achievable cost-effectiveness: Only 6.7% price reduction needed
  • Mechanism: Aldosterone synthase inhibition directly addresses the pathophysiology

2. OSA Patients Show Meaningful Benefit

  • Highest QALY gain: +0.129 QALYs (enhanced treatment response)
  • Moderate AF prevention: 5 cases prevented
  • Price sensitivity: 11.6% reduction achieves CE threshold

3. Essential HTN Patients Should NOT Receive IXA-001

  • Negative QALY differential: -0.062 QALYs (IXA-001 worse than Spironolactone)
  • Treatment is dominated: Higher cost AND worse outcomes
  • Rationale: No aldosterone-specific pathophysiology to target
  • Recommendation: Exclude from IXA-001 formulary coverage

4. Pheochromocytoma Requires Different Treatment

  • Sample too small for robust analysis (n=19)
  • Pathophysiology requires catecholamine control, not aldosterone inhibition
  • Recommendation: Contraindication for IXA-001

Subgroup-Specific Pricing Strategy

Tier Subgroups Recommended Price Expected ICER Rationale
Tier 1 PA $467/month ~$150,000 Core target population
Tier 2 OSA, RAS $445/month ~$150,000 Secondary responders
Exclude Essential, Pheo N/A N/A No benefit / contraindicated

Sensitivity Analysis Drivers

Parameter Base Case Impact on ICER
IXA-001 monthly cost $500 ±$100 → ICER ±$95,000
IXA-001 SBP reduction 20 mmHg ±5 mmHg → ICER ±$60,000
PA treatment modifier 1.70 ±0.2 → ICER ±$40,000
AF event cost $8,500 ±$3,000 → ICER ±$15,000
Time horizon 20 years 40 years → ICER -30%
Discount rate 3% 5% → ICER +20%

Conclusions

  1. IXA-001 is not cost-effective at current pricing ($500/month) for any subgroup at the $150,000/QALY WTP threshold

  2. PA patients are the optimal target population with the highest event prevention and smallest price reduction needed (6.7%)

  3. AF prevention is a key value differentiator for IXA-001, particularly in PA patients (33 events prevented)

  4. Essential HTN is a contraindication for IXA-001 due to dominated outcomes

  5. A tiered pricing strategy with ~$467/month for PA and ~$445/month for OSA/RAS achieves cost-effectiveness while excluding inappropriate populations

  6. Event cost savings offset 72-83% of drug premium, making the net budget impact more favorable than gross drug cost suggests


Economic Evaluation

Costs (Updated with AF)

1. State-Specific Costs (Monthly)

State Monthly Cost Source
CKD Stage 1-2 $250 Surveillance
CKD Stage 3a $400 Increased monitoring
CKD Stage 3b $550 Nephrology consults
CKD Stage 4 $1,200 Pre-dialysis management
ESRD $7,500 Dialysis or transplant
Post-MI $800 Cardiac rehab, meds
Post-Stroke $1,000 Neurology, rehab
Chronic HF $1,500 HF clinic, devices
Chronic AF $708 Anticoagulation, monitoring

2. Event Costs (One-Time)

Event Acute Cost Source
Myocardial Infarction $25,000 Hospitalization, cath lab
Ischemic Stroke $15,200 ICU, imaging, rehab
Hemorrhagic Stroke $22,500 Neurosurgery, ICU
Heart Failure Admission $18,000 Inpatient stay
New Atrial Fibrillation $8,500 Cardioversion, anticoagulation initiation
ESRD Initiation $12,000 Access creation, training

3. Treatment Costs

Treatment Monthly Cost Notes
Standard Care $75 Background therapy
Spironolactone $15 Generic MRA
IXA-001 $500 Novel ASI
SGLT2 Inhibitor $450 Add-on for CKD/HF
Potassium Binder $500 If hyperkalemia

4. Indirect Costs (Societal Perspective)

Component Value Application
Daily Wage $240 (US) Working age <65
MI Absenteeism 7 days One-time
Stroke Absenteeism 30 days One-time
HF Absenteeism 5 days One-time
Stroke Disability 20% annual wage Chronic
HF Disability 15% annual wage Chronic

Quality of Life (Utilities)

Base Utilities by Age:

  • Age 40-50: 0.87
  • Age 50-60: 0.84
  • Age 60-70: 0.81
  • Age 70-80: 0.77
  • Age 80+: 0.72

Disutilities by Condition:

Condition Utility Decrement Source
Post-MI -0.12 Lacey 2003
Post-Stroke -0.18 Luengo-Fernandez 2013
Chronic HF -0.15 Calvert 2021
Chronic AF -0.05 Dorian 2000
ESRD -0.35 Wasserfallen 2004
MCI -0.05 Andersen 2004
Dementia -0.30 Wlodarczyk 2004

Acute Event Disutilities (1 month only):

Event Disutility
Acute MI -0.20
Acute Ischemic Stroke -0.35
Acute Hemorrhagic Stroke -0.50
Acute HF -0.25
New AF -0.15

Technical Implementation

File Structure

hypertension_microsim/
├── streamlit_app.py           # Streamlit web interface
├── src/
│   ├── __init__.py
│   ├── patient.py              # Patient dataclass with AF tracking
│   ├── population.py           # Population generation
│   ├── risk_assessment.py      # GCUA, KDIGO, Framingham + PA modifiers
│   ├── history_analyzer.py     # Dynamic risk modification
│   ├── treatment.py            # Treatment effects & safety rules
│   ├── simulation.py           # Core engine with AF and indirect costs
│   ├── transitions.py          # CV events + AFTransition class
│   ├── psa.py                  # Probabilistic sensitivity analysis
│   ├── utilities.py            # QALY calculations with AF disutility
│   ├── costs/
│   │   └── costs.py            # Direct + indirect costs, AF costs
│   └── risks/
│       ├── prevent.py          # AHA PREVENT equations
│       ├── kfre.py             # Kidney Failure Risk Equation
│       └── life_tables.py      # Background mortality
├── scripts/
│   ├── run_demo.py             # Basic CEA demo runner
│   ├── run_cea_from_excel.py   # Excel interface runner
│   └── run_psa_demo.py         # PSA demo/analysis runner
├── tests/
├── docs/                       # HTA documentation suite
└── README.md

Key Classes

1. AFTransition Class (NEW)

class AFTransition:
    """Manages new-onset atrial fibrillation incidence."""

    BASE_AF_INCIDENCE = {40: 0.002, 50: 0.004, 60: 0.010, 70: 0.025, 80: 0.050}

    def check_af_onset(self, patient: Patient) -> bool:
        """
        Check for new-onset AF with risk modifiers:
        - PA: 12× baseline risk
        - IXA-001: 60% risk reduction in PA
        - Spiro: 40% risk reduction in PA
        - HF: 4× additional risk
        """

2. SimulationResults Dataclass (Updated)

@dataclass
class SimulationResults:
    # Primary outcomes
    total_costs: float = 0.0
    total_indirect_costs: float = 0.0  # NEW: Productivity loss
    total_qalys: float = 0.0

    # Event counts
    mi_events: int = 0
    stroke_events: int = 0
    hf_events: int = 0
    new_af_events: int = 0  # NEW: AF tracking
    cv_deaths: int = 0

    # Per-patient averages
    mean_costs: float = 0.0  # Direct only
    mean_indirect_costs: float = 0.0  # NEW
    mean_total_costs: float = 0.0  # NEW: Direct + Indirect
    mean_qalys: float = 0.0

3. CEAResults Dataclass (Updated)

@dataclass
class CEAResults:
    intervention: SimulationResults
    comparator: SimulationResults
    incremental_costs: float = 0.0
    incremental_qalys: float = 0.0
    icer: Optional[float] = None
    dominance_status: str = ""
    economic_perspective: str = "societal"  # NEW: "healthcare_system" or "societal"

Usage

Basic Example

from src.simulation import run_cea, print_cea_results

# Run CEA with societal perspective (includes indirect costs)
cea = run_cea(
    n_patients=1000,
    time_horizon_years=20,
    seed=42,
    perspective="US",
    economic_perspective="societal"  # NEW: Include indirect costs
)

print_cea_results(cea)

Subgroup Analysis

from src.population import PopulationGenerator, PopulationParams
from src.simulation import Simulation, SimulationConfig, CEAResults
from src.patient import Treatment
import copy

# Generate population
pop_params = PopulationParams(n_patients=2000, seed=42)
gen = PopulationGenerator(pop_params)
all_patients = gen.generate()

# Filter PA patients
pa_patients = [p for p in all_patients
               if p.baseline_risk_profile.secondary_htn_etiology == "PA"]

# Configure simulation
config = SimulationConfig(
    time_horizon_months=240,
    economic_perspective="societal",
    show_progress=False
)
sim = Simulation(config)

# Run both arms
results_ixa = sim.run(copy.deepcopy(pa_patients), Treatment.IXA_001)
results_spi = sim.run(copy.deepcopy(pa_patients), Treatment.SPIRONOLACTONE)

# Calculate ICER
cea = CEAResults(
    intervention=results_ixa,
    comparator=results_spi,
    economic_perspective="societal"
)
cea.calculate_icer()

print(f"PA Subgroup ICER: ${cea.icer:,.0f}/QALY")
print(f"AF Events Prevented: {results_spi.new_af_events - results_ixa.new_af_events}")

Documentation

Complete HTA documentation suite available in docs/:

Document Description
Technical Documentation Master technical guide
Risk Equations PREVENT, KFRE coefficients, life tables
Cost Inputs Drug/event costs, indirect costs
Utility Values EQ-5D values, disutilities
Model Validation 76 tests, external calibration
PSA Parameters 47 parameters, correlations
Subgroup Methods 5 dimensions, 17 categories
Background Mortality SSA/ONS life tables
History Analyzer Trajectory classification

All reports are CHEERS 2022 compliant (12/12 items).


Companion Model: Budget Impact

This CEA model has a companion Budget Impact Model (BIM) at hypertension-bim for payer budget planning.

Model Comparison

Aspect CEA (This Model) BIM
Purpose Detailed clinical outcomes, HTA submissions Payer budget planning, formulary decisions
Audience HTA bodies, clinical researchers Budget holders, formulary committees
Model Type Individual-level state-transition Cohort-based budget impact
Time Resolution Monthly cycles Annual aggregations
Risk Stratification GCUA, EOCRI, KDIGO, Framingham phenotypes Age, CKD stage, prior CV, diabetes

When to Use Each Model

Question Use Model
"What is the ICER for IXA-001?" CEA (this model)
"Is IXA-001 cost-effective in PA patients?" CEA (this model)
"How do phenotype modifiers affect ESRD progression?" CEA (this model)
"What will IXA-001 cost my health plan?" BIM
"What price makes IXA-001 budget-neutral?" BIM
"What's the Year 3 budget impact at 30% uptake?" BIM

References

Clinical References

  1. Monticone S, et al. Cardiovascular events and target organ damage in primary aldosteronism. JACC. 2018;71(21):2638-2649. [PA risk modifiers]

  2. Khan SS, et al. Development and Validation of the PREVENT Equations. Circulation. 2024;149(6):430-449. [CV risk prediction]

  3. Tangri N, et al. KFRE predictive model for CKD progression. JAMA. 2011;305(15):1553-1559. [Renal progression]

  4. Laffin LJ, et al. Baxdrostat for treatment-resistant hypertension. NEJM. 2023. [IXA-001 efficacy]

  5. Williams B, et al. PATHWAY-2 trial: Spironolactone in resistant HTN. Lancet. 2015. [Spironolactone efficacy]

Health Economics References

  1. Briggs A, et al. Decision Modelling for Health Economic Evaluation. Oxford University Press. 2006.

  2. Sanders GD, et al. Recommendations for CEA in Health and Medicine. JAMA. 2016;316(10):1093-1103.

  3. Husereau D, et al. CHEERS 2022 Reporting Guidelines. BMJ. 2022;376:e067975.

AF-Specific References

  1. Benjamin EJ, et al. Risk factors for AF: Framingham Heart Study. Circulation. 1994;89(2):724-730. [AF incidence]

  2. Dorian P, et al. Quality of life in AF patients. JACC. 2000. [AF utilities]

  3. Kim MH, et al. Incremental healthcare costs in AF. Circ CV Qual Outcomes. 2011. [AF costs]


Version History

Version Date Changes
4.0 Feb 2026 Option B structural changes: AF tracking, elevated PA event rates, societal perspective
3.0 Feb 2026 Phase 3 complete: Cognitive decline, white coat HTN, clinical inertia
2.0 Jan 2026 SGLT2 integration, hyperkalemia management, PSA module
1.0 Dec 2025 Initial release with dual cardiac-renal branches

Version: 4.0 Last Updated: February 2026 Model Validation Status: Phase 4 Complete - AF tracking, indirect costs, and PA-specific structural enhancements implemented and verified.

About

Cost-effectiveness microsimulation model for IXA-001 (aldosterone synthase inhibitor) vs Spironolactone in resistant hypertension. Features dual-branch phenotyping, PA risk modifiers, AF tracking, and interactive Streamlit dashboard.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •