This page provides detailed technical documentation of the statistical methods, calculations, and data processing techniques used throughout Mortality Watch. Understanding these methodologies is essential for correctly interpreting the visualizations and analyses.
Mortality Watch is fully open source on GitHub . All statistical methods, baseline calculations, and data processing pipelines are implemented in R and available for review, replication, and contribution.
The absolute number of deaths reported for a given time period and population. This is the most direct measure but doesn't account for population size or age structure, making comparisons between regions difficult.
Deaths per 100,000 population. This standardizes mortality by population size, allowing comparison between differently-sized populations. However, it doesn't account for differences in age structure.
Example: 1,000 deaths in a population of 500,000 = 200 deaths per 100,000 population
A mortality rate adjusted for differences in age structure between populations. This is crucial because mortality rates increase dramatically with age. Without age-standardization, comparisons between countries with different age structures (e.g., Japan vs. Nigeria) would be meaningless.
ASMR applies a weighted average of age-specific mortality rates, where the weights are taken from a "standard population" (see Standard Populations section below).
We support WHO2015, ESP2013, US2000, and country-specific 2020 standard populations
Age-Standardized Deaths (ASD) is an alternative approach to account for population aging when calculating excess mortality. Unlike ASMR which standardizes rates, ASD works directly with death counts by applying baseline mortality rates to current population age structures.
The ASD method (based on Levitt et al.) calculates expected deaths by:
ASD is particularly useful for understanding excess deaths in aging populations, as it separates the effect of population aging from changes in mortality rates.
Life Expectancy (LE) is defined as the average remaining years of life expected by a hypothetical cohort of individuals who would be subject to the mortality rates of the year of interest over the course of their remaining life. We provide both period LE at birth (all ages) as well as remaining LE at specific ages.
LE is calculated using Chiang's abridged life table methodology.
For weekly, monthly, and quarterly data, Pro users can toggle between two display modes:
The adjusted values are displayed by default and are recommended for most analyses. Raw values are useful for understanding the calculation artifacts or for research purposes.
Pro users can view remaining life expectancy at specific ages (e.g., LE at age 40 shows expected remaining years for someone aged 40)
Mortality data can be aggregated across different time periods. The choice of aggregation affects the granularity of analysis and can reveal different patterns.
Flu Season (Oct-Sep)
A year running from October to September, aligning with influenza season patterns in the Northern Hemisphere. This is useful for analyzing mortality impacts that follow seasonal respiratory illness patterns, as it captures each flu season as a single unit rather than splitting it across calendar years.
Display format: "2020/21" represents Oct 2020 - Sep 2021
Midyear (Jul-Jun)
A year running from July to June, sometimes used in Southern Hemisphere countries or for fiscal year analysis. This can align better with seasonal patterns in regions where winter mortality peaks occur mid-calendar-year.
Display format: "2020/21" represents Jul 2020 - Jun 2021
Weekly data smoothed using simple moving averages to reduce noise and reveal underlying trends. Each data point represents the average of the specified number of surrounding weeks.
Excess mortality estimates the difference between observed deaths and expected deaths based on historical patterns. This is calculated by comparing actual mortality data to a baseline projection.
The baseline represents what mortality would have been expected in the absence of unusual events. We calculate baselines using time series forecasting methods from the R fable package , a professional forecasting framework that implements state-of-the-art statistical methods.
The default baseline uses a simple 3-year pre-pandemic average (2017–2019). While straightforward, this may not capture underlying trends. As noted by Levitt et al.: "Changes in mortality rates may differ markedly year to year and across age and gender groups. During major events such as pandemics, wars, or natural disasters, estimates may diverge from observed deaths proportionally to the event's impact."
1. Last Value (Naive) — fable::NAIVE
Projects the most recent historical value forward. Assumes mortality rates remain constant at their last observed level. Best for stable populations with minimal trends.
2. Average (Mean) — fable::TSLM
Calculates the mean of the baseline period (default 2017–2019) and projects it forward. This is the default method. Smooths out year-to-year fluctuations but ignores trends.
3. Linear Regression (Trend) — fable::TSLM + trend()
Fits a linear trend to the baseline period and extrapolates it forward. Accounts for long-term improvement (or decline) in mortality rates. Useful when mortality has been consistently improving.
4. Exponential Smoothing (ETS) — fable::ETS + error() + trend()
An adaptive method that gives more weight to recent observations while accounting for trends. Can capture non-linear patterns in mortality improvement. Generally the most sophisticated approach.
Seasonal Adjustments: For sub-annual data (weekly, monthly, quarterly), all baseline methods automatically include seasonal components to account for recurring patterns (e.g., winter mortality peaks, summer troughs).
Once the baseline is established, excess mortality is simply the difference between observed and expected values:
Positive values indicate higher-than-expected mortality; negative values indicate lower-than-expected mortality.
Upper and lower bounds represent statistical uncertainty in the baseline projection. These are calculated by the fable package based on the prediction error distribution of each model.
Confidence intervals widen further into the future, reflecting increasing uncertainty. When observed values fall outside the confidence interval, it suggests a statistically significant deviation from historical patterns.
Age-standardization requires a reference age distribution (standard population). Different standard populations are used in different contexts:
The WHO's standard population based on global age distribution. This is the default choice for international comparisons as it represents a global average age structure. Recommended for comparing countries worldwide.
Eurostat's European standard population, reflecting the age structure of the European Union. Use this for comparing European countries or when working with Eurostat data.
The standard population used by the CDC and US health agencies, based on the 2000 US Census. Essential for comparisons with official US statistics or when analyzing US states.
Uses each country's own 2020 population age distribution as the standard. This shows internal trends over time without external age-structure assumptions, but makes international comparisons less meaningful.
Which to choose? For international comparisons, use WHO2015 or ESP2013 (for Europe). For US-specific analysis, use US2000. For country-level time trends, use 2020. The choice affects the absolute values but usually not the trends or patterns.
All data is sourced from official statistical agencies and international organizations (see the Sources page for details). Data is updated daily and processed through a validation pipeline to ensure consistency and accuracy.
When data is missing or suppressed, we do not impute or estimate values. Gaps in the visualizations indicate missing data. For excess mortality calculations, baseline models are fitted only to available historical data.
Our statistical methods are based on peer-reviewed research and established public health practices:
If you have questions about our methodology or need clarification on any calculations, please use our contact form or reach out on @MortalityWatch .