# Population growth and age composition outweigh rate reductions in United States heart-disease deaths, 2018–2024

## Summary

Why did United States heart-disease deaths increase between 2018 and 2024? An updated analysis of final national death counts and published population estimates averages all six orders of a demographic decomposition. Known-age deaths increase by {{R1.primary.known_age_death_difference}}. Population size contributes {{R1.primary.components.population.deaths}} deaths, age composition {{R1.primary.components.age_structure.deaths}}, and age-specific rates {{R1.primary.components.rates.deaths}}. Demographic contributions outweigh the negative rate contribution. These are arithmetic contributions conditional on the source denominators, which change estimation methods during the period, rather than causal effects or individual mortality risks.

## Claims

- **C1:** For final national heart-disease data with known age, the 2018–2024 increase of {{R1.primary.known_age_death_difference}} deaths decomposes into {{R1.primary.components.population.deaths}} deaths associated arithmetically with population size, {{R1.primary.components.age_structure.deaths}} with age composition, and {{R1.primary.components.rates.deaths}} with age-specific rates when contributions are averaged over all six factor orders. The positive demographic contributions outweigh the negative rate contribution. This is a statement about the fixed CDC WONDER snapshot and specified age bins.

## Methods

### Prior work and scope

The broad explanation is established. [Weir et al. (2016)](doi:10.5888/pcd13.160211) decomposed changes in United States heart-disease deaths into population growth, aging, and rates, including projections beyond their observed data. [Sidney et al. (2019)](doi:10.1001/jamacardio.2019.4187) studied aging and heart-disease mortality during 2011–2017. [Sidney et al. (2022)](doi:10.1001/jamanetworkopen.2022.3872) separated age-associated and residual risk-associated changes during 2011–2019 and 2019–2020 using year-to-year counterfactual populations. Their age-associated component combines size and composition changes. The present analysis separates those factors.

The symmetric attribution is also established. [Cheng et al. (2019)](doi:10.1371/journal.pone.0216613) proposed equal allocation of pairwise and three-factor interactions as their method III. Averaging all six replacement orders gives that same allocation. [Tabassum et al. (2026)](doi:10.1016/j.pmedr.2026.103373) already studied mortality trends through provisional 2024 data; the present analysis uses the final 2024 release. This is a reproducible update of existing approaches, with a different period and explicit order sensitivity, rather than a claim to a new mechanism or method. The targeted search covered CDC publications, PubMed, and journal full text for heart-disease mortality, aging, and decomposition. It was not a systematic review or a meta-analysis, and it cannot establish the absence of other overlapping work.

### Registration and source

The [registered plan](prereg:c33d60584626c8ac28aa70ed502873b96036c0aec47043f4524cd64ec216431f) is preserved byte for byte in [plan/analysis-plan.json](plan/analysis-plan.json). Registration preceded retrieval of the age-specific cells and calculation of the decomposition. The literature and published national summary rates had already been inspected; that prior knowledge was disclosed in the plan. No outcome-driven selection of years, bins, or comparisons followed the registration. [deviations.json](deviations.json) records an adaptation of the sex-total validation to the source's suppression behavior.

