Mortality Model

Data

Past Data: 1996 - 2021

For past years, we used Table 13-10-00837-01 from StatCan.

The *.csv file can be downloaded from here: 13100837-eng.zip and is saved as: LEAP/leap/original_data/13100837.csv.

The relevant columns are:

Column

Type

Description

REF_DATE

int

the calendar year

AGE_GROUP

str

the age of the person in years

GEO

str

the province or territory full name

SEX

str

one of “Both sexes”, “Females”, or “Males”

ELEMENT

str

describes what the variable of interest is; we want "Death probability between age x and x+1 (qx)"

VALUE

int

the probability of death between age x and x+1 in that year, province, sex, and age group

Projected Data: 2021 - 2068

Statistics Canada doesn’t provide annual projections for death probabilities, but does provide a projection for specific years (which we call calibration years):

Region

Year

Projection Scenario

Mortality Scenario

Canada

2028

LG

HM

Canada

2028

M1

MM

Canada

2028

M2

MM

Canada

2028

M3

MM

Canada

2028

M4

MM

Canada

2028

M5

MM

Canada

2028

HG

LM

Canada

2028

SA

HM

Canada

2028

FA

LM

Canada

2048

LG

HM

Canada

2048

M1

MM

Canada

2048

M2

MM

Canada

2028

M3

MM

Canada

2048

M4

MM

Canada

2048

M5

MM

Canada

2048

HG

LM

Canada

2048

SA

HM

Canada

2048

FA

LM

Canada

2073

LG

HM

Canada

2073

M1

MM

Canada

2073

M2

MM

Canada

2073

M3

MM

Canada

2073

M4

MM

Canada

2073

M5

MM

Canada

2073

HG

LM

Canada

2073

SA

HM

Canada

2073

FA

LM

Provinces / Territories

2028

HG, FA

LM

Provinces / Territories

2028

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2028

LG, SA

HM

Provinces / Territories

2033

HG, FA

LM

Provinces / Territories

2033

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2033

LG, SA

HM

Provinces / Territories

2038

HG, FA

LM

Provinces / Territories

2038

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2038

LG, SA

HM

Provinces / Territories

2043

HG, FA

LM

Provinces / Territories

2043

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2043

LG, SA

HM

Provinces / Territories

2048

HG, FA

LM

Provinces / Territories

2048

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2048

LG, SA

HM

Provinces / Territories

2053

HG, FA

LM

Provinces / Territories

2053

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2053

LG, SA

HM

Provinces / Territories

2058

HG, FA

LM

Provinces / Territories

2058

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2058

LG, SA

HM

Provinces / Territories

2063

HG, FA

LM

Provinces / Territories

2063

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2063

LG, SA

HM

Provinces / Territories

2068

HG, FA

LM

Provinces / Territories

2068

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2068

LG, SA

HM

Provinces / Territories

2073

HG, FA

LM

Provinces / Territories

2073

M1, M2, M3, M4, M5, M6

MM

Provinces / Territories

2073

LG, SA

HM

This data can be found in the Statistics Canada Population Projections Technical Report: Table 3.1, Table 3.2, Table 5.2.1, Table 5.2.2, Table 5.2.3. Statistics Canada assumes that the age distribution follows the Kannisto-Thatcher hazard model; see Kannisto-Thatcher Model for details.

Model

Birth Cohort 2018 Birth Cohort 2019 Birth Cohort 2020 Birth Cohort 2021 Time Age 2018 2019 2020 2021 2022 2023 0 20 40 60 80 100 110

Statistics Canada provides observed death probabilities for past years (1996-2021) and life expectancy projections at a handful of future calibration years (2028, 2048, 2073). To run the simulation, we need death probabilities for every time interval across the full range — so we project forward from the last observed year (2021).

We propose that the logit of the probability of death changes linearly over time at a sex-specific rate. This gives the projection formula:

