Systematic Error Assessment in Cepheid Distance Ladder Measurements
Last Updated: 2025-11-18
This project provides a comprehensive reassessment of systematic uncertainties in Cepheid-based distance ladder measurements and their impact on the reported "Hubble tension." Our analysis reveals that realistic systematic error accounting reduces the tension from 5.9σ to 1.1σ, suggesting the tension is largely consistent with a measurement artifact rather than requiring new physics.
For full technical details, see manuscript.tex and the data/figures listed below.
- Systematic error reassessment: σ_sys = 1.71 km/s/Mpc (correlated), representing a 1.6× underestimation in published uncertainties
- Multi-method convergence: JAGB + cosmic chronometers → H₀ = 68.22 ± 1.36 km/s/Mpc (Planck-independent)
- Tension reduction: From 5.9σ → 1.1σ (Planck-relative) or 0.6σ (Planck-independent)
- Robustness validated: Tension remains <2σ across all tested systematic scenarios
- JWST cross-validation: TRGB–JAGB RMS ≈ 0.048 mag vs. Cepheid–TRGB RMS ≈ 0.108 mag (~2.3× larger), confirming the enlarged Cepheid systematic budget
Click one of the badges above to launch an interactive environment in your browser:
Binder - Fully reproducible environment with Jupyter notebooks
Or:
Google Colab - Fast startup with Google infrastructure
Once launched:
-
Start with the guided notebook (recommended):
- Colab: Notebook opens automatically → Click "Runtime → Run all"
- Binder: Open
reproduce_key_results.ipynb→ Click "Run → Run All Cells" - Runtime: ~1-2 minutes to reproduce all four key results
-
Or run analysis scripts directly:
# Generate all figures python analysis/create_figure1_tension_evolution.py python analysis/create_figure2_error_budget.py python analysis/create_figure3_cchp_crossval_real.py python analysis/create_figure4_h0_compilation.py # Or run a complete reproduction python analysis/calculate_error_budget.py python analysis/calculate_tension_evolution.py python analysis/create_manuscript_tables.py
The fastest way to view or edit the manuscript is to use the pre-built Overleaf package.
-
Download the pre-built package:
manuscript_overleaf_v8.7.zip -
Upload to Overleaf:
- Click "New Project" → "Upload Project"
- Select the zip file
- Set compiler to pdfLaTeX
- Click "Recompile"
-
Post-upload fix (for proper σ rendering):
% Add in the preamble of manuscript.tex (after the other \usepackage lines): \usepackage{lmodern}
Requirements:
- LaTeX distribution (TeX Live, MiKTeX, or MacTeX)
- AASTeX (class file and support files included in the package)
- Standard packages: graphicx, amsmath, natbib
Compile:
cd manuscript
pdflatex manuscript.tex
bibtex manuscript
pdflatex manuscript.tex
pdflatex manuscript.texCore files:
reproduce_key_results.ipynb– Interactive Jupyter notebook showcasing the four key results (recommended starting point)PROVENANCE.md– Complete data provenance documentation with sources, citations, and retrieval datesCITATION.cff– Citation metadata for the repositoryLICENSE– MIT LicenseREADME.md– This file
Environment:
requirements.txt– Python dependencies for pip/Binder/Colab environmentsenvironment.yml– Reproducible conda environment specification
Analysis & Data:
analysis/– Python scripts for error budgets, tension evolution, MCMC fits, robustness tests, and figure/table generationdata/– Input and generated data products:systematic_error_budget.csv,tension_evolution.csv,h0_measurements_compilation.csvcosmic_chronometers_Hz.csv– Mirrored for self-contained reproducibilitycchp_trgb_cepheid_comparison.csv,cchp_trgb_jagb_comparison.csv– JWST cross-validationcorrelation_matrix_updated.csv– 9×9 systematic correlation structuretables/– LaTeX table fragments for manuscript
Manuscript:
manuscript/– LaTeX source (manuscript.tex), AASTeX class file, BibTeX referencesfigures/– Output figures (PDF + PNG for Figs. 1–5 and auxiliary plots)manuscript_overleaf_v8.7.zip– Ready-to-upload Overleaf package (manuscript + figures + tables)
Scripts:
scripts/prepare_overleaf_updated.sh– Build Overleaf packagescripts/update_manuscript_hash.sh– Update manuscript hash in config/numerical_claims.yaml
Documentation:
docs/– Development notes and methodology documentation
All commands below assume you have created/activated the project environment (see environment.yml) and are running from the repository root.
python3 analysis/calculate_error_budget.py # → data/systematic_error_budget.csv, data/systematic_budget_recalculated.csv
python3 analysis/calculate_tension_evolution.py # → data/tension_evolution.csv
python3 analysis/h6_h0_estimate.py # → data/mcmc_chains_LCDM_2D.npy
python3 analysis/cosmic_chronometer_fit_random_effects.py # → data/cosmic_chronometer_random_effects_results.csv
# Master script - runs all figure generation
python3 analysis/run_all.py
# Or generate figures individually:
python3 analysis/create_figure1_tension_evolution.py # → figures/figure1_tension_evolution.*
python3 analysis/create_figure2_error_budget.py # → figures/figure2_error_budget.*
python3 analysis/create_figure3_cchp_crossval_real.py # → figures/figure3_cchp_crossval_real.*
python3 analysis/create_figure4_h0_compilation.py # → figures/figure4_h0_compilation.*
python3 analysis/create_figure5_hz_fit_intrinsic_scatter.py # → figures/figure5_h6_fit.*
python3 analysis/create_figure_correlation_heatmap.py # → figures/figure_correlation_heatmap.*python3 analysis/create_manuscript_tables.py # → data/tables/*.texTotal runtime: ~1–2 minutes on a modern laptop (no GPU required).
The repository includes an automated verification system to ensure numerical consistency across data files, figures, tables, and documentation.
# Run full verification
python3 analysis/verify_manuscript_consistency.py
# Run specific categories only
python3 analysis/verify_manuscript_consistency.py --only tension systematics
# Output JSON for CI/CD integration
python3 analysis/verify_manuscript_consistency.py --jsonWhat it checks:
- ✅ Tension evolution values (CSV ↔ figures ↔ README)
- ✅ Systematic budget quadrature sums
- ✅ H₀ three-method convergence calculations
- ✅ Figure metadata accuracy
- ✅ Figure package completeness
Exit codes:
0: All checks passed (manuscript ready for submission)1: Errors or warnings detected (review required)
Pre-commit hook: The repository includes a pre-commit hook that automatically runs verification before each commit:
- ❌ Blocks commits with numerical errors
⚠️ Allows commits with warnings (but shows them)
The hook is installed at .git/hooks/pre-commit and runs automatically. To bypass (not recommended):
git commit --no-verifyFor implementation details, see:
docs/VERIFICATION_SYSTEM_DESIGN.md- Design rationale and architecturedocs/VS_DESIGN_FEEDBACK.md- Expert review feedbackdocs/IMPLEMENTATION_LOG.md- Implementation narrativeconfig/numerical_claims.yaml- Single source of truth for all numerical claims
Claim: SH0ES underestimates systematic uncertainties by 1.6×
- SH0ES assessment: σ_sys = 1.04 km/s/Mpc (uncorrelated)
- Our assessment: σ_sys = 1.71 km/s/Mpc (with realistic correlations)
- Underestimation factor: 1.6× when accounting for correlated error sources
Data: data/systematic_error_budget.csv, table1_systematic_budget.tex
Claim: Late-universe methods converge at H₀ ≈ 68 km/s/Mpc (Planck-independent)
- JAGB + Cosmic chronometers: 68.22 ± 1.36 km/s/Mpc
- Three-method mean (JAGB + H(z) + Planck): 67.48 ± 0.50 km/s/Mpc
- Excellent consistency: χ²_red ≈ 0.04
Data: data/h0_measurements_compilation.csv, table3_h0_compilation.tex
Claim: Realistic systematics reduce tension from 5.9σ → 1.1σ (Planck-relative)
| Stage | Description | Tension vs Planck |
|---|---|---|
| 1 | SH0ES baseline (statistical only) | 5.9σ |
| 2 | Add SH0ES total uncertainty | 4.0σ |
| 3 | Scenario A zero-point | 4.0σ |
| 4 | Add period distribution correction | 1.9σ |
| 5 | Add metallicity + correlated systematics | 1.1σ |
Scenario range: 0.2σ to 1.7σ across conservative/aggressive assumptions Planck-independent: 0.6σ (vs JAGB+chronometers convergence)
See Fig. 1 and Table 2 in the manuscript for the full staged tension-evolution visualization.
Data: data/tension_evolution.csv, table2_tension_evolution.tex
Claim: JWST data confirms systematic underestimation
- 15 galaxies with Cepheid + TRGB + JAGB measurements
- TRGB–JAGB agreement: RMS ≈ 0.048 mag with ≈0 mean offset
- Cepheid–TRGB scatter: RMS ≈ 0.108 mag (~2.3× larger than TRGB–JAGB)
- Jackknife validation and robust estimators confirm this excess
- Supports a larger Cepheid systematic error budget rather than JWST-limited photometry
See Fig. 3 and Table 5 in the manuscript for the full cross-validation comparison.
Data: data/cchp_trgb_cepheid_comparison.csv, table5_jwst_crossvalidation.tex
All data files are CSV (or NPZ/Numpy) format with header comments documenting sources and methods.
data/systematic_error_budget.csv: 9 Cepheid systematic error sources with quadrature totalsdata/hierarchical_hz_results.csv: 32 H(z) differential age measurements and best-fit hierarchical CC model valuesdata/cchp_trgb_cepheid_comparison.csv: JWST CCHP Cepheid vs TRGB distances (per galaxy)data/cchp_trgb_jagb_comparison.csv: JWST CCHP JAGB vs TRGB distances (per galaxy)data/h0_measurements_compilation.csv: Multi-method H₀ comparison (Cepheid, JAGB, CC, Planck, etc.)
data/tension_evolution.csv: 5-stage H₀ tension reduction summarydata/cchp_crossval_summary.csv: JWST cross-validation statisticsdata/systematic_budget_recalculated.csv: Revised systematic budget under updated assumptionsdata/cosmic_chronometer_random_effects_results.csv: Random-effects CC fit summarydata/extended_correlation_sensitivity_results.csv: Correlation-sensitivity sweep results
data/mcmc_chains_LCDM_2D.npy: 128,000 (H₀, Ωₘ) samples for the baseline LCDM CC fit
(generated byanalysis/h6_h0_estimate.py; see “Reproducing results” below)
Additional hierarchical and intrinsic-scatter summaries:
Generated by analysis/create_manuscript_tables.py and used directly in the manuscript:
data/tables/table1_systematic_budget.tex: Systematic error budgetdata/tables/table2_tension_evolution.tex: H₀ tension stagingdata/tables/table3_h0_compilation.tex: Multi-method H₀ compilationdata/tables/table4_cchp_crossval.tex: JWST CCHP cross-validation summarydata/tables/table5_jwst_crossvalidation.tex: JWST scatter statistics (TRGB/JAGB/Cepheid)data/tables/table6_cosmic_chronometers.tex: Cosmic chronometer H(z) summary and derived H₀ constraintsdata/tables/table_anchor_weights.tex: Anchor weighting schemedata/tables/table_correlation_matrix.tex: Systematic correlation matrix
✅ Submission-ready for ApJ (version v8.7):
- ✅ All numerical claims verified against data files
- ✅ All citations cross-checked in bibliography
- ✅ Computational results fully reproducible
- ✅ LaTeX compilation tested (Overleaf + local)
- ✅ All figures and tables render correctly
- ✅ Author metadata complete (ORCID included)
Package: manuscript_overleaf_v8.7.zip (4.0 MB)
Submission:
Package manuscript_overleaf_v8.7.zip has been tested on Overleaf and is ready for ApJ submission.
Tested with: Python 3.11+ and Python 3.12
# Create conda environment
conda env create -f environment.yml
conda activate distance-ladder
# Or install manually
pip install numpy pandas matplotlib scipy emcee corner- AASTeX 7.01 (included in package)
- pdfLaTeX + BibTeX
- Standard packages: graphicx, amsmath, natbib, hyperref
If you use this work, please cite:
@article{Wiley2025,
author = {Wiley, Aaron},
title = {{Forensic Analysis of Distance Ladder Systematics:
The Hubble Tension Reduced from $\sim$6$\sigma$ to $\sim$1$\sigma$}},
journal = {The Astrophysical Journal},
year = {2025},
note = {Submitted}
}Repository citation: See tag v8.7 for the exact version corresponding to the submitted manuscript. GitHub also provides a "Cite this repository" button based on CITATION.cff.
Archived release: A permanent, citable version is archived on Zenodo: https://doi.org/10.5281/zenodo.17637857 (draft DOI - will be finalized upon publication)
Author: Aaron Wiley
ORCID: 0009-0007-1612-9203
Affiliation: Independent Researcher
Email: awiley@outlook.com
For questions about the analysis, methodology, or data, please open an issue or contact the author.
This research made use of:
- Gaia EDR3 parallax data
- JWST/NIRCam observations (CCHP program)
- Cosmic chronometer measurements (Moresco et al. 2022)
- Planck 2018 cosmological constraints
- SH0ES Cepheid measurements (Riess et al. 2022)
Full acknowledgments in manuscript.
This work is prepared for submission to The Astrophysical Journal. All rights reserved pending publication.
Code and data are provided for reproducibility and peer review. Please contact the author regarding reuse.
See LICENSE for full pre-publication terms.
Manuscript ready for ApJ submission • Publication-ready with comprehensive literature coverage