Skip to content

Nova-O2/berlin-marathon-wall

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sex Differences in Marathon Pacing: Analysis of 873,000 Berlin Marathon Runners Reveals Men are Twice as Likely to "Hit the Wall"

Cluster-scale analysis of 873,334 finishers of the Berlin Marathon (1999–2025), examining sex differences in pacing stability and the prevalence of catastrophic deceleration.

Status

Published in Scientific Reports (2026) 16:19529. DOI: 10.1038/s41598-026-56334-7. Open Access (CC BY 4.0). This repository is the frozen code-and-figures companion to the published article; the version of record is included as paper.pdf.

In the media

The study drew broad international press coverage on publication (July 2026), appearing in more than 55 outlets across 20 countries and 11 languages.

Selected coverage

The findings were also carried via the dpa (Germany), Keystone-SDA (Switzerland), EFE (Spain and Latin America) and TT (Sweden) news wires, including t-online, WirtschaftsWoche, Rhein-Zeitung, Freie Presse, Heilbronner Stimme, Westdeutsche Zeitung, Neue Westfälische, Werra-Rundschau, Soester Anzeiger, Berliner Abendblatt, Bietigheimer Zeitung and Ludwigsburger Kreiszeitung (Germany); Sarganserländer, Nau.ch, Radio Central, Blick and bluewin (Switzerland); HDsports (Austria); Göteborgs-Posten and Skånska Dagbladet (Sweden); Aragón Radio, ABC Color, Diario de Yucatán and UDG TV (Spain, Paraguay and Mexico); and marathon4you and Scimex, among others.

Authors

  • Aldo Seffrin¹ — ORCID: 0000-0001-8229-8565
  • Elias Villiger² — ORCID: 0000-0001-8371-1390
  • Marília Santos Andrade³ — ORCID: 0000-0002-7004-4565
  • Thomas Rosemann² — ORCID: 0000-0002-6436-6306
  • Katja Weiss² — ORCID: 0000-0003-1247-6754
  • Beat Knechtle²* — ORCID: 0000-0002-2412-9103

1 — Nova O2 Sports Science, São José dos Campos, Brazil 2 — Institute of Primary Care, University of Zurich, Zurich, Switzerland 3 — Department of Physiology, Federal University of São Paulo, Brazil

*Corresponding author

Key Finding

Among 873,334 finishers of the Berlin Marathon (1999–2025), male runners exhibited a twofold higher risk of "hitting the wall" — operationally defined as a ≥20% slowdown in the second half of the race relative to the first — compared with female runners (17.63% vs 9.66%; OR = 2.00, 95% CI 1.97–2.03). After adjustment for age and performance category, the disparity strengthened (adjusted OR = 3.88, 95% CI 3.81–3.94). The gap widened markedly among the fastest runners: in the sub-3h cohort, men were approximately six times more likely to experience catastrophic deceleration than women (1.42% vs 0.23%). Mean percentage slowdown was significantly greater in men across all five performance categories (10.73% ± 11.41% vs 8.34% ± 8.91%; p < 0.001).

Sample

  • n = 873,334 finishers (men: 659,294, 75.5% — women: 214,040, 24.5%)
  • Pacing-valid analytical cohort: n = 872,670 (excluding 664 finishers without valid half-marathon split data)
  • Deduplicated sensitivity subset: n = 700,877 (first appearance per composite key of normalized name + age group)
  • Source: Official BMW Berlin Marathon Results Archive
  • Period: 27 editions, 1999–2025
  • Inclusion: chip-timed finishers with valid net finish time and half-marathon split
  • Exclusion: biologically implausible times (< 1:59:00) or beyond official cutoff (> 6:15:00); records missing critical pacing checkpoints. Total excluded: 7,445 records (0.85% of 880,779 raw entries)
  • Age distribution: mature cohort; ~50% of the field aged 35–49

Data

Only the raw dataset (the single CSV below) is archived externally due to GitHub size limits. Every processed and derivative file — including the analytical baseline wall_baseline_873k.parquet — is regenerated from that CSV by the pipeline (see Analyses), so nothing else needs to be downloaded.

Initial pipeline files (intermediate, regenerated)

