Skip to main content
v2026.11,858 entries · CC-BY 4.0
LAC HealthMedical & Research SuppliesReagents, PPE & instruments — chain-of-custody documented.Fast, traceable sourcing built for regulated research environments, from bench consumables to instrumentation.Shop lac.us CodeCASRAIlac.us

Excess Deaths: Models, Formula, and Calculation

A complete guide to calculating excess deaths and excess mortality, from expected baseline models and the CDC Farrington algorithm to P-scores and reporting.

Written and maintained by CASRAI Editorial Board

Last updated

Excess deaths—also termed excess mortality—represent the difference between observed deaths in a population over a designated period and expected deaths projected from historical non-crisis baselines. In epidemiological surveillance and vital statistics research, this counterfactual metric measures the net demographic toll of epidemics, natural disasters, or healthcare disruptions. By analyzing all-cause mortality, researchers avoid diagnostic misclassification and underreporting biases inherent in individual death certificates. Within modern public health surveillance, excess mortality modeling provides an objective baseline for impact assessment across municipal, state, and global jurisdictions.

The National Center for Health Statistics (NCHS) within the Centers for Disease Control and Prevention (CDC) publishes provisional death counts and excess death estimates drawn from the National Vital Statistics System (NVSS). Study reports of excess mortality can follow the Guidelines for Accurate and Transparent Health Estimates Reporting (GATHER) and, for observational designs, the STROBE checklist. Mortality estimates are often placed alongside the CDC program evaluation framework in program reviews; for the field distinction see epidemiology vs. public health.

Formula and Mathematical Framework

Epidemiologists quantify excess mortality through three core quantities: absolute excess, relative excess (P-score), and excess above an upper threshold from a statistical baseline model.

1. Absolute Excess Deaths

The absolute volume of excess mortality within an observation window t is defined as:

Eabs = Dobs − Dexp

Where Dobs is observed all-cause deaths and Dexp is modeled expected deaths from historical baselines.

2. Relative Excess Mortality (P-Score)

To standardize comparisons across populations of different sizes, researchers calculate the P-score percentage:

P = ((Dobs − Dexp) / Dexp) × 100%

A positive P-score indicates mortality above baseline expectations, whereas a negative value reflects observed mortality below expected projections.

3. Baseline Models and the CDC Upper Threshold

NCHS describes excess deaths as the difference between observed numbers of deaths in specific time periods and expected numbers. For the excess deaths CDC reports, expected counts come from Farrington surveillance algorithms, which use overdispersed Poisson generalized linear models with spline terms to model trends in counts while accounting for seasonality. NCHS sets an upper bound threshold based on a one-sided 95% prediction interval of the expected counts, and counts excess deaths when observed deaths exceed it; negative differences are set to zero. Using both the average expected count and the upper bound threshold gives a range of estimates. NCHS defines percent excess as excess deaths divided by the threshold.

A generic seasonal baseline of the same family can be written as a log-linear model with a trend and annual harmonics. This illustrates the model class and is not the exact CDC specification:

ln(μt) = α + β·t + ∑k=1K [γk·cos(2π·k·t / 52) + δk·sin(2π·k·t / 52)]

Here μt is the expected death count in week t, α the intercept, β·t a linear trend, and γk, δk harmonic terms for annual seasonality. Overdispersion is allowed by Var(Yt) = φ·μt with φ > 1. With an upper threshold Ut, the excess above the threshold is:

Ethresh = max(0, Dobs − Ut)

Worked Example with Shown Arithmetic

This hypothetical example uses a simple normal approximation for a one-sided 95% upper threshold to show how the quantities fit together (it is not the exact CDC algorithm). A surveillance unit evaluates weekly all-cause mortality in Week 42, and its baseline model yields:

  • Expected Baseline Deaths (Dexp = μ42): 1,250 deaths
  • Overdispersion Parameter (φ): 1.44
  • Observed Registered Deaths (Dobs): 1,520 deaths

Step 1: Compute Standard Error and Prediction Threshold

The prediction standard error incorporating overdispersion is:

SE = √(φ × μ42) = √(1.44 × 1,250) = √1,800 = 42.426 deaths

