Signature
p_all = 1 - (1 - p_bg) * (1 - p_dis)
| Inputs | Definition | Unit |
|---|---|---|
p_bg | Probability of dying of causes other than the modelled disease within the cycle, from the life table at the attained age | probability per cycle |
p_dis | Probability of dying of the modelled disease within the cycle, from an excess or cause-specific analysis | probability per cycle |
p_all | Probability that a person alive at the start of the cycle dies of any cause within it | probability per cycle |
|---|
Function
Background mortality function for the cycle death probability of a modelled cohort
Maps the attained age of a cohort, the cycle length and a disease-specific death probability to the probability of dying of other causes in each model cycle and to the all-cause probability of death, and relates all-cause survival to the survival expected in the general population. The split of the all-cause hazard into a background and an excess hazard is live as HE-FM-BTH-005 and is not restated; the formulas here give its survival-scale form (relative survival), its cycle-probability form for two independent risks, and the expected hazard of a cohort that mixes sexes or ages. A background probability for one cycle comes from a life-table annual probability q_x through the rescaling formula HE-FM-TP-003 with an observed interval of one year (HE-CF-TP-002 performs the same step), and HE-FM-TP-004 splits a cycle's deaths between background and disease death states. A multiplier on background mortality, such as a standardised mortality ratio, enters a cycle probability in the same way as the hazard ratio of HE-FM-HR-004. Related live records cover cure models in the relative survival form (HE-FN-CRM-001 and HE-FM-CRM-001 to HE-FM-CRM-004), cycle probabilities from a cumulative hazard (HE-FN-CUMH-001, HE-FM-CUMH-001 to HE-FM-CUMH-003), general-population QALYs from a life table (HE-FM-ASF-002), the cohort trace that carries the probabilities (HE-FN-CSIM-001) and tunnel states, whose clock restarts on entry while attained age keeps running (HE-FN-TUN-001). Years of life lost (HE-FN-YLL-001) use a normative standard life table, a different purpose from the national table used here. Notation follows the Background Mortality article.
Computational function
Computational function for cycle-by-cycle background death probabilities from an age-banded life table
Takes a starting age, a cycle length, a number of cycles and a life table that gives an annual probability of death for each age band, and returns the background death probability p_bg for every cycle and the share of the cohort still alive when background causes alone act. For each cycle it finds the band that contains the attained age at the start of the cycle, starting age plus elapsed time, and rescales that band's annual probability to the cycle length with HE-FM-TP-003, so the probabilities rise as the cohort moves into older bands. The vector then feeds HE-FM-BGM-002 cycle by cycle. The inputs therefore differ from the formula's variables, which describe a single cycle.
Inputs and outputs:
a_0is the cohort's age at model start in years.Deltais the cycle length in years.n_cycis the number of cycles.band_lowerlists the lower age of each band andq_bandthe annual probability of death in each band, the q_x of the ONS national life tables, the probability that a person aged x exactly dies before reaching age x + 1. In the two-band calculator linea_edgeis the lower age of the second band,q_Aandq_Bare the two annual probabilities,n_Aandn_Bthe cycles spent in each band,p_Aandp_Bthe cycle probabilities, andS_bgthe share alive when background causes alone act, aftern_cyccycles.Assumption: The hazard is constant within each band, so the rescaling is exact. The band is read at the attained age at the start of each cycle; Sonnenberg and Beck describe small corrections to the lookup age, half a cycle for transitions in mid-cycle and half a year because a rate published for age x applies to people aged x to x + 1, which a model may add. The calculator line assumes the cohort starts in the first band and crosses into the second after a whole number of cycles; the R and Python code handle any number of bands. The values below are illustrative, not ONS figures.
Worked example (Half-year cycles from age 63 across two bands): Illustrative annual probabilities of 0.010 for ages 60 to 64 and 0.016 for ages 65 to 69, and six half-year cycles starting at age 63. The first four cycles fall in the first band and the last two in the second, so background survival after three years is 0.964418, the same as (1 minus 0.010) squared times (1 minus 0.016).
a_0 = 63; a_edge = 65; Delta = 0.5; n_cyc = 6; q_A = 0.010; q_B = 0.016; n_A = 4; n_B = 2; p_A = 0.005013; p_B = 0.008032; S_bg = 0.964418Worked example (Cohort starting at the band edge): Starting at 65, every cycle uses the second band, so background survival after three years is 0.984 cubed, 0.952764, a limiting case.
a_0 = 65; a_edge = 65; Delta = 0.5; n_cyc = 6; q_A = 0.010; q_B = 0.016; n_A = 0; n_B = 6; p_A = 0.005013; p_B = 0.008032; S_bg = 0.952764Worked example (Annual cycles return the table's probabilities): With one-year cycles each cycle probability equals its band's annual probability, a second limiting case.
a_0 = 63; a_edge = 65; Delta = 1; n_cyc = 4; q_A = 0.010; q_B = 0.016; n_A = 2; n_B = 2; p_A = 0.01; p_B = 0.016; S_bg = 0.948988Excel: With the cycle number in column A from row 2,
=StartAge+(A2-1)*CycleYearsin column B gives the attained age,=INDEX(BandQ,MATCH(B2,BandLower,1))in column C the band's annual probability,=1-(1-C2)^CycleYearsin column D the cycle probability, and=E1*(1-D2)in column E, with 1 in E1, the background survival. BandLower holds the lower ages in ascending order, as MATCH with match type 1 requires, and BandQ the matching probabilities.R:
bg_probs <- function(a0, delta, n_cyc, band_lower, q_band) { age <- a0+(seq_len(n_cyc)-1)*delta; q <- q_band[findInterval(age, band_lower)]; p <- 1-(1-q)^delta; list(age = age, p_bg = p, S_bg = cumprod(1-p)) }Returns the attained ages, the cycle probabilities and the running background survival;bg_probs(63, 0.5, 6, c(60, 65, 70), c(0.010, 0.016, 0.026))ends at 0.964418.Python:
def bg_probs(a0, delta, n_cyc, band_lower, q_band): ages = [a0+k*delta for k in range(n_cyc)]; q = [q_band[max(i for i, b in enumerate(band_lower) if b <= a)] for a in ages]; p = [1-(1-x)**delta for x in q]; s = list(accumulate((1-x for x in p), lambda u, v: u*v)); return ages, p, sNeedsfrom itertools import accumulate.Test (Two half-year cycles compound to the annual probability): With the first worked example's inputs, D2 holds the first cycle probability, for age 63 from the annual 0.010 and half-year cycles, and two such cycles compound back to the annual probability. Expected result TRUE. Halving the annual probability in column D instead of rescaling it puts 0.005 in D2, which compounds to 0.009975 and makes the check FALSE. Excel check
=ABS(1-(1-D2)^2-0.010)<1E-12Test (Final background survival reflects the move to the older band): With the first worked example's inputs the last cell of column E, named FinalBgSurvival, equals (1 minus 0.010) squared times (1 minus 0.016). Expected result TRUE. FALSE shows the lookup fixed at the starting band, which gives 0.970299. Excel check
=ABS(FinalBgSurvival-(1-0.010)^2*(1-0.016))<1E-9Common error (Background probability fixed at the starting age): Holding the band of age 63 for all six cycles gives background survival of 0.970299 against 0.964418, so background deaths over three years are 29.7 per 1,000 instead of 35.6, about 17% too few (computed here for illustration). Sonnenberg and Beck note that the probability of death increases as the cohort ages and must change with each cycle.
Source: Office for National Statistics. National life tables QMI. Last revised 10 December 2025. Section 6, methods used to produce the national life tables data, which defines the mortality rate between age x and x + 1 as the probability that a person aged x exactly will die before reaching age x + 1. Sonnenberg FA, Beck JR. Markov models in medical decision making: a practical guide. Medical Decision Making. 1993;13(4):322-338. Section on time dependence of probabilities (page 333), which stores mortality rates that change with age in a table indexed by cycle number, and section on assignment of probabilities (pages 335 and 336), which looks up the age-specific rate for each cycle and describes the corrections to the lookup age.
n_A = (a_edge - a_0) / Delta; n_B = n_cyc - n_A; p_A = 1 - (1 - q_A)^Delta; p_B = 1 - (1 - q_B)^Delta; S_bg = (1 - p_A)^n_A * (1 - p_B)^n_B
Try this function
Implementations
Excel
All-cause cycle death probability from named background and disease cells
With the cycle's background probability in BackgroundDeathProb and the disease probability in DiseaseDeathProb, the first formula returns the all-cause probability, held in AllCauseDeathProb. The second fills BackgroundDeathProb from a constant background rate per year in BackgroundRate and a cycle length in years in CycleYears (HE-FM-TP-001); DiseaseDeathProb is filled the same way from ExcessRate.
=1-(1-BackgroundDeathProb)*(1-DiseaseDeathProb); =1-EXP(-BackgroundRate*CycleYears)
Assumptions
Background and disease deaths as independent competing risks within the cycle
The two hazards add within the cycle (HE-FM-BTH-005) and act independently, and both probabilities are converted over the same cycle length (HE-FM-TP-001, or HE-FM-TP-003 from an annual life-table probability). Under those conditions the product form is exact and needs no ordering of the two risks within the cycle.
Disease probability that excludes deaths already in the life table
p_dis is a disease-specific or excess probability, never an all-cause probability such as one taken from trial overall survival, which already contains background deaths. National life tables also include deaths from the modelled disease; the article notes that the overlap is small for rare conditions and that a cause-deleted life table is one remedy for common ones.
Background probability read at attained age in every cycle
p_bg changes with each cycle as the cohort ages. Sonnenberg and Beck look up the age-specific rate for each cycle in a table, which HE-CF-BGM-001 does for an age-banded life table.
Worked examples
Annual cycle with the article's background and excess hazards
With the article's illustrative constant background hazard of 0.015 a year and excess hazard of 0.25 a year, an annual cycle gives p_bg of 0.014888 and p_dis of 0.221199 (HE-FM-TP-001), and an all-cause probability of 0.232794, the same as 1 minus exp(minus 0.265) from the summed hazard.
p_bg = 0.014888; p_dis = 0.221199; p_all = 0.232794
Sonnenberg and Beck starting background rate with an illustrative disease probability
Sonnenberg and Beck's starting background rate of 0.0036 a year, for a 43-year-old man, gives p_bg of 0.003594 for an annual cycle. With an illustrative disease probability of 0.05 the all-cause probability is 0.053414 (computed here for illustration).
p_bg = 0.003594; p_dis = 0.05; p_all = 0.053414
No disease mortality leaves the background death probability
When the disease adds no risk the all-cause probability equals the background probability, a limiting case that checks an implementation.
p_bg = 0.014888; p_dis = 0; p_all = 0.014888
Common errors
Background and disease death probabilities added
Adding the two probabilities counts twice the people who would have died of both causes in the cycle. For the article's annual rates the error is small, 0.236087 against 0.232794, but with illustrative probabilities of 0.10 and 0.30 at older ages the sum is 0.40 against 0.37 (computed here for illustration).
Life-table probability layered on an all-cause trial probability
Combining p_bg with a disease probability that already contains other-cause deaths counts background mortality twice. In the article's illustrative cure model life years to 30 years fall from 11.93 to 10.05, an understatement of 1.87 years, or 16%. A trial curve can take background mortality only as a floor, which HE-VT-BTH-008 checks.
All-cause hazard ratio applied to background deaths
Applying a treatment hazard ratio to p_all also cuts background deaths, which the treatment cannot affect. With the article's annual rates and an illustrative hazard ratio of 0.70, the treated all-cause probability is 0.169311 when the ratio is applied to p_all through HE-FM-HR-004, against 0.173041 when it is applied to p_dis alone (computed here for illustration).
Sources
Baseline and excess mortality rates combined in a Markov cycle by Sonnenberg and Beck
Sonnenberg FA, Beck JR. Markov models in medical decision making: a practical guide. Medical Decision Making. 1993;13(4):322-338. Section on assignment of probabilities (pages 335 and 336), which splits each state's mortality rate into a baseline rate that depends on age, sex and race and an excess rate from comorbid disease, looks the baseline rate up in a table of age-specific mortality rates for each cycle, adds the excess component to the baseline rate to give a total compound mortality rate, and uses the total rate to calculate the probability of death in the cycle; the section on conversion of rates to probabilities (pages 332 and 333) gives the constant-rate conversion.
Additive background and excess mortality rates in DSU TSD 21
Rutherford MJ, Lambert PC, Sweeting MJ, Pennington B, Crowther MJ, Abrams KR, Latimer NR. NICE DSU Technical Support Document 21: Flexible methods for survival analysis. Sheffield, Decision Support Unit, ScHARR, University of Sheffield; 2020 (updated March 2022). Section 3.7.2, equation 13, which breaks the all-cause mortality rate into background mortality, typically obtained from population mortality rates stratified by age, sex and calendar year, and an excess mortality rate; section 3.7.1 describes modelling disease-specific and other-cause mortality separately and combining them to give estimates of long-term all-cause survival.
Canonical Identity
Stable URI · Machine-readable · Resolvable · CC BY 4.0
