Cost-Utility Analysis (CUA)
A form of full economic evaluation that compares two or more interventions on incremental cost per quality-adjusted life-year (QALY) gained, expressing health outcomes in a single preference-weighted, mortality-and-morbidity-combining metric so that disparate interventions can be ranked against a common cost-effectiveness threshold.
In plain language
Cost-utility analysis (CUA) is a specific type of cost-effectiveness analysis that measures the health benefit of a treatment using a single combined score called a QALY (quality-adjusted life-year), which captures both how long a patient lives and how good their quality of life is during that time. To compare two treatments, you compute the extra cost of the new treatment divided by the extra QALYs it produces; this ratio is called the ICER (incremental cost-effectiveness ratio), and payers ask whether that cost per QALY gained is worth it relative to a threshold. CUA is the preferred method for health technology assessment bodies worldwide precisely because QALYs let decision-makers compare a cancer drug against a diabetes drug on the same yardstick. Unlike a plain cost-effectiveness analysis that might count events averted or blood-pressure points lowered, CUA always uses the QALY as its outcome unit.
Cost-utility analysis (CUA)
is the dominant form of full economic evaluation in HTA. It values an intervention's benefit as the quality-adjusted life-year (QALY) — life-years weighted by a utility (preference) score anchored at 0 (dead) and 1 (full health) — and divides the incremental cost of one strategy over its comparator by the incremental QALYs gained, yielding the incremental cost-effectiveness ratio (ICER): `ICER = (Cost_A - Cost_B) / (QALY_A - QALY_B)`. The result is compared against a cost-effectiveness threshold (e.g., a willingness-to-pay of $100,000-$150,000/QALY in the US, or NICE's £20,000-£30,000/QALY) to inform reimbursement and coverage. CUA is the analysis NICE, CDA-AMC (formerly CADTH), and most HTA bodies require, because the QALY makes a cancer drug, a hip replacement, and a statin commensurable on one axis.
Core conceptual distinction
CUA is one branch of full economic evaluation, defined by how it values the outcome. (1) vs cost-effectiveness analysis (CEA): a generic CEA expresses benefit in a natural clinical unit (life-years gained, mmHg lowered, events averted); CUA specifically uses the QALY, a utility-weighted outcome that folds quality of life and survival into one number. Every CUA is a CEA, but not every CEA is a CUA. (2) vs cost-benefit analysis (CBA): CBA monetizes health itself (willingness-to-pay, value of a statistical life), producing a net monetary or benefit-cost ratio and permitting comparison across sectors, but forcing an explicit dollar value on a life-year that many find ethically fraught. (3) vs cost-minimization analysis (CMA): CMA applies only when outcomes are demonstrably equivalent and reduces to comparing costs. The estimand of a CUA is an incremental, comparative quantity — never a standalone "this drug costs $X/QALY" without a named comparator. The decision rule is on net monetary benefit (NMB = λ·ΔQALY − ΔCost) at threshold λ, which avoids the quadrant/sign pathologies of the ratio (an ICER is uninterpretable when ΔQALY < 0, and a dominant strategy and a dominated one produce identical negative ratios despite representing opposite decisions — the signs of ΔCost and ΔQALY differ).
Pros, cons, and trade-offs
(CUA vs the other full-evaluation forms). - vs plain CEA (clinical-unit outcome): CUA's QALY captures morbidity and mortality and is comparable across diseases, which is exactly why HTA bodies mandate it. Cost: the QALY depends on a utility elicitation (EQ-5D/SF-6D/standard gamble/time trade-off) and a country-specific value set, so two analysts can get different QALYs from the same clinical data; for a within-indication safety contrast where utilities barely move, a natural-unit CEA can be cleaner and less assumption-laden. Prefer CUA whenever a payer/HTA decision spans conditions or when quality of life is materially affected. - vs cost-benefit analysis: CUA sidesteps explicitly pricing a life-year and aligns with how health systems actually budget (fixed envelope, opportunity cost in QALYs). Cost: it cannot compare health spending against non-health investments and assumes a known threshold. Prefer CUA for within-health-system reimbursement; reach for CBA only when cross-sectoral or societal monetary comparison is the genuine question. - vs cost-minimization: CMA is simpler but valid only under proven outcome equivalence; assuming equivalence that does not hold silently biases toward the cheaper arm. Prefer CUA unless non-inferiority on the relevant outcome is firmly established.
When to use
— decision rules. Reimbursement/coverage submissions to HTA bodies (NICE, CADTH, PBAC, ICER) where a common cross-disease metric is required; any comparison in which an intervention trades survival against quality of life (oncology, palliative care, chronic disease) so a life-years-only CEA would understate or overstate value; populating a decision-analytic (Markov/partitioned-survival) or trial-based model where utilities are measurable. Use the reference-case conventions of the relevant jurisdiction: stated perspective (healthcare-system vs societal), a lifetime or sufficiently long horizon, and discounting of both costs and QALYs (commonly 3% US, 3.5% UK) so that future health and money are valued consistently.
When NOT to use — and when it is actively misleading or dangerous
(decision rules below). - Outcomes are equivalent. If non-inferiority is established, a CUA's ICER is a 0/0 ratio dominated by noise; use CMA. Reporting an ICER on a near-zero ΔQALY produces wild, uninterpretable ratios. - ΔQALY is negative or near zero. When the more effective-looking arm is actually worse or tied on QALYs, the ICER changes sign and quadrant and becomes meaningless. Always decide on NMB / the cost-effectiveness plane, never on the bare ratio, and present the cost-effectiveness acceptability curve (CEAC). - No defensible utility data. Mapping algorithms or borrowed utilities from a different population/severity can dominate the result; if utilities are weak and the decision does not require cross-disease comparison, a natural-unit CEA is more honest. - Short horizon truncating downstream QALYs. A within-trial CUA that stops at trial end omits lifetime QALY differences and can reverse the decision; either model the horizon or state the limitation prominently. - Cross-jurisdiction transfer without re-basing. Unit costs, utility value sets, comparators, and thresholds are country-specific; a UK reference-case ICER does not transfer to the US without re-costing and re-thresholding.
Data-source operational depth
across substrates. RWE increasingly feeds the cost and resource-use side of CUA, while utilities often come from instruments or the literature; each substrate has distinct failure modes. - Claims (FFS): Excellent for direct medical cost — paid amounts (not charges) on medical and pharmacy claims map cleanly to resource use via `allowed_amount`/`paid_amount`, `fill_date`, `days_supply`. Failure modes: claims carry no utility/QoL data, so the QALY must be imported from instruments or a mapping algorithm; out-of-pocket, over-the-counter, and indirect (productivity) costs are invisible, biasing a societal-perspective CUA; and Medicare Advantage (MA) person-time lacks adjudicated FFS claims, so MA enrollees show artifactually near-zero medical cost — restrict the costing window to FFS (Parts A/B) + Part D enrollment or you will underestimate cost differentially by plan type. - EHR: Captures clinical detail and sometimes PROs (which can yield utilities directly), but records charges or activity, not paid amounts; cost must be approximated via cost-to-charge ratios or fee schedules, and care delivered outside the system (the differential leakage problem) is missing — biasing cost downward differentially for sicker, mobile patients. - Registry: Strong for adjudicated outcomes, disease severity, and often EQ-5D collection (utilities), but typically thin on complete cost; link to claims for the full resource picture and to a death index to anchor survival, which drives life-years and therefore QALYs. - Linked claims–EHR–registry: The ideal substrate — registry/EHR utilities + claims-complete cost + reliable mortality — but linkage selection (only the linkable subset) and date discrepancies across order/fill/service dates must be reconciled before per-period costing windows are drawn. Censored cost is not missing-at-random: patients with longer follow-up accrue more cost, so naïvely averaging observed cost is biased; use inverse-probability-of-censoring-weighted (Bang-Tsiatis) or Lin-style partitioned mean cost estimators.
Worked claims example
Question: lifetime cost per QALY of a new oral oncolytic vs standard-of-care among adults with metastatic disease, costing side from a US commercial + Medicare FFS database, utilities from a published EQ-5D study. (1) Cohort & enrollment: require continuous medical + Part D (or commercial pharmacy) enrollment with no MA-only person-time across each costing period, so paid amounts are observed not missing. (2) Index & arm: `index_date` = first qualifying dispensing of the oral oncolytic (`fill_date`) or first standard-of-care administration; assign arm from that claim. (3) Resource use & cost: sum `paid_amount` across all medical + pharmacy claims in each follow-up period, inflation-adjusted to a common cost year and discounted at 3%/yr from index. Because patients are censored at disenrollment/death/data-end, do not average raw observed cost — estimate mean lifetime cost per arm with an IPCW/partitioned estimator over monthly intervals so the within-interval cost is reweighted for the probability of still being observed. (4) QALYs: derive life-years per arm from a survival model fit to time from index to death (claims death flag plus a linked death index), then weight each interval by the EQ-5D utility for that health state (on-treatment, progression, terminal), discounting QALYs at 3%/yr. (5) Incremental result: `ΔCost / ΔQALY` = ICER; report alongside NMB at λ = $100k and $150k/QALY, the cost-effectiveness plane, a CEAC from a probabilistic (Monte Carlo) sensitivity analysis over cost, utility, and survival parameters, and one-way sensitivity (tornado) on discount rate, utility source, and the costing-window definition. (6) Sensitivity on the MA exclusion and the cost-censoring method, since both can move the ICER materially.
Interpreting the output
The worked example returns an ICER of $60,000 per QALY gained: Drug A costs $24,000 more and produces 0.40 additional QALYs over the comparator, so $24,000 / 0.40 = $60,000/QALY.
(1) Formal interpretation. The ICER is the ratio of incremental cost to incremental QALYs — it is not Drug A's average cost per QALY in isolation. Each additional QALY purchased by choosing Drug A over the comparator costs the payer $60,000. Because $60,000 is below the stated $100,000/QALY threshold, Drug A is cost-effective at this willingness-to-pay level. The QALY unit is what distinguishes CUA from a plain CEA using natural units: QALYs combine length and quality of life into a single preference-weighted metric, enabling cross-disease comparisons. A utility weight of 1.0 represents full health; 0.0 represents a state equivalent to death; values between reflect the preference-weighted fraction of a life-year in that health state.
(2) Practical interpretation. The payer is paying $60,000 for each additional quality-adjusted year of life gained by switching from comparator to Drug A. This falls below the plan's threshold, so Drug A clears the cost-effectiveness bar. The utility weights powering the QALY calculation deserve scrutiny: the source instrument (EQ-5D, SF-6D, HUI), the value set (UK, US), and whether utilities were directly measured or mapped from a disease instrument all affect the QALY magnitude and therefore the ICER. A sensitivity analysis varying the utility source is a mandatory component of any CUA submission.
Worked example
Scenario
A health plan is deciding whether to add a new oral medication for moderate-to-severe plaque psoriasis to its formulary. The new drug (Drug A) costs $38,000 per year and produces an average of 0.82 QALYs per patient per year based on a clinical trial that collected EQ-5D scores. The current standard of care (Drug B) costs $14,000 per year and produces 0.42 QALYs per patient per year. We want to know the cost per QALY gained by switching to Drug A, and whether it clears the plan's $100,000-per-QALY threshold.
Dataset
Arm-level summary inputs an analyst would build from per-patient data before running the ICER calculation.
| arm | annual_cost_usd | avg_qalys_per_year | qaly_components_note |
|---|---|---|---|
| Drug A (new) | 38000 | 0.82 | 1 year x utility 0.82 = 0.82 QALYs |
| Drug B (standard of care) | 14000 | 0.42 | 1 year x utility 0.42 = 0.42 QALYs |
Steps
Compute the QALY for each arm: QALYs = years of follow-up multiplied by the utility score. Drug A: 1 year x 0.82 = 0.82 QALYs. Drug B: 1 year x 0.42 = 0.42 QALYs.
Compute incremental cost: delta_cost = cost of Drug A minus cost of Drug B = $38,000 - $14,000 = $24,000.
Compute incremental QALYs: delta_QALY = QALYs for Drug A minus QALYs for Drug B = 0.82 - 0.42 = 0.40 QALYs.
Compute the ICER: ICER = delta_cost / delta_QALY = $24,000 / 0.40 = $60,000 per QALY gained.
Compare to the threshold: $60,000 per QALY is below the plan's $100,000-per-QALY threshold, so Drug A is considered cost-effective.
Result
ICER = $24,000 / 0.40 QALYs = $60,000 per QALY gained. Because $60,000 is below the $100,000-per-QALY threshold, Drug A is cost-effective at this willingness-to-pay level. Note that cost-utility analysis is simply cost-effectiveness analysis with the QALY as the outcome unit specifically; that precise use of utility-weighted life-years is what distinguishes CUA from a plain cost-effectiveness analysis that might count symptom-free days or disease events instead.
Runnable example
python implementation
Incremental cost-utility analysis from arm-level summaries plus probabilistic sensitivity analysis. Required inputs (one row per arm, produced upstream from censoring-aware per-patient cost and QALY estimation): arms : arm (str), mean_cost (discounted,...
import numpy as np
import pandas as pd
def cua_point(mean_cost: dict, mean_qaly: dict, ref: str, comp: str, wtp: float) -> dict:
# Deterministic incremental CUA for two arms (ref = new strategy, comp = comparator).
d_cost = mean_cost[ref] - mean_cost[comp]
d_qaly = mean_qaly[ref] - mean_qaly[comp]
icer = d_cost / d_qaly if d_qaly != 0 else np.nan # undefined when no QALY difference
nmb_ref = wtp * mean_qaly[ref] - mean_cost[ref]
nmb_comp = wtp * mean_qaly[comp] - mean_cost[comp]
return {"delta_cost": d_cost, "delta_qaly": d_qaly, "icer": icer,
"inmb": nmb_ref - nmb_comp, "preferred": ref if nmb_ref > nmb_comp else comp}
def ceac(cost_draws: pd.DataFrame, qaly_draws: pd.DataFrame, ref: str, comp: str,
wtp_grid=np.arange(0, 200001, 5000)) -> pd.DataFrame:
# cost_draws / qaly_draws: columns are arm names, rows are PSA iterations (same length).
d_cost = cost_draws[ref] - cost_draws[comp]
d_qaly = qaly_draws[ref] - qaly_draws[comp]
rows = []
for wtp in wtp_grid:
inmb = wtp * d_qaly - d_cost # incremental NMB per iteration
rows.append({"wtp": wtp, "p_ref_cost_effective": float((inmb > 0).mean())})
return pd.DataFrame(rows)r implementation
Incremental CUA with ICER, net monetary benefit, and a cost-effectiveness acceptability curve. Inputs mirror the Python version: mean_cost / mean_qaly : named numeric vectors over arms (discounted, common cost-year) cost_draws / qaly_draws :...
cua_point <- function(mean_cost, mean_qaly, ref, comp, wtp) {
d_cost <- mean_cost[[ref]] - mean_cost[[comp]]
d_qaly <- mean_qaly[[ref]] - mean_qaly[[comp]]
icer <- if (d_qaly != 0) d_cost / d_qaly else NA_real_ # undefined when no QALY difference
nmb <- function(a) wtp * mean_qaly[[a]] - mean_cost[[a]]
list(delta_cost = d_cost, delta_qaly = d_qaly, icer = icer,
inmb = nmb(ref) - nmb(comp),
preferred = if (nmb(ref) > nmb(comp)) ref else comp)
}
ceac <- function(cost_draws, qaly_draws, ref, comp,
wtp_grid = seq(0, 2e5, by = 5e3)) {
d_cost <- cost_draws[[ref]] - cost_draws[[comp]]
d_qaly <- qaly_draws[[ref]] - qaly_draws[[comp]]
data.frame(
wtp = wtp_grid,
p_ref_cost_effective = vapply(wtp_grid, function(w) mean((w * d_qaly - d_cost) > 0), numeric(1))
)
}