File Format Stage Description
Dataset_Berlin_Marathon_1999-2025_original.csv CSV Raw Web-scraped output (1999–2025); the archived Zenodo file
Dataset_Berlin_Marathon_1999-2025.parquet Parquet Optimized CSV converted for memory efficiency (Step 1 output)
Dataset_Berlin_Cleaned_Analysis_Ready.parquet Parquet Cleaned Nulls removed, time strings parsed, outliers filtered (Step 2 output)
Dataset_Berlin_Features_Engineered.parquet Parquet Final Adds pacing metrics (pct_slowdown, hit_wall) (Step 3 output)

Revision-round derivative files

File Format Description
wall_baseline_873k.parquet Parquet Analytical cohort (n = 873,334 finishers; raw checkpoints + age_group + sex + year). Built from the raw CSV by notebooks/build_wall_baseline.py; input to the R1/R2 analyses
dedup_subset.parquet Parquet Deduplicated subset (n = 700,877; first appearance per composite key of normalized name + age group), produced by notebooks/r1_dedup_sensitivity.py and consumed by r1_logistic_age_controlled.py

Both derivative files regenerate from the raw CSV — wall_baseline_873k.parquet via build_wall_baseline.py, then dedup_subset.parquet via r1_dedup_sensitivity.py.

To reproduce: download the raw CSV from Zenodo into data/, then build the analytical baseline with python notebooks/build_wall_baseline.py (see Analyses for the full run order). The data/ directory is gitignored.

Analyses

Reproducing the published results

The published statistics and figures use the analytical cohort of n = 873,334 (wall_baseline_873k.parquet). From the raw Zenodo CSV in data/:

python notebooks/build_wall_baseline.py         # raw CSV -> data/wall_baseline_873k.parquet (n = 873,334)
python notebooks/r1_dedup_sensitivity.py        # -> data/dedup_subset.parquet (run before the logistic script)
python notebooks/r1_logistic_age_controlled.py  # adjusted OR; then run the remaining r1_* and r2_* scripts
python notebooks/generate_figures.py            # Figures 1-5

generate_figures.py and the r1_*/r2_* scripts operate on wall_baseline_873k.parquet and produce the published numbers (e.g. men 17.63% vs women 9.66% hitting the wall; crude OR 2.00; adjusted OR 3.88).

Initial pipeline (data preparation & exploratory analysis)

Notebook Content
notebooks/OTIMIZATION.ipynb Step 1: memory optimization — convert raw CSV to Parquet (~60% size reduction)
notebooks/CLEANING.ipynb Step 2: standardise sex encoding, parse HH:MM:SS times to seconds, apply physiological filters
notebooks/MAIN_ANALYSIS.ipynb Step 3: feature engineering (pacing metrics, "wall" definition), statistical tests (Welch, Mann-Whitney U, Chi², Odds Ratios)

These notebooks document the initial exploratory analysis; the final published cohort and statistics come from the wall_baseline pipeline above.

Revision analyses

Additional analyses developed during peer review, with outputs written to notebooks/results/r1/ (R1 round) and notebooks/results/r2/ (R2 round).

R1 round (first-round comments)

Notebook Content
notebooks/r1_logistic_age_controlled.py Multivariable logistic regression (sex + age + performance category + sex × age interaction)
notebooks/r1_dedup_sensitivity.py Sensitivity analysis on deduplicated subset (composite key: normalized name + age group)
notebooks/r1_pacing_fine_grained.py Fine-grained pacing metrics from 5 km splits (CV, inflection, late-deceleration, oscillation, km-30 gradient)
notebooks/r1_age_relative_quintile.py Within-cohort sex × age-group quintile re-stratification
notebooks/r1_temporal_trend.py 27-year temporal trend (Mann-Kendall + linear regression)
notebooks/r1_threshold_severity.py Threshold sensitivity (15%/20%/25%) and graded severity
notebooks/r1_perf_cat_prevalence.py Per-category × sex prevalence with odds ratios
notebooks/_r1_common.py Shared feature engineering, colour palette, save_results helper

R2 round (Reviewer 2 second-round diagnostics)

