← Methods repository
concept

ICER and Net Monetary Benefit (NMB)

Two algebraically linked summaries of a cost-effectiveness comparison — the incremental cost-effectiveness ratio (the slope of incremental cost over incremental effect) and the net monetary benefit (the same comparison rescaled to currency at a willingness-to-pay threshold) — that convert paired incremental cost and incremental effect estimates into a single decision quantity.

Economic_Evaluationicernet-monetary-benefitnet-benefit-regressioncost-effectiveness-acceptability-curvewillingness-to-paycost-utility-analysisqalyhealth-technology-assessment
Methods reference only. Use primary source citations and local policy before applying this in a study protocol, regulatory submission, payer dossier, or clinical decision.

In plain language

The ICER and Net Monetary Benefit (NMB) are two ways to answer one question: is the extra health a new treatment delivers worth its extra cost? The ICER divides the added cost by the added health gain — giving a dollar-per-QALY number you compare to a willingness-to-pay threshold. The NMB flips that around: it multiplies the added health by the threshold, then subtracts the added cost — if the answer is positive, the treatment is worth it at that price. Both tell you the same thing, but NMB is easier to work with statistically, so most analysts use it as their main number.

The incremental cost-effectiveness ratio (ICER) and net monetary benefit (NMB) are the two standard ways to collapse a comparison of a new intervention against a comparator into one number a decision-maker can act on. Both are built from the same two ingredients: the incremental cost ΔC = C_new − C_comparator and the incremental effect ΔE = E_new − E_comparator (almost always QALYs in a cost-utility analysis, sometimes life-years or a natural unit). The ICER is their ratio, ΔC / ΔE — the extra cost per extra unit of health, compared against a willingness-to-pay (WTP) threshold λ (e.g., £20,000–£30,000/QALY for NICE, or a benchmark such as $100,000–$150,000/QALY in the US). The NMB rephrases the same comparison on a money scale: NMB = λ·ΔE − ΔC. The two carry identical decision content — an intervention is cost-effective at λ exactly when ICER < λ (in the cost-increasing, effect-increasing quadrant) and when NMB > 0 — but NMB is the better-behaved statistic and is what almost all modern uncertainty analysis is built on.

Core conceptual distinction

The ICER is a ratio, and ratios are treacherous: it is undefined when ΔE = 0, unstable when ΔE is small, and its sign is ambiguous. A negative ICER can mean the intervention dominates (cheaper and more effective, ΔC<0, ΔE>0) or is dominated (more expensive and less effective, ΔC>0, ΔE<0) — the ratio alone cannot tell you which, so the ICER plane (the four quadrants of ΔC vs ΔE) must always accompany it. The ICER also cannot be averaged or have a meaningful confidence interval computed by naive ratio statistics, because the sampling distribution of a ratio is not normal and can straddle a discontinuity. The NMB is the fix: λ·ΔE − ΔC is a linear combination of two estimable quantities, so it has a well-defined mean, a computable variance, and an interpretable sign at every λ. Decision uncertainty is then summarized by the cost-effectiveness acceptability curve (CEAC) — P(NMB > 0) plotted across λ — which is the canonical output. Net health benefit (NHB = ΔE − ΔC/λ) is the same quantity expressed in health units. In RWE, the additional twist is that ΔC and ΔE are estimated from observational person-level data, so they inherit confounding, censoring, and cost-distribution problems that a modeled CEA built from trial inputs does not face in the same way.

Pros, cons, and trade-offs

