Discounted total of a level yearly amount counted at the end of each year

Gives the present value of the same amount q in each of T years when each year's amount is counted at the end of that year, so the first year carries the factor 1/(1 + r) and the last 1/(1 + r)^T. The fraction (1 minus (1 + r) to the power minus T) divided by r is the sum of the T yearly discount factors, the annuity form in the article's worked example. It tends to T as r falls towards zero, where the closed form itself cannot be evaluated.

Signature

Q = q * (1 - (1 + r)^(-T)) / r
Inputs
InputsDefinitionUnit
qAmount arising in each year of the stream, the same every year, such as an incremental gain of 0.8 QALYs a yearQALYs or currency per year, in constant prices for costs
rAnnual discount rate written as a decimal, such as 0.035 for the NICE reference casea proportion per year, above zero in this closed form
TNumber of years in the stream, which runs from year 1 to year T of the time horizonyears, a whole number
Output
QPresent value of the T yearly amounts counted at the end of each yearsame as q, for example QALYs or pounds

Function

Discounting of yearly cost and QALY streams to present-value totals

Maps a stream of yearly costs or QALYs, an annual discount rate, a time horizon and a timing convention to one discounted total, by multiplying each year's amount by its discount factor and adding the results. Totals for costs and for QALYs are formed separately and then compared across options, for example as an incremental cost per QALY. The present value of a single amount, the general sum over a stream and separate rates for costs and health are on the Discount Rate page (HE-FM-DR-001 to HE-FM-DR-003), and unequal rates on the Differential Discounting page (HE-FN-DDIS-001). This package adds the totals of a level yearly stream counted at the end of each year, at the start of each year and continuously, and the discounted cost per QALY of a one-off treatment with a lasting gain, as in the article's worked example.