We queried the National Center for Health Statistics' **Underlying Cause of Death by Single Race, 2018–2024**, CDC WONDER database D158, released in 2026, for United States residents in the 50 states and District of Columbia, all races and Hispanic origins. Heart disease was the underlying cause group I00–I09, I11, I13, and I20–I51, selected through the source's 113-cause group GR113-054. The three queries select both sexes, females, and males separately; each groups by year and the standard ten-year age categories. Exact requests and responses are included under [data/](data/), and response digests are reproduced in [results/R1.json](results/R1.json). Requests were submitted to the [official API](https://wonder.cdc.gov/wonder/help/wonder-api.html). The [dataset documentation](https://wonder.cdc.gov/wonder/help/ucd-expanded.html) defines residence, underlying cause, disclosure rules, and population denominators. Retrieval was on 2026-10-06 UTC.

The primary comparison is 2018 versus 2024. Bins are less than one year, 1–4, 5–14, 15–24, 25–34, 35–44, 45–54, 55–64, 65–74, 75–84, and 85 years and older. We used integer deaths and population counts from the same query, not rounded source rates. Known-age populations sum to source national population totals. Each required age cell has at least 10 deaths and a positive denominator. We excluded not-stated age, retained the source's suppression markings, and neither reconstructed suppressed cells nor treated them as zero. Known-age female and male counts and populations sum exactly to the combined-sex cells in every bin and year. The source omitted sex-specific subtotal rows; the code therefore checks the independent known-age cell sums rather than inferring suppressed not-stated counts.

The population estimates are July 1 postcensal resident estimates from each year's vintage. The baseline uses Vintage 2018 based on the 2010 census; 2021 and later use a blended or modified blended 2020 base, including Vintage 2024 at the endpoint. We preserve these published denominators rather than harmonizing them across census vintages. That choice is part of the target estimand and a material limitation.

### Decomposition and verification

For age bin $a$ and year $t$, let $d_{at}$ denote deaths, $n_{at}$ population, $N_t=\sum_a n_{at}$ total known-age population, $s_{at}=n_{at}/N_t$ its age shares, and $r_{at}=d_{at}/n_{at}$ annual age-specific death rates. The identity is

$$
D_t=N_t\sum_a s_{at}r_{at}. \tag{1}
$$

We replaced the entire $N$, $s$, and $r$ factors from the baseline to the endpoint in all six orders. Each step's change in Eq. (1) was assigned to the replaced factor, and its average across orders is the reported contribution. All point calculations used exact rational arithmetic. Separately, the code expands Eq. (1) into main terms, pairwise interactions, and the three-factor interaction, dividing pairwise terms equally between their factors and the triple term equally among all three. Its exact agreement with the path average checks the implementation. Reversing the endpoints negates each averaged contribution exactly, and each order and the average reconcile exactly to the observed death difference. Display rounding can prevent printed components from summing exactly.

### Conditional uncertainty and planned checks

Death counts are complete registered counts for this snapshot, not a survey sample. To describe hypothetical count variation, we condition on the supplied populations and model age-year deaths as independent Poisson variables with their observed counts as plug-in means. Each contribution is linear in those counts because populations are fixed. For count coefficients $w_{at}$, the plug-in variance is $\sum_{a,t}w_{at}^2d_{at}$. The code derives those coefficients analytically and independently checks every coefficient by increasing an endpoint age count by one and recalculating every path. Intervals use the normal quantile at 0.975 and are two-sided 95% conditional model intervals, without multiplicity adjustment. There are no hypothesis tests or p-values. These intervals do not quantify uncertainty from death coding, denominator estimates, bin choice, or the attribution convention. In particular, the order ranges are sensitivity ranges, not confidence intervals.

All planned checks are reported: the endpoint comparison for each sex; baseline 2019; adjacent years throughout the period; coarser bins below 65, 65–74, 75–84, and 85 or older; and exclusion of the open-ended oldest bin, which changes the target population. Their full components, conditional intervals, and order paths are in R1. No exploratory outcome analysis was added. Run [code/run](code/run) in the digest-pinned Python container specified in [env/Dockerfile](env/Dockerfile). [code/analyze.py](code/analyze.py) uses only the Python standard library and needs no network during reproduction.

## Results

C1 concerns an increase from {{R1.primary.baseline_known_age_deaths}} to {{R1.primary.endpoint_known_age_deaths}} known-age deaths, or {{R1.primary.death_percent_change}}% of baseline deaths. The corresponding known-age crude rates are {{R1.primary.baseline_crude_per_100000}} and {{R1.primary.endpoint_crude_per_100000}} deaths per {{R1.rate_reporting_population}} residents. All-age totals are {{R1.source_summary.0.all_age_deaths}} in 2018 and {{R1.source_summary.6.all_age_deaths}} in 2024; their not-stated-age counts are {{R1.source_summary.0.unknown_age_deaths}} and {{R1.source_summary.6.unknown_age_deaths}}. Those excluded deaths explain why the known-age difference differs from the all-age difference.

**Table 1.** Averaged contributions and conditional intervals for C1. A positive contribution increases the counterfactual death count.

| Factor | Contribution (deaths) | Baseline deaths (%) | Conditional interval (deaths; level in Methods) | Range over individual orders (deaths) |
|---|---:|---:|---|---|
| Population size | {{R1.primary.components.population.deaths}} | {{R1.primary.components.population.baseline_percent}} | {{R1.primary.components.population.conditional_poisson_ci95_low_deaths}} to {{R1.primary.components.population.conditional_poisson_ci95_high_deaths}} | {{R1.primary.components.population.all_orders_min_deaths}} to {{R1.primary.components.population.all_orders_max_deaths}} |
| Age composition | {{R1.primary.components.age_structure.deaths}} | {{R1.primary.components.age_structure.baseline_percent}} | {{R1.primary.components.age_structure.conditional_poisson_ci95_low_deaths}} to {{R1.primary.components.age_structure.conditional_poisson_ci95_high_deaths}} | {{R1.primary.components.age_structure.all_orders_min_deaths}} to {{R1.primary.components.age_structure.all_orders_max_deaths}} |
| Age-specific rates | {{R1.primary.components.rates.deaths}} | {{R1.primary.components.rates.baseline_percent}} | {{R1.primary.components.rates.conditional_poisson_ci95_low_deaths}} to {{R1.primary.components.rates.conditional_poisson_ci95_high_deaths}} | {{R1.primary.components.rates.all_orders_min_deaths}} to {{R1.primary.components.rates.all_orders_max_deaths}} |

The combined demographic contribution is {{R1.primary.combined_demographic_contribution_deaths}} deaths, with a conditional interval from {{R1.primary.combined_demographic_conditional_ci95_low_deaths}} to {{R1.primary.combined_demographic_conditional_ci95_high_deaths}} deaths at the level specified in Methods. This interval includes the covariance between size and age-composition contributions. The rate contribution is negative in every individual order. Age composition slightly exceeds size in the symmetric average, but their ranking reverses in some orders. This does not support selecting either as the uniquely dominant demographic factor. The rate component is a weighted aggregate: it does not imply a decline in every age bin. The [endpoint age cells](results/R1.json) include the increases in childhood bins as well as declines in other bins.

**Table 2.** Planned endpoint sensitivity comparisons. All units are deaths. Full conditional intervals and order paths are in R1.

| Comparison | Observed change | Size | Age composition | Rates |
|---|---:|---:|---:|---:|
| Females, 2018–2024 | {{R1.sensitivity.0.known_age_death_difference}} | {{R1.sensitivity.0.components.population.deaths}} | {{R1.sensitivity.0.components.age_structure.deaths}} | {{R1.sensitivity.0.components.rates.deaths}} |
| Males, 2018–2024 | {{R1.sensitivity.1.known_age_death_difference}} | {{R1.sensitivity.1.components.population.deaths}} | {{R1.sensitivity.1.components.age_structure.deaths}} | {{R1.sensitivity.1.components.rates.deaths}} |
| Combined sexes, 2019–2024 | {{R1.sensitivity.2.known_age_death_difference}} | {{R1.sensitivity.2.components.population.deaths}} | {{R1.sensitivity.2.components.age_structure.deaths}} | {{R1.sensitivity.2.components.rates.deaths}} |
| Coarser age bins, 2018–2024 | {{R1.sensitivity.3.known_age_death_difference}} | {{R1.sensitivity.3.components.population.deaths}} | {{R1.sensitivity.3.components.age_structure.deaths}} | {{R1.sensitivity.3.components.rates.deaths}} |
| Oldest bin excluded, 2018–2024 | {{R1.sensitivity.4.known_age_death_difference}} | {{R1.sensitivity.4.components.population.deaths}} | {{R1.sensitivity.4.components.age_structure.deaths}} | {{R1.sensitivity.4.components.rates.deaths}} |

The demographic contributions exceed the negative rate contribution in each planned endpoint comparison. Sex-specific components need not sum to combined-sex components because their separate population compositions define different counterfactuals; only the observed death changes must add.

**Table 3.** Every planned adjacent-year comparison. All units are deaths.

| Years | Observed change | Size | Age composition | Rates |
|---|---:|---:|---:|---:|
| 2018–2019 | {{R1.annual.0.known_age_death_difference}} | {{R1.annual.0.components.population.deaths}} | {{R1.annual.0.components.age_structure.deaths}} | {{R1.annual.0.components.rates.deaths}} |
| 2019–2020 | {{R1.annual.1.known_age_death_difference}} | {{R1.annual.1.components.population.deaths}} | {{R1.annual.1.components.age_structure.deaths}} | {{R1.annual.1.components.rates.deaths}} |
| 2020–2021 | {{R1.annual.2.known_age_death_difference}} | {{R1.annual.2.components.population.deaths}} | {{R1.annual.2.components.age_structure.deaths}} | {{R1.annual.2.components.rates.deaths}} |
| 2021–2022 | {{R1.annual.3.known_age_death_difference}} | {{R1.annual.3.components.population.deaths}} | {{R1.annual.3.components.age_structure.deaths}} | {{R1.annual.3.components.rates.deaths}} |
| 2022–2023 | {{R1.annual.4.known_age_death_difference}} | {{R1.annual.4.components.population.deaths}} | {{R1.annual.4.components.age_structure.deaths}} | {{R1.annual.4.components.rates.deaths}} |
| 2023–2024 | {{R1.annual.5.known_age_death_difference}} | {{R1.annual.5.components.population.deaths}} | {{R1.annual.5.components.age_structure.deaths}} | {{R1.annual.5.components.rates.deaths}} |

The negative endpoint rate contribution does not describe every intervening year. The rate contributions are positive during the pandemic-era comparisons, and the age-composition component is negative in some adjacent years. The conspicuous 2020–2021 age-composition change coincides with the documented population-method break; the accounting alone cannot distinguish estimation changes from demographic changes. Adjacent-year contributions use different reference populations, so their sums need not equal the direct endpoint components.

## Limitations

This is an arithmetic accounting of final registered underlying-cause deaths conditional on a specified data release. It does not identify causes of rate changes, deaths prevented by treatment, behavioral risks, pandemic effects, or an individual's probability of dying. The rate component reflects changes in all causes of age-specific underlying-heart-disease rates, including coding and changes in composition within bins; it is not a causal measure of underlying biological risk.

The population figures mix annual estimate vintages and cross a census-base methodology break. CDC specifically cautions that denominators from 2021 onward differ in methodology from earlier years. Estimated size, shares, and rates can all move when the population estimates are revised. We did not rerun the analysis on a common-vintage or intercensal population series. The conclusions therefore concern the supplied WONDER denominators, and a smoother demographic interpretation needs that additional analysis. Conditional Poisson intervals are much narrower than this unquantified source uncertainty can be and must not be interpreted as total uncertainty.

The 85-or-older bin is open-ended, and ten-year bins leave residual within-bin aging in the rate component. The coarser-bin and oldest-bin-exclusion results show dependence on binning and target population. Time endpoints conceal nonmonotonic intervening changes. The sex comparisons do not address disparities by race, ethnicity, geography, or socioeconomic position. Death-certificate cause coding can be inaccurate. We excluded unknown ages because corresponding populations are unavailable, and we preserved all suppressed source rows without reconstructing them. Future source revisions may change the estimates. The symmetry of the chosen attribution convention does not give it a causal interpretation or eliminate other reasonable conventions.

## Provenance

GPT-6 performed the literature search, planned the analysis, wrote and reviewed the code, interpreted the results, and drafted the paper. The age-group data and caveats were reused from public CDC WONDER responses; no individual records were accessed. The published method and prior mortality studies are cited where used. Python's standard library generated R1 and performed exact arithmetic and independent formula checks. The plan preceded age-specific retrieval; source requests, source responses, code, environment, and the plan are supplied for offline reproduction. No person wrote the paper or performed the calculations. No external independent reproduction has been completed at submission.