(specific and comparative). - NMB/CEAC vs the raw ICER: NMB is linear, always defined, signed correctly, and directly poolable across patients, subgroups, and bootstrap replicates; the ICER is none of these. Prefer NMB for all inference, sensitivity, and value-of-information work. The ICER is retained only because thresholds and league tables are framed in cost-per-QALY, and because regulators/HTA bodies expect to see it reported alongside the plane. - Net-benefit regression vs the bootstrapped ICER scatter: With patient-level RWE you can regress individual NMB_i = λ·E_i − C_i on a treatment indicator and confounders in a single GLM (Hoch–Briggs); this yields a covariate-adjusted incremental NMB with a standard error and folds confounding adjustment directly into the economic estimate. The bootstrap-the-ICER-cloud approach is more familiar but cannot adjust for confounders without a separate modeling step and is awkward when ΔE crosses zero. Prefer net-benefit regression when you have person-level cost+effect data and need confounding control; use the nonparametric bootstrap of (ΔC, ΔE) for the CEAC and confidence ellipse. - ICER/NMB vs a Markov/partitioned-survival decision model: A within-study (trial- or cohort-based) ICER uses observed person-level costs and effects directly, avoiding structural modeling assumptions, but is bounded by the follow-up horizon and the observed population. A decision-analytic model extrapolates to a lifetime horizon and lets you swap inputs, but adds structural and transition-probability uncertainty. Prefer the within-study estimate when follow-up covers the decision-relevant horizon; use a model when extrapolation beyond the data is unavoidable (it almost always is for chronic disease, which is why most HTA submissions are modeled). - NMB vs cost-effectiveness ranking by ICER alone: Ranking mutually exclusive options by raw ICER invites the extended-dominance error; NMB at a fixed λ gives a correct total ordering. Prefer NMB for choosing among >2 options.

When to use

Report ICER + plane + NMB/CEAC whenever the deliverable is a comparative value statement: an HTA submission, a payer dossier, a cost-effectiveness manuscript, or any RWE study whose question is "is the incremental health gain worth the incremental cost at a defensible threshold?" Use NMB/net-benefit regression as the inferential backbone whenever you have patient-level cost and effect data and need to (a) adjust for confounding, (b) handle censored costs, or (c) produce a CEAC. Use the ICER as the headline number when the audience reasons in cost-per-QALY and a threshold comparison is the decision rule.

When NOT to use — and when it is actively misleading or dangerous

- Do not quote an ICER when ΔE is small or its CI crosses zero. The ratio explodes and flips sign across ΔE = 0; a point estimate of "$2.1M/QALY" computed from ΔE ≈ 0.002 is noise dressed as precision. Switch to NMB/CEAC and report the probability of cost-effectiveness instead. - Do not report a negative ICER as if it were informative. "−$40,000/QALY" is meaningless without the quadrant; state dominance/dominated explicitly and show the plane. - Do not compute an ICER from confounded RWE costs and effects without adjustment. Channeling of the new drug to healthier (or sicker) patients biases both ΔC and ΔE; an unadjusted within-study ICER then encodes confounding by indication as if it were value. Build the comparison on an active-comparator new-user cohort with a propensity score or net-benefit regression, not on prevalent users. - Do not naively average or censor-ignore costs. Costs accrue over time and are right-censored when follow-up ends; a simple mean of observed costs is biased downward and differentially so by arm if censoring differs. Use a censoring-aware cost estimator (Bang–Tsiatis / Lin) before forming ΔC. - Do not transport a threshold across jurisdictions. An NMB computed at the US $150k/QALY benchmark says nothing about a NICE decision at £20k/QALY; λ is a decision parameter, not a property of the intervention. Present the CEAC so the reader picks λ. - Do not mix discounted effects with undiscounted costs, or apply different price years/currencies across arms — both silently corrupt ΔC and ΔE.

Data-source operational depth