Computational function

  • Computational function for discounted QALYs and cost per QALY of a one-off treatment under a chosen timing convention

    Takes the inputs a one-off treatment analysis usually holds, an incremental cost paid at the start, a yearly QALY gain, the number of years it lasts, an annual rate and a flag for counting each year at its start or its end, and returns the sum of the discount factors, the discounted QALYs, the discounted and undiscounted cost per QALY and the rise caused by discounting. It builds one factor for each year, so it also works at a zero rate where the closed form fails, and chains HE-FM-DISC-001 or HE-FM-DISC-002 with HE-FM-DISC-004. The inputs therefore differ from the formulas' variables, which assume one timing convention and a positive rate.

    Inputs and outputs: C_0 is the incremental cost paid in year 0, left undiscounted, in pounds. q is the yearly incremental QALY gain, required, above zero. T is the number of years the gain lasts, a whole number above zero. r is the annual discount rate as a decimal, zero or above. s is the timing flag, 0 for end-of-year counting and 1 for start-of-year counting. A is the sum of the T discount factors. Q_d is the discounted QALY gain. ICER_d and ICER_0 are the discounted and undiscounted costs per QALY in pounds per QALY. rise is the proportional increase of ICER_d over ICER_0.

    Assumption: The whole incremental cost falls in year 0, the gain is the same in every year and one rate applies to costs and QALYs, as in the NICE reference case. With s set to 1 the first year's gain is counted at year 0 and is not discounted.

    Worked example (Article's treatment at 3.5% with end-of-year counting): GBP 300,000 at the start and 0.8 QALYs a year for 30 years give a factor sum of 18.3920, 14.71 discounted QALYs and about GBP 20,389 per QALY against GBP 12,500 undiscounted, a rise of about 63%. C_0 = 300000; q = 0.8; T = 30; r = 0.035; s = 0; A = 18.392045; Q_d = 14.713636; ICER_d = 20389.25; ICER_0 = 12500; rise = 0.631140

    Worked example (Article's treatment at 1.5% with end-of-year counting): At the NICE non-reference-case rate the ratio is about GBP 15,615 per QALY, a rise of about 25%. C_0 = 300000; q = 0.8; T = 30; r = 0.015; s = 0; A = 24.015838; Q_d = 19.212670; ICER_d = 15614.70; ICER_0 = 12500; rise = 0.249176

    Worked example (Same treatment at 3.5% with start-of-year counting): Counting each year's gain at its start raises the discounted QALYs to about 15.23 and lowers the ratio to about GBP 19,700 (computed here for illustration). C_0 = 300000; q = 0.8; T = 30; r = 0.035; s = 1; A = 19.035767; Q_d = 15.228614; ICER_d = 19699.76; ICER_0 = 12500; rise = 0.575981

    Worked example (Zero rate returns the undiscounted ratio): With no discounting the factor sum is 30 and the two ratios agree, a limiting case that checks the implementation. C_0 = 300000; q = 0.8; T = 30; r = 0; s = 0; A = 30; Q_d = 24; ICER_d = 12500; ICER_0 = 12500; rise = 0

    Excel: =OneOffCost/(YearlyQALYs*SUM((1+DiscRate)^-(SEQUENCE(Years)-StartFlag))) Returns the discounted cost per QALY from named cells, with StartFlag holding 0 or 1. SEQUENCE needs Excel 365 or Excel 2021.

    R: disc_icer <- function(cost0, q, years, rate, start = 0) { a <- sum((1+rate)^-((1:years)-start)); q_d <- q * a; icer_d <- cost0 / q_d; icer_0 <- cost0 / (q * years); c(A = a, Q_d = q_d, ICER_d = icer_d, ICER_0 = icer_0, rise = icer_d / icer_0-1) } Returns a named vector, and works at a zero rate.

    Python: def disc_icer(cost0, q, years, rate, start=0): a = sum((1+rate)**-(t-start) for t in range(1, years+1)); q_d = q*a; icer_d = cost0/q_d; icer_0 = cost0/(q*years); return a, q_d, icer_d, icer_0, icer_d/icer_0-1 Plain Python with no imports, returning a tuple in the order of the outputs.

    Test (Start-of-year factor sum equals the end-of-year sum times one plus the rate): Moving every year one period earlier multiplies each factor by (1 + r). The expected result is TRUE. Excel check =ABS(SUM((1+DiscRate)^-(SEQUENCE(Years)-1))-(1+DiscRate)*SUM((1+DiscRate)^-SEQUENCE(Years)))<1E-9

    Test (Common rate on a spread cost leaves the ratio unchanged): When a yearly cost falls in the same years as the gain, discounting both at one rate leaves the ratio at the undiscounted value, as the article notes for a lifelong drug. The expected result is TRUE. Excel check =ABS(PV(DiscRate,Years,-YearlyCost)/PV(DiscRate,Years,-YearlyQALYs)-YearlyCost/YearlyQALYs)<1E-9

    Common error (Discounting the year 0 cost): Dividing the GBP 300,000 paid at the start by 1.035 lowers the ratio at 3.5% to about GBP 19,700 instead of GBP 20,389. An amount paid in year 0 has a factor of 1, so the timing flag applies to the QALY stream only.

    Source: 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.5.1 on the present value of the stream of costs and benefits over the time horizon at 3.5% a year, and section 4.5.3 on the 1.5% non-reference-case rate. Larson BA. Calculating disability-adjusted-life-years lost (DALYs) in discrete-time. Cost Effectiveness and Resource Allocation. 2013;11 article 18. Table 1, which counts each year at the beginning of the year, the same as a stream of payments made at the start of each year.

    A = sum_(t=1)^T [(1 + r)^(-(t - s))]; Q_d = q * A; ICER_d = C_0 / Q_d; ICER_0 = C_0 / (q * T); rise = ICER_d / ICER_0 - 1

Try this function

Implementations

  • Excel

    End-of-year discounted level stream with Excel PV

    With the rate in DiscRate, the number of years in Years and the yearly amount in YearlyAmount, Excel PV returns the total. The minus sign is needed because PV reports a payment as a negative value. The second formula is the same closed form written out.

    =PV(DiscRate,Years,-YearlyAmount); =YearlyAmount*(1-(1+DiscRate)^-Years)/DiscRate

Assumptions

  • One constant annual rate across a level discounted stream

    The same rate r applies in every year, the constant or exponential model that Attema and colleagues describe as the one most used by social planners. The Green Book steps its rate down after year 30, so under that guidance a longer stream needs each year's factor built from the rates in force and the closed form no longer applies.

  • Each year's amount counted at the end of the year

    Each year's amount is credited at the end of that year, as for the QALYs in the article's worked example. Counting at the start of each year moves every factor one period earlier and multiplies the total by (1 + r), as in HE-FM-DISC-002, so the convention is stated and kept the same for every option compared.

  • Constant prices for a discounted cost stream

    A cost stream is expressed in real terms, with general inflation removed first, because the Green Book rate is a real rate and adding the inflation rate to it gives a mathematically incorrect result.

Worked examples

  • Thirty years of 0.8 QALYs counted at year end and discounted at 3.5 per cent

    An extra 0.8 QALYs in each of 30 years, counted at the end of each year, is worth about 14.71 discounted QALYs at 3.5% against 24 undiscounted. The 30 factors sum to 18.3920 and the factor for year 30 is about 0.3563, as in the article.

    q = 0.8; r = 0.035; T = 30; Q = 14.7136
  • Thirty years of 0.8 QALYs counted at year end and discounted at 1.5 per cent

    At 1.5% the same gain is worth about 19.21 discounted QALYs, since the 30 factors sum to 24.0158, as in the article's table for the NICE non-reference-case rate.

    q = 0.8; r = 0.015; T = 30; Q = 19.2127

Common errors

  • Zero rate entered in the closed-form discounted annuity

    The closed form divides by r, so a rate of zero returns #DIV/0! in Excel instead of the undiscounted total q times T. An undiscounted result, which PMG36 asks for in its disaggregated table and the Dutch guideline as a scenario, uses q times T, the factor-by-factor sum or Excel PV, which accepts a zero rate.

  • Year 0 included in an end-of-year discounted stream

    Running the year index from 0 to 30 adds a 31st year. For 0.8 QALYs at 3.5% the total becomes about 15.51 instead of 14.71 discounted QALYs (computed here for illustration). A stream of T years counted at the end runs from year 1 to year T.

  • Inflation added to the discount rate for a real cost stream

    Discounting real costs of GBP 1,000 a year for 30 years at 5.5%, the 3.5% rate plus 2% inflation, gives about GBP 14,534 instead of GBP 18,392 at 3.5% (computed here for illustration). The Green Book states that the two rates should not be added together.

Sources

  • Constant discounting model with a per-period discount factor

    Attema AE, Brouwer WBF, Claxton K. Discounting in economic evaluations. PharmacoEconomics. 2018;36(7) 745-758. Section on discount models, which describes the constant discounting model as the one most often used by social planners, with costs or utilities in each period multiplied by the discount factor 1/(1 + D)^t of that period.

    View source →

  • NICE reference case for discounting a stream over the time horizon

    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.5.1, results reflect the present value of the stream of costs and benefits over the time horizon, with costs and health effects discounted at the same rate of 3.5% a year.

    View source →

Canonical Identity

Discounted total of a level yearly amount counted at the end of each year | HealthEconomics.wiki