\[\text{logit}(q(x, \Delta x, t; \text{sex})) = \text{logit}(q(x, \Delta x, t_0; \text{sex})) - \beta_{\text{sex}} \cdot (t - t_0)\]

where:

Variable

Definition

\(q(x, \Delta x, t; \text{sex})\)

the probability that a person aged \(x\) of sex sex at timepoint \(t\) dies between the ages \([x, x + \Delta x)\)

\(t_0\)

the last timepoint for which we have observed death probabilities (2021)

\(t\)

the timepoint for which we want to project death probabilities (up to 2068)

\(\beta_{\text{sex}}\)

the rate of mortality improvement — a negative value means mortality is declining over time. This parameter is calibrated separately for each sex, province, and projection scenario.

\(\text{logit}(p)\)

\(\ln\!\left(\tfrac{p}{1-p}\right)\)

Calibrating the Beta Parameters

The \(\beta_{\text{sex}}\) parameter is not observed directly. We calibrate it separately for each sex, province, and projection scenario by finding the value that makes our projected life expectancy match Statistics Canada’s published life expectancy targets at the calibration timepoints (2028, 2048, 2073).

To evaluate a candidate \(\beta_{\text{sex}}\), we apply the projection formula above to construct a full life table of death probabilities across all ages at a given calibration timepoint, then compute life expectancy from that table (see Appendix: Life Expectancy). The calibration minimises the discrepancy between this computed life expectancy and the Statistics Canada target across all available calibration timepoints using scipy.optimize.leastsq. Once \(\beta_{\text{sex}}\) is fixed, the projection formula is applied to fill in death probabilities for every time interval in the simulation.

Converting the Time Delta for Death Probabilities

The original data from Statistics Canada is collected annually, so \(\Delta x_a = 1\). However, the user may want to run the simulation with a different time delta, e.g. \(\Delta x_b = 1/12\) for monthly intervals. Let \(\Delta x_a\) be the original time interval, and \(\Delta x_b\) be the new (desired) time interval. We will make the assumption that the hazard rate \(\mu(x, t)\) is constant over the time interval \([x, x + \Delta x_a)\). The hazard rate is given by:

\[\mu(x, t) = \dfrac{F'_X(x, t)}{1 - F_X(x, t)} = - \dfrac{dS_X(x, t)}{dx} \dfrac{1}{S_X(x, t)}\]

where \(S_X(x, t)\) is the survival function for age at death, \(X\), at time \(t\). Solving this first order separable linear differential equation, we have:

\[S_X(x, t) = k e^{-\int \mu(x, t) dx}\]
Math: Solving for \(S_X(x, t)\)
\[\begin{split}\int \dfrac{dS}{S_X} &= -\int \mu(x, t) dx \\ \ln(S_X(x, t)) &= -\int \mu(x, t) dx + C \\ S_X(x, t) &= k e^{-\int \mu(x, t) dx}\end{split}\]

Assuming that \(\mu(x, t) = \lambda\), for some constant \(\lambda\), we have:

\[S_X(x, t) = k e^{- \lambda x} \implies F_X(x) = 1 - k e^{- \lambda x}\]

Now, we can substitute this into the equation for \(q(x, \Delta x, t)\):

\[q(x, \Delta x, t) = \dfrac{F_X(x + \Delta x) - F_X(x)}{1 - F_X(x)} = 1 - e^{- \lambda \Delta x}\]
Math: \(q(x, \Delta x, t)\)
\[\begin{split}q(x, \Delta x, t) &= \dfrac{F_X(x + \Delta x) - F_X(x)}{1 - F_X(x)} \\ &= \dfrac{ 1 - k e^{- \lambda (x + \Delta x)} - 1 + k e^{- \lambda x} }{k e^{- \lambda x}} \\ &= \dfrac{ - k e^{- \lambda (x + \Delta x)} + k e^{- \lambda x} }{k e^{- \lambda x}} \\ &= 1 - e^{- \lambda \Delta x}\end{split}\]

We can write this in terms of the original time interval \(\Delta x_a\):

\[q(x, \Delta x_b, t) = 1 - (1 - q(x, \Delta x_a, t))^{\Delta x_b / \Delta x_a}\]
Math: \(q(x, \Delta x_b, t)\)

We have the original probability of death for the time interval \(\Delta x_a\):

\[\begin{split}q(x, \Delta x_a, t) &= 1 - e^{- \lambda \Delta x_a} \\ e^{- \lambda \Delta x_a} &= 1 - q(x, \Delta x_a, t)\end{split}\]

and we want to find the probability of death for the time interval \(\Delta x_b\):

\[\begin{split}q(x, \Delta x_b, t) &= 1 - e^{- \lambda \Delta x_b} \\ &= 1 - e^{- \lambda \Delta x_a \cdot \Delta x_b / \Delta x_a} \\ &= 1 - (e^{- \lambda \Delta x_a})^{\Delta x_b / \Delta x_a} \\ &= 1 - (1 - q(x, \Delta x_a, t))^{\Delta x_b / \Delta x_a}\end{split}\]

This will give us the probability of death for the new time interval \(\Delta x_b\), but only at the timepoints for which we have data. To get the probability of death for all timepoints, we note that since \(\mu(x, t)\) is constant over the time interval \([x, x + \Delta x_a)\):

\[q(x, \Delta x_b, t + n \Delta x_b) = q(x, \Delta x_b, t) \quad \forall ~ t \in [t, t + \Delta x_a)\]
Math: \(q(x, \Delta x_b, t + n \Delta x_b)\)
\[\begin{split}q(x, \Delta x_b, t + n \Delta x_b) &= 1 - e^{- \lambda \Delta x_b} \\ q(x, \Delta x_b, t) &= 1 - e^{- \lambda \Delta x_b} \\ q(x, \Delta x_b, t + n \Delta x_b) &= q(x, \Delta x_b, t)\end{split}\]
Example: Projected Death Probabilities (Monthly Time Delta)

province

projection_scenario

age

sex

timepoint

prob_death

BC

FA

0

F

2023-01-01

0.000919

BC

FA

0

F

2023-02-01

0.000945

BC

FA

0

F

2023-03-01

0.000294

BC

FA

0

F

BC

FA

0

F

2023-12-01

0.000545

BC

FA

0

F

BC

FA

0

F

2068-01-01

0.003409

Processed Data

The past and projected death probabilities are combined by leap/data_generation/death_data.py into a set of processed files, with one file per time interval and province:

Past data (from 13100837.csv) covers timepoints 1996 to 2021 using death probabilities directly from Statistics Canada.

For projected timepoints (up to 2068), death probabilities for every time interval are filled in by fitting a linear trend (in logit space) that connects the last historical timepoint to Statistics Canada’s life expectancy targets at the calibration timepoints. A separate \(beta\) is fitted for each sex, province, and projection scenario.

Column

Type

Description

province

str

the 2-letter province or territory ID (e.g., BC = British Columbia, CA = Canada)

projection_scenario

str

The two-letter projection scenario ID. One of:

  • past: past data (1996-2021)

  • LG: low-growth projection

  • HG: high-growth projection

  • M1: medium-growth 1 projection

  • M2: medium-growth 2 projection

  • M3: medium-growth 3 projection

  • M4: medium-growth 4 projection

  • M5: medium-growth 5 projection

  • M6: medium-growth 6 projection

  • FA: fast-aging projection

  • SA: slow-aging projection

See: StatCan Projection Scenarios.

age

int

the age of the person in years

sex

str

one of M = male, F = female

timepoint

datetime

the starting date / time of the time interval that the data applies to, e.g. 2021-04-01.

prob_death

float

the probability of death between age [age, age + time_delta) for the given timepoint, province, projection scenario, and sex