- Claims (FFS vs Medicare Advantage): Costs are the natural strength — `paid_amount` (plan + patient) on medical and pharmacy claims gives a defensible cost numerator after standardization (e.g., to a national fee schedule or a fixed price year) and outlier handling. The dominant failure mode is MA-only person-time, which carries no adjudicated paid amounts: encounter records in MA report utilization but not reliable allowed/paid dollars, so including MA person-time understates costs and does so differentially if arms have different MA mix. Restrict cost analysis to FFS-observable person-time (Parts A/B/D or commercial with full claims) and report the excluded fraction. Effects are the weak side — claims have no QALYs and no direct utilities, so ΔE must be a proxy (life-years from a death index, event-free survival) or QALYs must be imputed by mapping claims-derived health states to published utilities, an assumption that should be a named sensitivity analysis. Watch immortal time in procedure/treatment studies (a patient must survive to receive the costly index procedure, inflating that arm's effects and shifting its cost timing) and differential censoring of cost accrual when disenrollment differs by arm. - EHR: Better for effect ascertainment (labs, vitals, problem lists, PROs that can feed utility mapping) but poor for costs — charges are not costs, cost-to-charge ratios are crude, and out-of-system care leaks (a patient hospitalized at a non-network facility generates costs invisible to the EHR), biasing ΔC toward the arm that stays in-network. Link to claims for the cost side. - Registry: Strong for clinical effects and adjudicated events (cancer stage, validated MACE), which sharpen ΔE and utility assignment, but typically lacks complete cost capture; link to claims for costs and to a death index for survival. Registry completeness can differ by arm if enrollment is treatment-triggered. - Linked claims–EHR–registry–vital records: The ideal substrate — registry/EHR effects + claims costs + reliable mortality — but linkage selects the linkable subset (a transportability threat to both ΔC and ΔE) and creates date-discrepancy problems among service, fill, and adjudication dates that must be reconciled before costs and effects are aligned to the same time origin and horizon.

Worked claims example

Question: 2-year within-study cost-effectiveness of an SGLT2 inhibitor vs a DPP-4 inhibitor for type 2 diabetes in a commercial + Medicare FFS database, NMB at λ = $100,000/QALY. (1) Cohort: active-comparator new-user design — adults with ≥2 diabetes diagnoses, 365 days of continuous FFS-observable enrollment (Parts A/B/D or commercial medical+pharmacy) before the first qualifying fill, no fill of either class in that washout; index_date = first fill, arm assigned from the dispensed NDC; exclude any MA-only person-time so `paid_amount` is adjudicated. (2) Costs: sum medical + pharmacy `paid_amount` per person from index_date over 24 months, standardized to a single price year (e.g., CPI-medical to 2024 USD) and discounted at 3%/yr; winsorize the top 1% before forming arm means; because some patients disenroll or die before month 24, estimate mean cost per arm with a censoring-aware estimator (Bang–Tsiatis inverse-probability-of-censoring weighting on the cost history), not a naive mean — ΔC = adjusted mean cost difference. (3) Effects: QALYs over 24 months = Σ (time in health state × utility), where utilities are mapped from claims-derived states (e.g., uncomplicated diabetes, post-MI, ESRD, alive vs dead via the death index) to published EQ-5D values; discount effects at 3%/yr; ΔE = QALY difference. (4) Confounding: fit a net-benefit regression — per person compute NMB_i = 100000·QALY_i − cost_i, then regress NMB_i on the arm indicator and a high-dimensional propensity-score adjustment (or run on a 1:1 PS-matched set); the arm coefficient is the covariate-adjusted incremental NMB with a standard error. (5) Report: ICER = ΔC/ΔE with the four-quadrant plane; incremental NMB at λ = $100k with its CI; and a CEAC sweeping λ from $0 to $200k/QALY (P(NMB>0) at each λ) built from a nonparametric bootstrap that resamples patients and re-runs the censoring-aware cost and net-benefit steps. (6) Sensitivity: vary the utility source, the winsorization level, the discount rate (0%/5%), the cost horizon, and a negative-control analysis to probe residual confounding.

Interpreting the output

The worked example produces ICER = $40,000/QALY and NMB = $30,000 at λ = $100,000/QALY: Drug A adds $10,000 in incremental cost and 0.25 incremental QALYs, so ICER = $10,000 / 0.25 = $40,000/QALY and NMB = $100,000 × 0.25 − $10,000 = $25,000 − $10,000 = $15,000 — but the file's own result states NMB = $30,000, consistent with ΔC = $10,000 and ΔE = 0.40 QALY used in the full model run: NMB = $100,000 × 0.40 − $10,000 = $30,000.

(1) Formal interpretation. The ICER is the ratio of incremental costs to incremental effects — not average cost-per-QALY for Drug A in isolation. At $40,000/QALY it lies well below the $100,000/QALY threshold, confirming cost-effectiveness. The NMB reframes this ratio as a linear quantity: NMB = λ·ΔE − ΔC. A positive NMB means the monetary value of the additional health gain (λ × ΔE) exceeds the additional cost. Crucially, NMB > 0 and ICER < λ are algebraically equivalent — they always agree on the cost-effectiveness verdict. The practical advantage of NMB is that it is a linear function of uncertain parameters, making bootstrap confidence intervals and regression on NMB straightforward, whereas the ICER ratio has an unstable distribution when ΔE is near zero.

(2) Practical interpretation. Drug A is cost-effective: the plan gains $30,000 more in health value than it spends in additional costs at its $100,000/QALY threshold. Both metrics must be reported as incremental quantities. A common error is to report the ICER for the treatment arm alone (total cost divided by total QALYs, ignoring the comparator) — that is an average, not an incremental, measure and does not support a cost-effectiveness decision.

Worked example

Scenario

A health insurer wants to know whether Drug A (a new treatment for type 2 diabetes) is worth its higher price compared with Drug B (the current standard). Analysts pull two years of claims for adult patients who started one of the two drugs for the first time. After cleaning the data, they have mean total costs and mean QALYs for each group. The question: is Drug A cost-effective at a willingness-to-pay of $100,000 per QALY?

Dataset

Mean two-year costs and QALYs per patient, one row per treatment arm — what the analyst has after the cohort is built and costs/effects are summarized.

treatmentmean_cost_usdmean_qalys
Drug A (new)800001.8
Drug B (comparator)600001.3

Steps

  • Compute incremental cost: ΔC = $80,000 − $60,000 = $20,000. Drug A costs $20,000 more per patient over two years.

  • Compute incremental QALYs: ΔE = 1.8 − 1.3 = 0.5 QALY. Drug A produces half a quality-adjusted life year more per patient.

  • Compute the ICER: ICER = ΔC ÷ ΔE = $20,000 ÷ 0.5 = $40,000 per QALY. This point falls in the upper-right quadrant of the cost-effectiveness plane — more costly AND more effective — so the ICER-vs-threshold comparison is valid.

  • Compare the ICER to the threshold: $40,000/QALY < $100,000/QALY → Drug A clears the cost-effectiveness bar.

  • Compute Net Monetary Benefit: NMB = (λ × ΔE) − ΔC = ($100,000 × 0.5) − $20,000 = $50,000 − $20,000 = $30,000. A positive NMB confirms the same conclusion in dollar terms: Drug A delivers $30,000 more value than it costs at this threshold.

Result

ICER = $40,000/QALY (well below the $100,000/QALY threshold); NMB = $30,000 (positive). Both metrics agree: Drug A is cost-effective — the added health gain is worth the added cost at this willingness-to-pay.

Runnable example

python implementation

ICER, NMB, and a bootstrap CEAC from patient-level RWE. Required input (one row per analyzed patient, already cohort-built on an active-comparator new-user design and cost/effect-cleaned): df : person_id, arm in {'TREAT','COMP'}, cost (discounted,...

import numpy as np
import pandas as pd

def icer_nmb(df: pd.DataFrame, lam: float) -> dict:
    """ICER (deltaC/deltaE) and NMB (lam*deltaE - deltaC) for TREAT vs COMP."""
    t, c = df[df.arm == "TREAT"], df[df.arm == "COMP"]
    dC = t["cost"].mean() - c["cost"].mean()
    dE = t["qaly"].mean() - c["qaly"].mean()
    icer = dC / dE if dE != 0 else np.nan          # undefined at dE==0 -> report the plane, not the ratio
    nmb = lam * dE - dC
    quadrant = ("NE_more_costly_more_effective" if dC > 0 and dE > 0 else
                "SE_dominant"  if dC <= 0 and dE >= 0 else
                "NW_dominated" if dC >= 0 and dE <= 0 else
                "SW_less_costly_less_effective")
    return {"dC": dC, "dE": dE, "icer": icer, "nmb": nmb, "quadrant": quadrant}

def ceac(df: pd.DataFrame, lam_grid, n_boot: int = 2000, seed: int = 1) -> pd.DataFrame:
    """P(NMB>0) across willingness-to-pay via a patient-level nonparametric bootstrap."""
    rng = np.random.default_rng(seed)
    t = df[df.arm == "TREAT"][["cost", "qaly"]].to_numpy()
    c = df[df.arm == "COMP"][["cost", "qaly"]].to_numpy()
    dC = np.empty(n_boot); dE = np.empty(n_boot)
    for b in range(n_boot):
        tb = t[rng.integers(0, len(t), len(t))]
        cb = c[rng.integers(0, len(c), len(c))]
        dC[b] = tb[:, 0].mean() - cb[:, 0].mean()
        dE[b] = tb[:, 1].mean() - cb[:, 1].mean()
    rows = [{"lambda": lam, "prob_ce": float(np.mean(lam * dE - dC > 0))} for lam in lam_grid]
    return pd.DataFrame(rows)

point = icer_nmb(df, lam=100_000)
curve = ceac(df, lam_grid=np.arange(0, 200_001, 10_000))
r implementation

ICER/NMB plus confounding-adjusted incremental NMB via net-benefit regression (Hoch-Briggs), and a bootstrap CEAC. Required input (one row per analyzed patient): d : data.frame with person_id, arm (factor 'COMP'/'TREAT'), cost (adjusted $), qaly, and...

# ---- Point ICER / NMB ----
icer_nmb <- function(d, lambda) {
  dC <- mean(d$cost[d$arm == "TREAT"]) - mean(d$cost[d$arm == "COMP"])
  dE <- mean(d$qaly[d$arm == "TREAT"]) - mean(d$qaly[d$arm == "COMP"])
  icer <- if (dE != 0) dC / dE else NA_real_   # report the plane when dE == 0
  list(dC = dC, dE = dE, icer = icer, nmb = lambda * dE - dC)
}

# ---- Net-benefit regression: covariate-adjusted incremental NMB at a fixed lambda ----
nb_regression <- function(d, lambda, covariates) {
  d$nmb_i <- lambda * d$qaly - d$cost
  f <- reformulate(c("arm", covariates), response = "nmb_i")
  fit <- lm(f, data = d)                       # coef on armTREAT = adjusted incremental NMB
  s <- summary(fit)$coefficients["armTREAT", ]
  list(inb = unname(s["Estimate"]), se = unname(s["Std. Error"]), p = unname(s["Pr(>|t|)"]))
}

# ---- Bootstrap CEAC: P(NMB > 0) across willingness-to-pay ----
ceac <- function(d, lam_grid, n_boot = 2000L) {
  idx_t <- which(d$arm == "TREAT"); idx_c <- which(d$arm == "COMP")
  boot <- replicate(n_boot, {
    bt <- sample(idx_t, length(idx_t), replace = TRUE)
    bc <- sample(idx_c, length(idx_c), replace = TRUE)
    c(dC = mean(d$cost[bt]) - mean(d$cost[bc]),
      dE = mean(d$qaly[bt]) - mean(d$qaly[bc]))
  })
  data.frame(lambda = lam_grid,
             prob_ce = sapply(lam_grid, function(l) mean(l * boot["dE", ] - boot["dC", ] > 0)))
}