Signature
NMB_s = lambda * Q_s - C_s; NMB_k = lambda * Q_k - C_k; L_k = NMB_s - NMB_k
| Inputs | Definition | Unit |
|---|---|---|
lambda | Value placed on one QALY at which both net monetary benefits are calculated | currency per QALY |
Q_s | Expected total discounted QALYs per person of strategy s | QALYs per person |
C_s | Expected total cost per person of strategy s | currency per person |
Q_k | Expected total discounted QALYs per person of strategy k | QALYs per person |
C_k | Expected total cost per person of strategy k | currency per person |
NMB_s | Net monetary benefit of strategy s, the strategy with the highest net monetary benefit at lambda | currency per person |
|---|---|---|
NMB_k | Net monetary benefit of strategy k at lambda | currency per person |
L_k | Net monetary benefit of the chosen strategy s less that of strategy k at the value lambda | currency per person |
Function
Cost-effectiveness frontier from the expected costs and QALYs of mutually exclusive strategies
Maps the expected total costs C_j and expected total QALYs Q_j of a set of mutually exclusive strategies, estimated for one population, perspective and time horizon, to the strategies on the cost-effectiveness frontier, the slopes of the segments joining them and, at a value λ placed on one QALY, the strategy chosen. It builds on live records and does not restate them. The dominance screen is HE-FM-DOM-001 and HE-FM-DOM-002, the extended dominance condition and the blend of neighbours are HE-FM-EXD-001 and HE-FM-EXD-002, the ratio between adjacent frontier strategies is the sequential ICER HE-FM-CEA-001 and the maximum net monetary benefit rule is HE-FM-NMB-003. This package adds the range of λ over which each frontier strategy is chosen, the net monetary benefit a strategy gives up against the frontier choice, the gradient of the IQWiG efficiency frontier and two computational functions that build the frontier for any number of strategies. Notation follows the Cost-Effectiveness Frontier article.
Computational function
Computational function for the one-pass net monetary benefit search for the cost-effectiveness frontier
Takes the names, expected costs and expected QALYs of any number of strategies and a largest value per QALY of interest, and returns the frontier strategies by the one-pass method of Suen and Goldhaber-Fiebert. It calculates net monetary benefit (HE-FM-NMB-001) for every strategy at every value in a grid made of zero, every positive pairwise ICER up to the largest value and that value itself, and keeps the strategies that come out on top somewhere in the grid, with no rounds of elimination. At one value it also returns the net monetary benefit each strategy gives up, L_k of HE-FM-CEF-002. The Math / Code line shows four strategies at one value, and the R and Python versions take any number of strategies and the whole grid.
Inputs and outputs:
C_1toC_4are the expected costs per person of four strategies, in currency;Q_1toQ_4are their expected QALYs per person;lambdais the value placed on one QALY, zero or above, in currency per QALY;N_1toN_4are their net monetary benefits andN_maxthe highest;L_1toL_4are the net monetary benefits given up, all in currency per person. In the R and Python versionsname,CandQare lists of any length andlambda_maxis the largest value per QALY of interest; they return the frontier strategies in cost order.Assumption: Where two strategies tie for the highest net monetary benefit at a grid value, the R and Python versions keep the one with more QALYs, so an equal-cost strategy with fewer QALYs is not reported at a value of zero. The Excel version takes the first maximum, so dominated strategies, ties included, are screened out first with HE-IM-DOM-002. A strategy lying exactly on a segment ties with its neighbours at one value only, so whether it is reported depends on rounding in floating point (with QALYs of 1.0, 1.1, 1.2 and 1.3 at costs of 1,000 to 4,000 the second strategy is reported and the third is not), where the elimination function HE-CF-CEF-001 keeps both. Strategies whose ratios exceed
lambda_maxare not reported, so the most effective strategy appears only when the grid reaches past the last ratio on the frontier.Worked example (Options A to D at GBP 20,000 per QALY): The net monetary benefits are GBP 70,000, 73,000, 72,000 and 74,000, so D is chosen, as in HE-EX-NMB-004, and A, B and C give up GBP 4,000, 1,000 and 2,000 per person.
C_1 = 10000; Q_1 = 4.0; C_2 = 13000; Q_2 = 4.3; C_3 = 18000; Q_3 = 4.5; C_4 = 22000; Q_4 = 4.8; lambda = 20000; N_1 = 70000; N_2 = 73000; N_3 = 72000; N_4 = 74000; N_max = 74000; L_1 = 4000; L_2 = 1000; L_3 = 2000; L_4 = 0Worked example (Options A to D at the GBP 18,000 switching value): B and D tie at GBP 64,400, and C gives up GBP 1,400, the blend saving of HE-EX-EXD-003.
C_1 = 10000; Q_1 = 4.0; C_2 = 13000; Q_2 = 4.3; C_3 = 18000; Q_3 = 4.5; C_4 = 22000; Q_4 = 4.8; lambda = 18000; N_1 = 62000; N_2 = 64400; N_3 = 63000; N_4 = 64400; N_max = 64400; L_1 = 2400; L_2 = 0; L_3 = 1400; L_4 = 0Worked example (Options A to D at a value of zero): With no value placed on health the cheapest strategy has the highest net monetary benefit, a limiting case.
C_1 = 10000; Q_1 = 4.0; C_2 = 13000; Q_2 = 4.3; C_3 = 18000; Q_3 = 4.5; C_4 = 22000; Q_4 = 4.8; lambda = 0; N_1 = -10000; N_2 = -13000; N_3 = -18000; N_4 = -22000; N_max = -10000; L_1 = 0; L_2 = 3000; L_3 = 8000; L_4 = 12000Worked example (Article's six options with two largest values): With a largest value of GBP 100,000 per QALY the search returns R0, R1, R4 and R5, the same frontier as the elimination. With GBP 35,000 it returns R0, R1 and R4, since R5 is chosen only above GBP 60,000.
lambda_max = 100000; frontier = R0, R1, R4, R5andlambda_max = 35000; frontier = R0, R1, R4Excel:
=LET(g,TOCOL((Costs-TRANSPOSE(Costs))/(QALYs-TRANSPOSE(QALYs)),3),grid,SORT(UNIQUE(VSTACK(0,MaxValue,FILTER(g,(g>0)*(g<=MaxValue),0)))),UNIQUE(MAP(grid,LAMBDA(l,INDEX(StrategyNames,MATCH(MAX(l*QALYs-Costs),l*QALYs-Costs,0))))))With names, costs and QALYs in column ranges StrategyNames, Costs and QALYs and the largest value in MaxValue, the formula builds the grid, dropping the errors from equal QALYs and returning only 0 and MaxValue when no pairwise ratio is in range, and spills the frontier strategies. It needs Excel for Microsoft 365.R:
cef_nmb <- function(name, C, Q, lambda_max) { g <- outer(C, C, "-")/outer(Q, Q, "-"); grid <- sort(unique(c(0, g[is.finite(g) & g > 0 & g <= lambda_max], lambda_max))); win <- sapply(grid, function(l) { v <- l*Q-C; k <- which(v == max(v)); k[which.max(Q[k])] }); name[unique(win)] }Returns the frontier strategies in the order in which they win as the value rises, which is cost order.Python:
def cef_nmb(name, C, Q, lambda_max): n = len(C); grid = sorted({0, lambda_max} | {(C[j]-C[i])/(Q[j]-Q[i]) for i in range(n) for j in range(n) if Q[j] != Q[i] and 0 < (C[j]-C[i])/(Q[j]-Q[i]) <= lambda_max}); win = [max(range(n), key=lambda k: (l*Q[k]-C[k], Q[k])) for l in grid]; return [name[k] for k in dict.fromkeys(win)]Plain Python with no imports.Test (Article's choices at the two NICE values): At GBP 25,000 per QALY the second option, R1, has the highest net monetary benefit and at GBP 35,000 the fifth, R4. Expected result TRUE. Excel check
=AND(MATCH(MAX(25000*{5;5.1;5.08;5.2;5.3;5.45}-{2000;4000;5500;9000;10000;19000}),25000*{5;5.1;5.08;5.2;5.3;5.45}-{2000;4000;5500;9000;10000;19000},0)=2,MATCH(MAX(35000*{5;5.1;5.08;5.2;5.3;5.45}-{2000;4000;5500;9000;10000;19000}),35000*{5;5.1;5.08;5.2;5.3;5.45}-{2000;4000;5500;9000;10000;19000},0)=5)Test (Most effective option found once the value passes its ratio): At GBP 100,000 per QALY the sixth option, R5, has the highest net monetary benefit. Expected result TRUE. Excel check
=MATCH(MAX(100000*{5;5.1;5.08;5.2;5.3;5.45}-{2000;4000;5500;9000;10000;19000}),100000*{5;5.1;5.08;5.2;5.3;5.45}-{2000;4000;5500;9000;10000;19000},0)=6Common error (A coarse grid of round values): For options A to D, B is chosen only for values per QALY at or above GBP 10,000 and at or below GBP 18,000. A grid of 0, 20,000 and 40,000 returns A and D only, so B drops out of the frontier and the choice at GBP 15,000 is misread as A, which gives up GBP 1,500 per person against B (computed here for illustration). Suen and Goldhaber-Fiebert include every positive pairwise ICER in the grid to prevent this.
Source: Suen S, Goldhaber-Fiebert JD. An efficient, non-iterative method of identifying the cost-effectiveness frontier. Medical Decision Making. 2016;36(1) 132-136. Introduction and the one-line Matlab implementation that takes the maximum of net monetary benefit over a vector of willingness-to-pay values, section II of the proof, which states that a grid of all positive pairwise ICERs with 0 and the maximum willingness to pay relevant to the analysis is guaranteed to identify all desired frontier strategies, section III on the lowest-cost strategy at zero and the highest-QALY strategy as the value grows without limit, and Figure 2, where not testing a value between two switching values omits a strategy.
N_1 = lambda * Q_1 - C_1; N_2 = lambda * Q_2 - C_2; N_3 = lambda * Q_3 - C_3; N_4 = lambda * Q_4 - C_4; N_max = max(N_1, N_2, N_3, N_4); L_1 = N_max - N_1; L_2 = N_max - N_2; L_3 = N_max - N_3; L_4 = N_max - N_4
Try this function
Implementations
Excel
Net monetary benefit given up against the best of all strategies
With the costs of all strategies in Costs, their QALYs in QALYs, the value in ValuePerQALY and the strategy assessed in CostStrategy and QALYStrategy, the formula subtracts the strategy's net monetary benefit from the highest one. SUMPRODUCT makes older versions of Excel evaluate the array inside MAX without array entry.
=SUMPRODUCT(MAX(ValuePerQALY*QALYs-Costs))-(ValuePerQALY*QALYStrategy-CostStrategy)
Assumptions
Chosen strategy found among the complete set of strategies
Strategy s has the highest net monetary benefit at λ among every strategy in the analysis. If L_k comes out negative for some k, s was not the highest and the choice has to be corrected first.
Stated value per QALY for the net monetary benefit given up
L_k depends on λ and is reported with it. It is a per-person amount on expected values, and the same comparison made in QALYs divides it by λ, which gives the net health benefit form that PMG36 asks for.
Worked examples
Extendedly dominated programme R3 against R1 at GBP 25,000 per QALY
At GBP 25,000 per QALY the frontier choice in the article's illustrative example is R1, with a net monetary benefit of GBP 123,500 per person against GBP 121,000 for R3, so R3 gives up GBP 2,500 per person.
lambda = 25000; Q_s = 5.10; C_s = 4000; Q_k = 5.20; C_k = 9000; NMB_s = 123500; NMB_k = 121000; L_k = 2500
Programme R3 at the GBP 30,000 switching value of the frontier
At GBP 30,000 per QALY, the slope of the segment from R1 to R4 beneath R3, R1 and R4 tie at GBP 149,000 and R3 reaches GBP 147,000, as in the article. The gap of GBP 2,000 is the smallest R3 ever gives up and equals the saving of the half-and-half blend of R1 and R4 in the article's line test, GBP 9,000 against GBP 7,000.
lambda = 30000; Q_s = 5.10; C_s = 4000; Q_k = 5.20; C_k = 9000; NMB_s = 149000; NMB_k = 147000; L_k = 2000
Frontier programme R5 outside its threshold range at GBP 35,000 per QALY
R5 is on the frontier but is chosen only above GBP 60,000 per QALY. At GBP 35,000 the choice is R4, with GBP 175,500 per person against GBP 171,750 for R5, so R5 gives up GBP 3,750. A place on the frontier does not by itself make a strategy the choice.
lambda = 35000; Q_s = 5.30; C_s = 10000; Q_k = 5.45; C_k = 19000; NMB_s = 175500; NMB_k = 171750; L_k = 3750
Chosen programme R4 measured against itself at GBP 35,000 per QALY
With k equal to the chosen strategy the amount given up is zero, a limiting case that checks the implementation.
lambda = 35000; Q_s = 5.30; C_s = 10000; Q_k = 5.30; C_k = 10000; NMB_s = 175500; NMB_k = 175500; L_k = 0
Common errors
Measuring the net monetary benefit given up against usual care
At GBP 35,000 per QALY R3 and usual care R0 both have a net monetary benefit of GBP 173,000, so the incremental net monetary benefit of R3 over R0 is zero and R3 can look acceptable. Against the frontier choice R4 it gives up GBP 2,500 per person.
Reading the switching-value gap as the loss at every threshold
The GBP 2,000 gap for R3 at GBP 30,000 per QALY is its smallest loss. At GBP 25,000 and at GBP 35,000 it gives up GBP 2,500 per person, so the gap is recomputed at each value reported.
Sources
Suen and Goldhaber-Fiebert on dominated strategies never having the highest net monetary benefit
Suen S, Goldhaber-Fiebert JD. An efficient, non-iterative method of identifying the cost-effectiveness frontier. Medical Decision Making. 2016;36(1) 132-136. Introduction, which defines net monetary benefit as benefits converted to money at a given willingness to pay minus costs, and section III of the proof, which shows that strategies that are strictly dominated or dominated by extended dominance never have the highest net monetary benefit for any positive willingness to pay, and section II, equation 10, which shows a frontier strategy has the largest net monetary benefit at the slope between the strategies either side of it.
NICE PMG36 on net health benefits alongside ICERs with several comparators
National Institute for Health and Care Excellence. NICE technology appraisal and highly specialised technologies guidance, the manual (PMG36). Chapter 4, economic evaluation. Published 31 January 2022, last updated 13 October 2026. Section 4.2.16, which asks for expected net health benefits as well as ICERs, particularly informative when there are several technologies or comparators, using values placed on a QALY gain of GBP 25,000 and GBP 35,000, and notes that net monetary benefits can also be shown, and section 4.10.8 on the same two values.
Canonical Identity
Stable URI · Machine-readable · Resolvable · CC BY 4.0
