Skip to content

Demographic data model

Every demographic projection is built from the same base reference tables, one coherent choice of which vintage of each to use, plus optional fine-tuning. This page is the methodology reference: the tables, every input and button in the tool, what the outputs mean, and where the data comes from. Country-specific data sets live on each country’s page; a step-by-step walkthrough is in How to model demography.

Table Dimensions Value column Unit Used by
population_base age 0–100 × sex (M/F) count persons demography (start)
fertility age 0–100 asfr_per_1000 births per 1000 women demography
mortality age 0–100 × sex qx annual death probability demography
migration age 0–100 × sex net_migration persons per year demography
recipient_share age 0–100 × sex share fraction 0–1 pensions (later)

The first four are the four demographic variables: the starting population and the three yearly flows — births (fertility), deaths (mortality) and net migration. recipient_share is coverage for the pensions model, not demography.

  • CSV, long format, one row per cell, header row.
  • Ages 0–100 inclusive; age 100 is a closed terminal group.
  • Sex coded M / F; array order male, then female.
  • No gaps or NaN — an incomplete table is rejected at load time.

The schema is identical for every country, so adding a country means supplying these tables — nothing in the engine changes.

Each parameter is a boxed block with a + / − collapse toggle; collapsed, it shows a one-line summary so many scenarios stay compact.

  • Model — projection period. Start from (year, ≥ the population dataset’s base year) and Forecast N years → horizon. A confidence badge grades the horizon: ≤25 yr high, 26–50 moderate, 51–75 low, >75 indicative only.
  • Population. Dropdown of population datasets (the start-of-projection age–sex structure).
  • Fertility / Mortality / Migration. A dataset dropdown, plus a fine-tuning trend (see below). Migration’s dropdown carries preset time paths (e.g. the national statistics office’s projection variants) instead of a single set.
  • Show projections button (each block) — opens a read-only preview (below).
  • Scenario name and Add scenario — runs the projection and adds the result to the chart and the scenario list.

Each flow variable can follow a “trend then plateau” path via its checkbox: the coefficient changes by ±X% per year for N years, then holds constant. Unchecked (or 0) leaves it flat.

  • Mortality is enabled by default and improves 0.5%/yr for 10 years, then plateaus — a conservative stand-in for ongoing mortality improvement.
  • Fertility and migration are stable unless enabled.
  • Choosing a preset migration scenario (already dynamic) auto-clears its trend; you can re-enable it to multiply the preset.

The right panel shows the assumption before running:

  • Population — an age–sex pyramid with total / male / female summary.
  • Fertility / mortality / migration — the age curve of the set. If a trend is active, a faint dotted curve shows where it lands by the horizon, with a one-line “was → became” summary (life expectancy e0 for mortality, TFR for fertility, net total for migration).
  • Distribution / Total-by-year toggle (fertility, mortality, migration): the second view plots the summary over time — migration’s net total per year (revealing how a preset scenario ramps down), fertility’s TFR by year, mortality’s e0 by year.

Population evolves year by year: each cohort ages and survives by qx, births are added at age 0 (asfr × female population, split by the sex ratio at birth), and net migration is applied. By default coefficients are held flat; the trend adjustment scales them per year as above.

Main chart (Inputs/Outputs) — the population forecast: one line per visible scenario (the “fan of forecasts”), with a table of each scenario’s data set, horizon and adjustments.

Outputs tab (controls on the left, chart on the right, ⬇ CSV export):

  • Age-sex structure — the population pyramid, animated across the whole projection (play / slider) or a Compare of two chosen years. Shows ageing and the shifting shape of the population.
  • Cohorts — population of any age band (presets 0–15, 16–64, 65+, 75+, 80+ or a custom range) by sex, one line per visible scenario. The 16–64 vs 65+ split is the core of old-age dependency and pension pressure.

The History tab shows the historical data behind a country (only where it is available):

  • Life expectancye0 (or e_x at any chosen age) from 1908, per sex. Tick Add model projections to overlay each scenario’s projected life expectancy (base mortality × its trend) as dotted lines — past and modelled future on one timeline. A year From/To range sets the horizontal scale.
  • Historical mortality — heatmapqx by age × year (colour, real-qx colourbar), with optional iso-qx isolines and age guides (65/80); sex Female / Male / Both.
  • qx at agesqx at 65, 80 and a custom age over time (log axis).
  • Deaths — age-sex tree — an animated pyramid of historical deaths.
  • Healthy life expectancy (HALE) — WHO HALE at birth and at 60 with 95% uncertainty bands, per sex.
Source Used for
Human Mortality Database mortality qx, life tables, historical deaths
WHO Global Health Observatory Healthy life expectancy (HALE)
INE (Spain) population, fertility, migration + projections
Rosstat (Russia) population, fertility, mortality, migration

Which vintages feed the baseline for each country, and the extra series shipped, are listed on the country pages.