Using a one-sided 95% critical value (z = 1.645), the upper threshold is:

U42 = μ42 + (z × SE) = 1,250 + (1.645 × 42.426) = 1,250 + 69.79 = 1,319.79 ≈ 1,320 deaths

Step 2: Calculate Absolute and Threshold Excess

Absolute excess mortality is calculated as:

Eabs = 1,520 − 1,250 = +270 deaths

Statistically significant threshold excess is:

Ethresh = 1,520 − 1,320 = +200 deaths

Step 3: Calculate the Relative Excess P-Score

The proportional increase above expected mortality is:

P = ((1,520 − 1,250) / 1,250) × 100% = (270 / 1,250) × 100% = +21.60%

Observed all-cause mortality during Week 42 was 21.60% above baseline, with 200 deaths above the upper threshold.

Interpretation and Reading Guidance

Read an estimate by comparing the observed count with both the expected count and the upper threshold. The two comparisons answer different questions:

Observed deaths Reading
At or below the expected count (P ≤ 0%) No excess; a negative value means fewer deaths than expected.
Above the expected count but at or below the upper threshold Positive point excess, but within the range of normal statistical variation.
Above the upper threshold Excess counted under the NCHS approach.

Assumptions and Common Mistakes

Reliable excess mortality estimates depend on a few modeling assumptions. Violating them can introduce systematic bias:

  • Demographic Confounding: Relying on unadjusted multi-year historical averages ignores population aging. In growing or aging populations, baseline deaths naturally increase over time. Analysts must include secular time trends or age-standardized rates to prevent attributing demographic expansion to excess crisis deaths.
  • Provisional Reporting Delays: Death records take time to be completed and registered, so raw counts for recent weeks look artificially low. NCHS weights recent counts by the inverse of completeness; analysts without such weights can exclude the most recent weeks.
  • Overdispersion Misspecification: Assuming a standard Poisson distribution forces variance to equal the mean. Real-world mortality counts are often overdispersed. Ignoring overdispersion narrows intervals and can generate false alarms.
  • Baseline Contamination: Including crisis years in reference baselines artificially elevates expected deaths (Dexp), causing severe underestimation of subsequent excess mortality. Baselines must be derived exclusively from unperturbed reference periods.
  • Mortality Displacement: A spike among vulnerable people can be followed by a period of lower-than-expected deaths (sometimes called mortality displacement), so cumulative multi-month totals are more informative than a single week.

How to Report Excess Mortality (APA 7th Format)

In epidemiological publications, excess mortality estimates should report the observed count, the expected baseline, the method used for the threshold, and the excess. This template uses the hypothetical numbers above.

Narrative Reporting Example:

“In surveillance Week 42, 1,520 deaths were observed compared with an expected baseline of 1,250 deaths. Absolute excess mortality was 270 deaths, a relative increase of 21.60% (P-score = +21.60%). Observed deaths exceeded the upper threshold (U42 = 1,320) by 200 deaths.”

How to Calculate Excess Deaths (Excel, R, or Python)

The snippets below sketch the calculation in Excel, R, and Python using the simple normal-approximation threshold from the worked example.

1. Excel Implementation

In a worksheet where Column B contains Observed Deaths (Dobs), Column C contains Expected Baseline Deaths (Dexp), and Column D contains the upper 95% threshold (Ut):

  • Absolute Excess (Column E): =B2-C2
  • P-Score Percentage (Column F): =((B2-C2)/C2)*100
  • Significant Excess (Column G): =IF(B2>D2, B2-D2, 0)

2. R Implementation (Quasi-Poisson GLM)

# Fit quasi-Poisson baseline model with seasonal harmonics
fit <- glm(deaths ~ time + cos(2 * pi * week / 52) + sin(2 * pi * week / 52),
           family = quasipoisson(link = "log"),
           data = baseline_df)

# Predict expected baseline and calculate upper 95% threshold
pred <- predict(fit, newdata = current_df, type = "response", se.fit = TRUE)
phi <- summary(fit)$dispersion
se_pred <- sqrt(phi * pred$fit + (pred$se.fit)^2)
upper_bound <- pred$fit + (1.645 * se_pred)

