Methodology, concepts, and reading guide
Population is not a single line moving through time. It is a living stock shaped by births, deaths, migration, and the age structure inherited from every earlier year. This visualizer makes those moving parts visible, then lets you change their assumptions and follow the consequences.
Later years are simulated so inconsistent 2023-2025 source series are not mixed into the baseline.
People age, die, migrate, and give rise to new cohorts one simulated year at a time.
The result is a transparent scenario, not a claim about what must happen.
Population discussions often hide the mechanism. A total may keep growing after fertility falls, deaths may rise while health improves, and a small migration rate may become a large absolute flow. These are not contradictions. They are consequences of age structure, scale, and timing.
The visualizer is built for demographic literacy: to show why population momentum matters, why births and TFR are different quantities, why life expectancy is a summary of an entire mortality schedule, and why the same population total can conceal radically different futures.
Use the simulator to compare internally consistent worlds. Do not read any single path as a forecast, promise, or policy recommendation.
A short orientation
| Question | Change | Panels to compare |
|---|---|---|
| Why can population grow below replacement fertility? | Lower TFR while holding longevity and migration still. | TFR, Births and Deaths, Population Pyramid, Total Population |
| What does radical longevity change first? | Compare Halt with Medium or Fast LEV. | Death Curve, Median Age, Age Share, Absolute Growth |
| Can migration offset natural decline? | Increase migration per mille gradually. | Net Migration, Migration Per Mille, Births and Deaths, Total Population |
What is measured and what is reconstructed
Source coverage differs by place and year. The app therefore uses an explicit fallback order instead of pretending every historical point has the same evidential status.
Before 1950, and for sparse country-years, some smooth curves are model-assisted reconstructions. They are useful for broad trajectories, not for fine annual claims.
The annual cohort ledger
The engine uses a cohort-component approach: a standard demographic idea implemented here in single-year ages. Each simulated year follows the same sequence.
The 2022 distribution is smoothed from source age groups and scaled to the observed population.
Women are approximated as half of each cohort from ages 15-49. A fixed fertility-by-age profile converts TFR into annual births.
Each cohort is multiplied by that year's annual probability of death at its age. Deaths are summed across all ages.
Survivors move forward exactly one age. Births enter age zero.
The per-mille assumption becomes an absolute total and is distributed with a generic profile weighted toward working ages and children.
The resulting age structure becomes the starting point for the next year, preserving demographic momentum.
At the 2022 handoff, the modeled deaths by age are proportionally adjusted to reproduce the observed total deaths while retaining the curve's age pattern. From 2023 onward, total deaths emerge directly from the selected mortality curve and the evolving cohorts.
The fertility profile is fixed across places and future years, centered in the late twenties with a smaller later-age component. The sex split is fixed at 50/50. Migration uses the same age profile everywhere. The oldest modeled age is 500, which is a finite computational guardrail rather than a claim about a biological maximum.
Negative cohort values are not allowed. Annual death probabilities are constrained between zero and 0.999999 after caution is applied.
Births are a flow; fertility is a rate
Total fertility rate is a period measure: the number of births a woman would have if she experienced that year's age-specific fertility rates throughout her reproductive life. It is not the number of births in that year. Annual births also depend on how many people are currently at childbearing ages.
This distinction explains population momentum. A large young generation can produce many births even at a low TFR; a small generation can produce few births even when TFR rises.
| Fertility preset | Checkpoint path | Question it explores |
|---|---|---|
| 2.1 forever | 2.1 in 2030 and thereafter | Approximate long-run replacement without migration, after age structure settles. |
| UN median | 2.1 in 2030, 2.0 in 2050, 1.8 in 2100 | A slow global decline around conventional projection territory. |
| Recent trend | 2.0 in 2030, 1.75 in 2040, 1.6 in 2050, 1.5 in 2100 | The default lower-fertility path. |
| Floor of 1 | 2.0 in 2030, 1.75 in 2040, 1.5 in 2050, 1.0 from 2070 | A steep decline that eventually stabilizes at one child per woman. |
| No social rules | 2.0 in 2030, 1.9 in 2035, 1.6 in 2040, 1.2 in 2050, 0.9 from 2070 | An intentionally extreme low-fertility sensitivity test. |
Presets are starting points, not locked narratives. Selecting one creates or updates the necessary checkpoints; every number can then be edited. Scenario names are shorthand: "UN median" is a hand-set path in this visualizer, not a live import of the current UN medium variant.
A life expectancy implies an entire curve
Period life expectancy summarizes the age-specific death rates of one year. It asks how long a newborn would live if that year's mortality rates remained unchanged throughout life. It is not the predicted lifespan of a real newborn whose conditions will continue to change.
To turn a chosen life expectancy into annual deaths, the visualizer constructs a generalized mortality curve. Adult disease mortality follows a Gompertz-Makeham shape: a low background risk plus a risk that rises exponentially with age. Infant, childhood, young-adult external, and late-life components are added. The adult curve is shifted until the life table generated by all age-specific rates matches the requested life expectancy.
Includes disease mortality plus modeled infant, childhood, external, and other-age effects. It drives deaths, survival to age 15, and population simulation.
Retains the adult disease shape and removes the external component. It is used only for mortality-equivalent age so accidents and early-life conditions do not masquerade as aging.
The death-curve panel uses a hybrid vertical scale. Rates from 0 to 0.1 deaths per 1,000 are linear and receive one band of space; rates from 0.1 to 1,000 are logarithmic. This keeps tiny improvements visible without flattening the steep old-age rise. The horizontal range ends when all displayed curves reach 995 deaths per 1,000, subject to the age-500 guardrail.
LEV means longevity escape velocity in this interface. It is used as a scenario label, not as an empirical claim that such a threshold has been reached.
Curves for life expectancy 120, 150, 200, or higher extend a smooth mortality relationship far outside modern observations. They are a way to make assumptions mathematically usable, not evidence that those lifespans are attainable.
Exploratory measures introduced here
Two measures in this visualizer are interpretive tools rather than standard official indicators. They are designed to expose relationships that ordinary TFR and chronological age leave implicit.
The measure discounts TFR by the probability that a newborn survives to age 15 under the generalized mortality curve for that place and year.
Its purpose is to distinguish births from the number of children who reach the threshold of reproductive age. It is especially informative in the high-child-mortality past.
It is not a replacement fertility rate. It does not model sex-specific survival, future fertility of the survivors, maternal mortality, infertility, or the full generation interval.
For an actual age under the selected life expectancy, the model finds the age on a life-expectancy-75 disease-only curve with the same annual mortality rate. If an age-78 person in one curve has the disease mortality of an age-70 person on the baseline, the visualizer reports a feel age of about 70.
The comparison begins at age 20. People younger than 20 remain at their chronological ages. If extreme longevity maps many adults to the age-20 floor, their distribution is spread from 20 to 40 with a five-year half-life, making age 20 twice as likely as 25, 25 twice as likely as 30, and so on. Linear interpolation between ages prevents whole cohorts from being dumped into a single year, and the total population is preserved.
This is not subjective wellbeing, disability-free life expectancy, biological age, or a clinical health score. It is only an equivalence between modeled disease mortality rates.
In the comparison pyramid, the actual and feel-age halves are normalized independently to occupy the same width. That makes their shapes legible even when one distribution is concentrated into a narrower age range. Hover values remain real people counts, but bar width should not be used to compare absolute totals across the two halves.
The remaining assumptions
What each view is actually saying
| Panel | What it answers | Interpretation note |
|---|---|---|
| Total Population | How many people are alive? | Line color encodes annual growth: warm colors mark fast growth, greens slow growth, cyan near-zero change, and blue through magenta decline. Expand the key for exact bands. |
| Births and Deaths | What are the two main natural flows? | The gap is natural increase or decrease, not total growth unless migration is zero. |
| TFR | What fertility regime produces births? | The adjusted line discounts for modeled mortality before age 15; it is not an official TFR series. |
| Life Expectancy | How is the mortality schedule shifting? | Color encodes annual change, from red for decline through yellow and green to blue for the fastest gains. |
| Growth Rate | How fast is population changing relative to its size? | A percentage can shrink while absolute growth remains large. |
| Absolute Growth | How many people are added or lost each year? | This is population change, combining natural change and migration. |
| Net Migration | How many net migrants are added or removed? | Historical values are residual estimates; future values come from the per-mille assumption. |
| Migration Per Mille | How large is migration relative to population? | One per mille means one net migrant per 1,000 residents in that year. |
| Death Curve | At what ages is annual mortality concentrated? | Add up to ten years or life expectancies. Curves include caution for simulated years. |
| Population Pyramid | What is the age structure? | The source cohorts are not sex-specific here; each age is split equally into female and male halves. |
| Feel-Age Comparison | How does chronological age structure differ from mortality-equivalent age? | Starts at age 20 and independently scales the two sides for shape comparison. |
| Selected Age Share | What percentage lies within an age interval? | Edit both ages inside the panel. Historical values use the best available cohort reconstruction. |
| Median / Percentile Age | At what age is a chosen cumulative share reached? | At 50%, this is the median. The adjusted line applies the feel-age transformation first. |
| Health / Feel Age | How does actual age map onto the LE-75 mortality baseline? | Uses disease-only curves; it is a model relationship, not a medical assessment. |
Drag across a chart to zoom its x-axis. Double-click a chart or use Reset zoom on all graphs to return. "Y starts at 0" trades local detail for an honest view of absolute scale. Panels can be moved, resized, minimized, enabled, or disabled; Reset graphs restores a clean packing without resetting the demographic assumptions.
Dynamic pyramid height uses the 99.9th age percentile plus five years, rounded, so the axis follows the meaningful population rather than a fixed maximum.
World, regions, and countries
The place menu is ordered from World to continents, then custom and UN-style regions, then countries. The European Union and ASEAN are explicit groups. The UN geoscheme-inspired Asian grouping places Iran and Afghanistan in Central Asia, as requested; European and Oceanian subregions are omitted.
Group population, births, deaths, cohorts, and migration are assembled from their available members. Group life expectancy is population-weighted. Where a custom group has no direct fertility series, its TFR is inferred from aggregate births, population, growth, survival, and reproductive exposure rather than averaged country by country.
Membership is fixed in the code and does not change historically. Territorial definitions, missing member series, and name mismatches can therefore create differences from official aggregates.
Responsible interpretation
A valuable conclusion is usually conditional: "With this fertility path, mortality curve, migration rate, and starting age structure, this follows." Keeping the conditions visible is the point of the tool.
Data provenance
The visualizer loads machine-readable chart data live from Our World in Data. Those chart datasets assemble and process underlying work from the United Nations World Population Prospects, the Human Mortality Database, historical population reconstructions, Gapminder, UN IGME, and other providers. Follow each chart link for its current metadata, citations, and licensing.
Data labels and provider vintages can change as live datasets are revised. The visualizer's custom mortality family, survival-adjusted TFR, caution control, and feel-age transformation are model logic created for this tool and are not published indicators from the linked providers.
Terms used throughout the app
Created by Alejandro Zarzuelo Urdiales. Explore more of his work at alejandrozarzuelo.com.