Demographic Flux
Lexis surface · observed HMD/HFD starting populations
What it shows
The piece shows birth cohorts aging through calendar time on a Lexis surface, with five strip panels below tracking crude birth, death and growth rates, the total fertility rate, life expectancy at birth, and the first demographic dividend as the population age structure shifts.
The method
The piece runs two-sex cohort-component projection, a Leslie matrix extended to both sexes, on a Lexis diagram, seeded from the observed Human Mortality Database (HMD) and Human Fertility Database (HFD) profile at the base year, with Lee–Carter mortality fitted separately by sex. The forward path is a user-controlled scenario, not any country’s recorded history after the base year.
How to read it
The main panel is a Lexis surface: calendar year runs left to right, age runs upward from 0 to 100. The run spans the profile base year through 2100.
Each vertical slice shows how many people are at each age that year. Stroke weight and brightness track each age group’s share of the total population. The encoding compares that share to the largest share seen anywhere in the run so far, not to the peak within a single year. A broad young pyramid therefore reads heavier than a narrow aging column or a thin cohort born under low fertility.
Color marks age, not size: shading from blue at the young ages to rust at the older ages.
At the left edge, the population already alive at the base year enters at its observed ages. Cohorts born later enter from the bottom as the period clock advances.
Horizontal reference lines at ages 20 and 65 mark the working-age band: cohorts crossing 20 enter the producer group that drives the demographic dividend; cohorts crossing 65 join the older dependent group. Both boundaries are labeled on the right margin.
Five strip panels below trace the scenario in sequence: crude birth and death rates together (per 1,000 population), crude growth rate (births minus deaths), the period total fertility rate (TFR) along its logistic trajectory, with the recorded HFD TFR drawn behind it as dots, life expectancy at birth for each sex along its Lee–Carter trajectory, and the first demographic dividend.
Each panel’s vertical scale expands with the run so extreme sidebar settings stay in frame. A vertical sweep marks the current calendar year on the strips only. Sidebar Live Statistics badges echo each strip’s live readout; values adopt the same color as the corresponding strip trace.
The visual
Data & sources
Empirical starting populations draw on HMD and HFD at each profile’s base year. The table separates what is observed at the base year from the forward scenario set in the sidebar.
| Component | Base year (observed) | Forward path (sidebar scenario) |
|---|---|---|
| Population | HMD Population 1×1 age–sex counts | Closed population; no migration after base year; sex ratio at birth (SRB) fixed per profile |
| Mortality | HMD period life tables: the base-year death rates | Lee–Carter improvement fitted to HMD deaths and exposures (Poisson), pace scaled in the sidebar (Mortality improvement) |
| Fertility | HFD period age-specific fertility rate (ASFR) shape and opening TFR | Logistic TFR path anchored at the opening TFR; default end, midpoint and steepness fitted to the recorded HFD TFR series; start, end and midpoint adjustable in the sidebar |
Data versions
Each country’s HMD and HFD versions are the “Last modified” dates the two databases print in that country’s files: they name the version of the data used here, not the day the files were fetched. Where HMD released a whole-database update on the HMD version’s day, the update’s DOI is linked.
| Country | HMD version | HMD update DOI | HFD version |
|---|---|---|---|
| Austria | 12 December 2024 | 10.4054/hmd.countries.20241212 | 3 February 2025 |
| Canada | 19 May 2025 | 10.4054/hmd.countries.20250519 | 22 May 2025 |
| Denmark | 14 April 2026 | 23 May 2025 | |
| Finland | 2 June 2025 | 23 July 2025 | |
| Iceland | 30 April 2026 | 18 July 2025 | |
| Italy | 26 February 2026 | 5 May 2025 | |
| Japan | 25 November 2025 | 10.4054/hmd.countries.20251125 | 19 January 2026 |
| Portugal | 1 December 2025 | 9 January 2026 | |
| Sweden | 29 May 2025 | 22 July 2025 | |
| Switzerland | 26 September 2025 | 9 January 2026 | |
| United States | 9 June 2026 | 19 March 2026 |
Scope and limits
The piece traces how a starting population evolves under a stylized demographic transition, driven by two-sex cohort-component projection (a Leslie matrix extended to both sexes) with Lee–Carter mortality fitted separately by sex and a logistic fertility path — the standard machinery of formal demography.
The starting stock and base-year vital schedules are drawn from observed data. The forward trajectory is a sidebar scenario the user controls. Its default fertility path is fitted to the country’s recorded decline (HFD) and mortality improves at the observed average pace, but the population is closed, with no migration, so the run is a scenario rather than the country’s recorded history after the base year.
Methods
Mortality
Sex-specific Lee–Carter mortality: \(\ln m(x,t) = a(x) + b(x)\,\kappa(t)\), where \(m(x,t)\) is the central death rate of the single year of age \([x, x+1)\), and at \(x = 100\) of the open age group 100+.
\(a(x)\) is the observed base-year schedule from sex-specific HMD period life tables: \(a(x) = \ln m(x,t_0)\), estimated separately for females and males, so the projection starts from the observed rates rather than fitted ones (Lee and Miller 2001). At age 100 it is the rate of the whole open age group, deaths over person-years lived at ages 100 and above, so \(1/m(100)\) is the life expectancy at 100 that HMD’s table gives. At the profile base year, \(\kappa=0\), so the model’s death rates are the observed HMD rates at every age. One schedule has ages with no deaths in its base year: Iceland 1960, females, ages 3–9. There \(\ln m(x,t_0)\) is undefined; the base year keeps the observed rate of zero, and \(a(x)\) is the fitted base-year rate from the model below, the level later years improve from.
\(b(x)\) and \(\kappa(t)\) are estimated by maximum likelihood from HMD deaths and exposures by single year of age, treating deaths as Poisson counts with mean \(E(x,t)\,e^{\alpha(x) + b(x)\kappa(t)}\) (the Poisson model of Brouhns et al. (2002), who estimate \(\alpha(x)\) jointly with \(b(x)\) and \(\kappa(t)\); here it stays at the base-year rates), over HMD history between the base year and the last available mortality year, with the deaths and exposures at ages 100 and above pooled in the open age group, normalized so \(\sum_x b(x) = 1\). Unlike a decomposition of log rates, the likelihood uses the ages and years with no deaths as they are, with no floor or imputation.
The period life table treats the first year of life with the Andreev–Kingkade separation factor \(a_0\), the average fraction of the year lived by infants who die in it, which the model computes by sex from each year’s \(m_0\) (Andreev and Kingkade 2015), so it follows infant mortality as it falls. Every later year reads its rate as the force of mortality held constant over that year of age, \(\mu(a,t) = m(\lfloor a \rfloor, t)\) for \(a \ge 1\), and the open age group 100+ holds its own rate as a constant force of mortality. With radix \(l_0 = 1\) and \(l_{x+1} = l_x\,(1 - q_x)\):
\[q_0 = \frac{m_0}{1 + (1 - a_0)\,m_0}, \qquad {}_1L_0 = l_1 + a_0\,(l_0 - l_1),\]
\[q_x = 1 - e^{-m_x}, \qquad {}_1L_x = \frac{l_x\,q_x}{m_x} \quad (x \ge 1), \qquad T_{100} = \frac{l_{100}}{m_{100}}.\]
The table’s own death rates, \(d_x/{}_1L_x\) with \(d_x = l_x\,q_x\), are the model’s \(m_x\) at every age. The rates belong to whole intervals, not to exact ages, so they are never interpolated between ages.
Survival in the Leslie step uses survivorship ratios of this period life table rather than point-hazard probabilities. Cohorts age with \(_1L_{x+1}/{_1L_x}\), births enter age 0 through \(_1L_0/l_0\) (carrying infant mortality), and the open age group persists through its \(T_x\) ratio, \(T_{101}/T_{100} = e^{-m_{100}}\).
\(\kappa\) advances linearly from zero at the base year:
\[\kappa(t) = (t - t_0)\,\lambda\,\omega,\]
where \(\lambda = (\kappa(t_1) - \kappa(t_0))/(t_1 - t_0)\) is the average annual drift of each sex’s fitted index over the observed HMD window \([t_0, t_1]\): the drift of the random-walk forecast of Lee and Carter (1992), estimated here from the window’s two endpoints and \(\omega \ge 0\) is a user-selected scale factor. At \(\omega = 0\) mortality holds at \(a(x)\), the base-year schedule; at \(\omega = 1\) the historical pace of improvement continues unchanged.
Life expectancy at birth is \(e_0 = T_0/l_0\) from the same table, recomputed each calendar year from the current \(m(x,t)\). It tracks the modeled period schedule throughout the run; the static HMD \(e_0\) in the build JSON provides only a base-year verification anchor. At the base year the model’s \(e_0\) lies within 0.005 years of it in every profile (largest: Iceland 1960, males, 0.0042). Most of that small gap is the person-years within each year of age: the model holds each rate constant over the year, where HMD’s tables place deaths at mid-year.
Population
The starting age structure is the observed profile population (HMD Population 1×1) at the base year: female and male counts by single year of age.
Each calendar year, the stylized population advances by two-sex cohort-component projection, extending the female-only matrix of Leslie (1945) to both sexes (Williamson 1959; Pollard 1966): cohorts age one year using period-life-table survivorship ratios \(_1L_{x+1}/{_1L_x}\), survivors remain on the Lexis surface, and new births enter at age 0 carrying first-year survival \(_1L_0/l_0\). Births follow the female ASFR schedule (Fertility); a fixed sex ratio at birth (SRB) divides them into girls and boys. Deaths follow Lee–Carter death rates fitted separately by sex (Mortality).
Crude rates (sidebar and strip panels, per 1,000): \(\mathrm{CBR} = 1000\,B/\mathrm{PY}\), \(\mathrm{CDR} = 1000\,D/\mathrm{PY}\), \(\mathrm{CGR} = \mathrm{CBR} - \mathrm{CDR}\), where \(B\) and \(D\) count births and deaths over the year and \(\mathrm{PY}\) is person-years lived, approximated by the mean of the start- and end-of-year populations. The closed population carries no migration term.
Fertility
Fertility follows the observed period ASFR shape (HFD) at the profile base year, which the model applies to the female population. TFR follows a logistic path from the opening level \(\text{TFR}_\text{start}\) toward a long-run level \(\text{TFR}_\text{end}\), anchored so that it starts at the opening level exactly:
\[\text{TFR}(t) = \text{TFR}_\text{end} + (\text{TFR}_\text{start} - \text{TFR}_\text{end})\,\frac{\sigma(t)}{\sigma(t_0)}, \qquad \sigma(t) = \frac{1}{1 + e^{k(t - m)}},\]
where the location \(m\) is set so that TFR crosses halfway between the two levels in the transition midpoint year \(t_\text{mid}\). The path moves in one direction only and never leaves the range between the two levels.
Each profile opens on a path fitted to its recorded fertility. \(\text{TFR}_\text{start}\) is the observed base-year TFR; \(\text{TFR}_\text{end}\), \(t_\text{mid}\) and the steepness \(k\) are chosen by least squares against the recorded period TFR (HFD) in every year after the base year, over a fixed grid (\(\text{TFR}_\text{end}\) from 1.2 to 2.1, \(k\) from 0.05 to 0.5). The fitted midpoint falls within three years of the first recorded year at or below halfway, except for Denmark, Finland and the United States, where fertility rose again after first crossing halfway and the fit places the lasting decline. A single logistic cannot follow such a rebound, so the default path passes through it; the TFR strip panel draws the recorded series behind the path, so where the two part is visible. The sliders move the start, end and midpoint; the steepness stays at the profile’s fitted value. The observed base-year ASFR shape then scales proportionally each year,
\[f(x,t) = f(x,t_0)\,\frac{\text{TFR}(t)}{\text{TFR}(t_0)},\]
holding the relative age pattern of childbearing fixed throughout the run.
Dividend
In economic demography, the first demographic dividend is the temporary economic advantage a population gains when its age structure tilts toward the working ages. As fertility falls during the demographic transition, the large cohorts born before the decline enter the working ages while fewer children arrive behind them. For several decades the labor force grows faster than the population that depends on it, and, other things being equal, income per person grows faster (Lee and Mason 2006). The effect is transitory: the window opens as fertility declines and closes as those same cohorts reach old age. The first dividend is distinct from a second — the later rise in savings and capital that longer lives encourage as households prepare for retirement.
The support ratio measures this balance directly, as Lee and Mason (2006) define it: effective producers per effective consumer. Here the producers are the working-age population (ages 20–64), and everyone, at every age, consumes:
\[\mathrm{SR}(t) = \frac{N_{20\text{–}64}(t)}{N(t)}\]
where \(N_{20\text{–}64}\) is the female and male population aged 20–64 and \(N\) the total population on 1 January of calendar year \(t\).
A high support ratio is not, by itself, the dividend. The first demographic dividend is the phase of positive growth in the support ratio: the span when the working-age population grows faster than the dependent population, and therefore faster than the total population, so the working-age share keeps rising. A population can sit at a high support ratio and gain no dividend once that growth stops.
The bottom strip and the sidebar Demographic dividend badge report this growth rate, the log growth rate of the support ratio, in percent per year, measured between consecutive simulated years. The base year has no predecessor, so the dividend is undefined there and the curve begins one year later. Values above zero lie inside the dividend window; the curve crossing below zero marks its end:
\[\frac{\mathrm{d}}{\mathrm{d}t}\ln \mathrm{SR}(t) \approx \ln \mathrm{SR}(t) - \ln \mathrm{SR}(t-1).\]
The series is a structural index of age composition. The support ratio and its growth rate track demographic shifts only; income, wages, and gross domestic product lie outside the model’s scope.
Controls
The Period Clock sets animation speed and replays the run from the base year via Restart. The Transition Regime steers the forward scenario, restarting the clock on any change: Fertility start is the base-year TFR (pre-filled from HFD), Fertility end the level the path settles toward, and Fertility transition midpoint the year \(t_\text{mid}\) at which TFR crosses halfway between them. Mortality improvement sets the scale factor \(\omega\) on the historical pace of change: 1 continues the observed annual rate, 0 freezes the base-year life table, and values above 1 accelerate improvement. The Live Statistics panel reports period TFR, life expectancy at birth, support ratio, and first dividend alongside the vital rates as the clock advances.
Assumptions
The model runs a closed population (migration = 0) under a Leslie structure extended to two sexes with female-driven fertility and SRB-split births. Because the default fertility path follows recorded levels, late-scenario totals can resemble a forecast, but they are not one: with no migration, a population whose recorded growth has depended on immigration shrinks in the run.
Profiles: Each row in the build registry supplies one HMD and HFD starting population.
Time stepping: The period clock advances continuously to animate the sweep, but all demographic statistics update on integer calendar years only. Each year’s rates carry the population from 1 January of that year to 1 January of the next, so the first year applies the observed base-year life table and fertility schedule to the observed 1 January population. For each year, population and support ratio are the 1 January count, and births, deaths and the crude rates are those over the year.
Simplifications
Lexis display: Age shares on the main panel come from the stylized population counts at each calendar year (density strokes by age), not microsimulated cohort lifelines. Sidebar readouts (CBR, CDR, CGR, \(e_0\), support ratio) use the same projection step.
References
Colophon
Built with p5.js and Quarto (CARO theme). v1.0, 2026.
For problems or questions, please open an issue.
This site is licensed under CC BY 4.0.