# Calculate excess metrics
excess_abs <- current_df$deaths - pred$fit
p_score <- ((current_df$deaths - pred$fit) / pred$fit) * 100
significant_excess <- pmax(0, current_df$deaths - upper_bound)

3. Python Implementation (Statsmodels)

import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf

# Fit baseline model with cyclical seasonal terms
model = smf.glm(
    formula="deaths ~ time + np.cos(2 * np.pi * week / 52) + np.sin(2 * np.pi * week / 52)",
    data=baseline_df,
    family=sm.families.Poisson()
).fit(scale='X2')  # Pearson chi-square dispersion estimate

# Predict baseline and upper threshold
current_df['expected'] = model.predict(current_df)
dispersion = model.scale
current_df['se'] = np.sqrt(dispersion * current_df['expected'])
current_df['upper_95'] = current_df['expected'] + (1.645 * current_df['se'])

# Calculate excess metrics
current_df['excess_abs'] = current_df['deaths'] - current_df['expected']
current_df['p_score'] = ((current_df['deaths'] - current_df['expected']) / current_df['expected']) * 100
current_df['excess_sig'] = np.maximum(0, current_df['deaths'] - current_df['upper_95'])

Frequently Asked Questions

What is the difference between excess deaths and cause-specific mortality counts?

Cause-specific mortality counts rely solely on underlying cause codes recorded on death certificates, which can be affected by testing and coding practices during emergencies. Excess deaths compare total all-cause mortality with an expected baseline, so they capture both direct and indirect effects of a crisis without depending on cause-of-death coding.

How does the CDC calculate excess deaths?

NCHS uses Farrington surveillance algorithms, based on overdispersed Poisson generalized linear models with spline terms that model trends and seasonality, fitted to historical NVSS counts. It reports a range: observed deaths minus the average expected count, and observed deaths minus an upper bound threshold based on a one-sided 95% prediction interval.

What is a P-score in excess mortality research?

A P-score expresses the difference between observed and expected deaths as a percentage of expected deaths: ((Observed − Expected) / Expected) × 100%. Because it is relative, it allows comparison between populations of different sizes.

How do reporting delays affect provisional excess death estimates?

Recent weeks are incomplete because deaths take time to be registered. NCHS adjusts for this by weighting provisional counts by the inverse of completeness; for example, data that are 50% complete at a given lag are doubled.

Sources

  • National Center for Health Statistics, Centers for Disease Control and Prevention. Excess Deaths Associated with COVID-19: Technical Notes. https://www.cdc.gov/nchs/nvss/vsrr/covid19/excess_deaths.htm (checked 2026-11-07).
  • World Health Organization. Global excess deaths associated with COVID-19 (modelled estimates). https://www.who.int/data/sets/global-excess-deaths-associated-with-covid-19-modelled-estimates (checked 2026-11-07).
  • Farrington, C. P., Andrews, N. J., Beale, A. D., & Catchpole, M. A. (1996). A statistical algorithm for the early detection of outbreaks of infectious disease. Journal of the Royal Statistical Society: Series A, 159(3), 547–563. https://doi.org/10.2307/2983331 (checked 2026-11-07).

Follow CASRAI

Research-administration guidance, standards updates and independent tool reviews.

Ask CASRAI · free to try

Ask about Excess Deaths: Models, Formula, and Calculation

Ask your first 2 questions free below. Subscribers get 150 a day for $29 a month.

An AI assistant specialized in research administration. It cites the sources behind every answer, labels web answers and says when it can't answer.

Answers draw on CASRAI's guides and dictionary plus the federal and funder documents we index: Federal Register, Grants.gov, Regulations.gov and UKRI.

Works on this site and inside Claude, Cursor and the AI tools you already use.

Everything CASRAI publishes — this page, the dictionary, the guides and the news — stays free to read, with no account and no card.

Referenced across the research world

University of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logoUniversity of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logo
  • University of Cambridge logo
  • Columbia University logo
  • Crossref logo
  • University of Edinburgh logo
  • Harvard University logo
  • University of Oxford logo
  • Princeton University logo
  • Stanford School of Medicine logo
  • University College London logo
  • ORCID logo

View CASRAI adoption →