Signature
y_1 = (Delta_C_1 <= B); y_2 = (y_1 * Delta_C_1 + Delta_C_2 <= B); y_3 = (y_1 * Delta_C_1 + y_2 * Delta_C_2 + Delta_C_3 <= B); H_w = y_1 * Delta_E_1 + y_2 * Delta_E_2 + y_3 * Delta_E_3; U_w = B - (y_1 * Delta_C_1 + y_2 * Delta_C_2 + y_3 * Delta_C_3)
| Inputs | Definition | Unit |
|---|---|---|
Delta_C_1 | Incremental cost of the first programme in ascending ICER order against its comparator, above zero | currency |
B | Budget available for the three programmes | currency |
Delta_C_2 | Incremental cost of the second programme in ascending ICER order against its comparator, above zero | currency |
Delta_C_3 | Incremental cost of the third programme in ascending ICER order against its comparator, above zero | currency |
Delta_E_1 | Incremental health gain of the first programme in ascending ICER order against its comparator, above zero | QALYs, or DALYs averted |
Delta_E_2 | Incremental health gain of the second programme in ascending ICER order against its comparator, above zero | QALYs, or DALYs averted |
Delta_E_3 | Incremental health gain of the third programme in ascending ICER order against its comparator, above zero | QALYs, or DALYs averted |
y_1 | Equals 1 when the first programme in ascending ICER order is funded in full and 0 when it is not funded | binary indicator |
|---|---|---|
y_2 | Equals 1 when the second programme in ascending ICER order is funded in full and 0 when it is not funded | binary indicator |
y_3 | Equals 1 when the third programme in ascending ICER order is funded in full and 0 when it is not funded | binary indicator |
H_w | Total incremental health gain of the programmes funded | QALYs, or DALYs averted |
U_w | Budget less the incremental cost of the programmes funded | currency |
Function
League-table allocation of a fixed budget across independent programmes ranked by ICER
Takes the incremental cost Delta_C_i and incremental health gain Delta_E_i of each of a set of independent programmes, each measured against its own comparator, and a fixed budget B. It returns the share of each programme funded when programmes are funded in ascending order of ICER until the budget is exhausted, the health the budget buys, the critical ratio of the last programme funded and, under the alternative fixed ratio rule, the budget that a stated threshold implies. Each programme's ratio is the two-option ICER of HE-FM-ICER-001, or the ratio against doing nothing of HE-FM-ACER-002 when doing nothing is the comparator, and is not restated here. A league table ranks independent programmes competing for one budget, while mutually exclusive options for the same patients are ranked on the cost-effectiveness frontier (HE-FN-CEF-001, HE-CF-CEF-001), and the table takes such a set at its sequential ratios along the frontier (HE-FM-CEA-001). Ties and cost-saving programmes follow the dominance rule HE-FM-DOM-001, the threshold as marginal spending over marginal health is HE-FM-CET-001, and the health a new programme displaces at a threshold, Delta_C divided by k, and its incremental net health benefit are HE-FM-CET-002. This package adds the funded share of each programme, the critical ratio, the fill for programmes that must be funded whole and the budget implied by a fixed ratio, with a computational function that fills the table for any number of programmes. Notation follows the Cost-Effectiveness League Table article.
Try this function
Implementations
Excel
Whole-programme league-table fill from named cells
With the budget in Budget and the three programmes' incremental costs and QALYs, in ICER order, in CostFirst, CostSecond, CostThird, QALYFirst, QALYSecond and QALYThird, the first three formulas, held in cells named FundFirst, FundSecond and FundThird, return 1 when that programme is funded, the double minus turning TRUE or FALSE into 1 or 0. The fourth returns the health, held in WholeHealth, and the fifth the budget left, held in UnspentBudget.
=--(CostFirst<=Budget); =--(FundFirst*CostFirst+CostSecond<=Budget); =--(FundFirst*CostFirst+FundSecond*CostSecond+CostThird<=Budget); =FundFirst*QALYFirst+FundSecond*QALYSecond+FundThird*QALYThird; =Budget-(FundFirst*CostFirst+FundSecond*CostSecond+FundThird*CostThird)
Assumptions
Whole programmes only in the indivisible league-table fill
Each programme is funded at its full incremental cost or not at all, the case Dakin and Tsiachristas describe as programmes that cannot be partially adopted. Programmes are numbered in ascending order of ICER with both increments above zero, and programmes with equal ICERs are taken in the order given, which can change the result.
A whole programme that does not fit is passed over
When a programme's cost exceeds the budget left, the fill passes over it and tests the next, which agrees with the article's step 3, where neither Q nor R fits after P. The pass-over is the convention of this package; none of the cited sources states which variant a league table of whole programmes uses. Stopping at the first programme that does not fit is the other convention and can buy less health (HE-EX-CELT-009). A programme whose cost equals the budget left fits, since the test is at most B.
Worked examples
Article's whole-programme case with P funded and Q and R left out
In step 3 of the article a second authority has GBP 1,000,000 for whole programmes. P (GBP 600,000, 60 QALYs) heads the table at GBP 10,000 per QALY and is funded, after which neither Q nor R (GBP 500,000 and 40 QALYs each) fits in the GBP 400,000 left, so the fill buys 60 QALYs.
B = 1000000; Delta_C_1 = 600000; Delta_E_1 = 60; Delta_C_2 = 500000; Delta_E_2 = 40; Delta_C_3 = 500000; Delta_E_3 = 40; y_1 = 1; y_2 = 0; y_3 = 0; H_w = 60; U_w = 400000
Whole programme that exactly uses the budget left
With an illustrative budget of GBP 1,100,000, Q exactly fits in the GBP 500,000 left after P, a limiting case for the test at most B, and the fill buys 100 QALYs with nothing left.
B = 1100000; Delta_C_1 = 600000; Delta_E_1 = 60; Delta_C_2 = 500000; Delta_E_2 = 40; Delta_C_3 = 500000; Delta_E_3 = 40; y_1 = 1; y_2 = 1; y_3 = 0; H_w = 100; U_w = 0
Passing over a whole programme that does not fit to fund a smaller one below it
Replacing R with an illustrative programme S (GBP 300,000, 15 QALYs, GBP 20,000 per QALY), Q does not fit after P but S does, so the fill buys 75 QALYs and leaves GBP 100,000. Stopping at Q would buy 60 QALYs.
B = 1000000; Delta_C_1 = 600000; Delta_E_1 = 60; Delta_C_2 = 500000; Delta_E_2 = 40; Delta_C_3 = 300000; Delta_E_3 = 15; y_1 = 1; y_2 = 0; y_3 = 1; H_w = 75; U_w = 100000
Common errors
Reading the whole-programme fill as the best choice of whole programmes
In step 3 of the article the fill buys 60 QALYs, while funding Q and R in place of P spends the same GBP 1,000,000 for 80 QALYs, 20 more. Following the order does not guarantee the best choice of whole programmes, the case integer programming is built for, and the mathematical programming framework of Stinnett and Paltiel handles complete indivisibility directly.
Part-funding an indivisible programme in the league table
Applying the divisible share of HE-FM-CELT-001 to step 3 of the article funds 0.8 of Q and reports 92 QALYs, the 60 of P plus 0.8 of Q's 40, a result that cannot be delivered when Q must be funded whole (computed here for illustration).
Sources
Dakin and Tsiachristas on the 0-1 knapsack problem for programmes that cannot be partially adopted
Dakin H, Tsiachristas A. Rationing in an era of multiple tight constraints: is cost-utility analysis still fit for purpose? Applied Health Economics and Health Policy. 2024;22(3):315-329. Section 2.1, headed Constrained optimisation, which frames the allocation of healthcare resources as a 0-1 knapsack problem of choosing items to maximise value without exceeding a weight constraint or packing more than one of each item, and notes that constrained optimisation may fail to identify the best solution when the constraints are flexible and programmes cannot be partially adopted. Section 2.2 describes the league table as the greedy algorithm for the knapsack problem.
Stinnett and Paltiel on indivisibility in mathematical programming for budget allocation
Stinnett AA, Paltiel AD. Mathematical programming for the efficient allocation of health care resources. Journal of Health Economics. 1996;15(5):641-653. Abstract, which states that previous methods for allocating health care resources subject to a budget constraint relied on unnecessarily restrictive assumptions, and that a general mathematical programming framework can accommodate returns to scale, partial and complete indivisibility and programme interdependence.
Canonical Identity
Stable URI · Machine-readable · Resolvable · CC BY 4.0