Notebook Content
notebooks/r2_logistic_diagnostics.py Logistic model diagnostics — Variance Inflation Factors, McFadden pseudo-R², AIC/BIC, decile calibration with Hosmer-Lemeshow, 10-fold cross-validated recalibration intercept and slope, comparison of linear / quadratic / natural-cubic-spline parameterisations of age (likelihood-ratio + ΔAIC), Pregibon dbeta influence summary, missing-data exclusion cascade. Verbatim summary reproduced in Appendix A of the R2 response letter.
notebooks/_r2_common.py R2 shared helpers — compute_vif, mcfadden_r2, decile_calibration, hosmer_lemeshow, spline_basis_age (with sum-to-zero constraint avoiding rank-deficiency against the intercept), calibration_in_the_large_and_slope_cv (10-fold cross-validated, non-degenerate).

Build helpers

Notebook Content
notebooks/generate_figures.py Idempotent regeneration of Figures 1–5
notebooks/generate_tables.py Idempotent regeneration of Table 2 (with crude OR + 95% CI columns added in R2) and Supplementary Tables S1–S6 (CSV → Markdown)

Figures

  1. Figure 1 — Density (figures/Figure_1_Density.tiff) — kernel density estimation of percentage slowdown by sex; visualises the heavier right tail of male pacing failures
  2. Figure 2 — Stratified prevalence (figures/Figure_2_Boxplot.tiff) — mean percentage slowdown by performance category × sex; the sex disparity persists across all five tiers
  3. Figure 3 — Risk (figures/Figure_3_Risk_Plot.tiff) — bar plot of "hitting the wall" prevalence by sex with 95% CIs and odds ratio annotation
  4. Figure 4 — Fine-grained pacing variability (figures/Figure_4_Pacing_Variability.tiff) — five 5 km-split-derived metrics (CV, inflection km, late-deceleration %, oscillation, km-30 gradient) by sex
  5. Figure 5 — Temporal trend (figures/Figure_5_Temporal_Trend.tiff) — wall prevalence by sex across 27 editions (1999–2025) with Mann-Kendall and linear-regression annotations

Structure

.
├── README.md                # This file
├── paper.pdf                # Version of record (Sci Rep 2026; CC BY 4.0)
├── LICENSE                  # MIT — copyright Nova O2 (code/figures only)
├── requirements.txt         # Python dependencies (pinned)
├── notebooks/               # Reproducible analysis pipeline
│   ├── OTIMIZATION.ipynb
│   ├── CLEANING.ipynb
│   ├── MAIN_ANALYSIS.ipynb
│   ├── build_wall_baseline.py       # raw CSV -> wall_baseline_873k.parquet
│   ├── _r1_common.py
│   ├── r1_*.py              # R1 revision analyses
│   ├── _r2_common.py
│   ├── r2_logistic_diagnostics.py   # R2 revision diagnostics
│   ├── generate_figures.py
│   ├── generate_tables.py
│   └── results/
│       ├── r1/              # R1 tabular outputs (CSV + Markdown)
│       └── r2/              # R2 tabular outputs (CSV + Markdown + calibration TIFF)
└── figures/                 # Manuscript figures (TIFF + PNG, 300 DPI)

Build artefacts (manuscript/, Makefile, scripts/) and large datasets (data/) are maintained off-repo. Data is available via the Zenodo deposit linked above.

Tech

  • Python: 3.12 (pinned dependencies in requirements.txt)
  • Raw dataset: UTF-8, semicolon-separated, period decimal
  • Key packages: pandas, NumPy, SciPy, statsmodels, scikit-learn, pymannkendall, Matplotlib, Seaborn, tabulate

Citation

Seffrin, A., Villiger, E., Andrade, M. S., Rosemann, T., Weiss, K., & Knechtle, B. (2026). Sex differences in marathon pacing: analysis of 873,000 Berlin marathon runners reveals men are twice as likely to "hit the wall". Scientific Reports, 16, 19529. https://doi.org/10.1038/s41598-026-56334-7

Dataset: BMW Berlin Marathon Results 1999–2025. Zenodo. https://doi.org/10.5281/zenodo.19342683

Published article

The version of record is included in this repository as paper.pdf, reproduced under its Creative Commons Attribution 4.0 (CC BY 4.0) license. © The authors.

License

  • Code, notebooks, and figures: MIT — Copyright (c) 2026 Nova O2 Sports Science (see LICENSE).
  • paper.pdf (version of record): © The authors, licensed CC BY 4.0 as published by Scientific Reports. Not covered by the MIT license.

About

Supplementary Material - Statistical analysis

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors