An executable verification of a celebrated paper's headline claim, on 26 years of public data, with the tests the original paper never ran. Verdict, one sentence: modern public SUSB data support a near-Zipf upper tail (ζ̂ ≈ 0.96–0.98, ζ = 1 within total-procedure uncertainty every year) and contradict the "all the way down" reading.
Robert L. Axtell's 2001 Science paper reported that the U.S. firm-size distribution follows Zipf's law over its whole range (ζ ≈ 1.059, "all the way down"), based on a special SBA/Brookings power-of-three tabulation estimated by OLS on a binned histogram. Its claim inventory (see CLAIM_INVENTORY.md) shows the paper never ran a goodness-of-fit test or an alternative-model comparison on its own data. This project re-estimates the law on the public Census SUSB enterprise-employment tables, 1997–2022, under a frozen pre-registration:
- Discrete interval-censored MLE for the zeta pmf on the published classes (survival exponent ζ = α − 1; Zipf ⇔ α = 2) — the binned-data framework of Virkar & Clauset (2014), re-derived here in discrete integer-mass form — with pre-registered min-D cutoff selection over published class edges and the forced full-support fit always reported separately — the direct test of "all the way down."
- Refitted bootstrap goodness-of-fit (parametric multinomial, B = 2,000, deterministic <5-expected pooling), joint (L*, ζ̂) bootstrap intervals that price cutoff-selection uncertainty, and Vuong comparisons against discretized lognormal and exponentially cut-off power laws on identical supports.
- Monte Carlo calibration of Axtell's own estimator class under every real SUSB bin scheme (11 schemes × 5 truth-ζ × 3 N levels × known/reselected cutoff arms): bias, RMSE, interval coverage, GoF size and power, through the identical code paths as the real data.
- A tail law, not a full-support law. Forced fits from the smallest body class are rejected in all 70 body-class units (ζ̂ 0.53–0.60 from L=1; 0.87–0.92 from L=5; every rejection at the bootstrap p-floor).
- The upper tail is compatible with Zipf, slightly below 1. Above data-selected cutoffs (L* ∈ {500…2000}) the power law passes refitted GoF in 25/26 years; ζ̂ ∈ [0.955, 0.985] stable across 26 years and all seven Census size-code regimes; ζ = 1 lies inside the joint-bootstrap unconditional interval in all 26 years.
- Lognormal never favored; no exponential cutoff identified in the deep tail (a planted s_c = 50,000 cutoff is rejected 86–100% of the time — the non-rejection is informative).
- Axtell-style OLS is not a calibrated instrument at these bins: upward bias +0.003…+0.036, analytic-SE coverage 0.02–0.29 against nominal 0.95 at census N — while the binned MLE is unbiased (≤ 2.7×10⁻⁵) with honest bootstrap CIs. The printed 1.059 (0.054) is an order-of-magnitude anchor, not a calibrated measurement.
Site: the full report with the interactive explorer is hosted at https://kenrinzero.github.io/axtell-zipf-susb/ (self-contained docs/index.html, regenerated by src/build_explorer.py).
The defensible claim, adjudication of the paper's assertions (A1–A5), and seven explicit limitations are in REPORT.md. The interactive evidence is results/explorer.html — a self-contained (no network, no dependencies) explorer overlaying empirical and fitted survival curves with cutoff/model/year controls, the D(L) selection profiles, the 26-year exponent timeline with both CI types and the Axtell 1997 anchor, and the full calibration tables.
| File | Role |
|---|---|
PREREGISTRATION.md |
frozen statistical contract (Step 0), incl. two derivation traps caught before fitting, + dated Amendments 1–2 |
data/CONTRACT.md |
versioned SUSB regime table and ingestion assertions (v1.0.1: seven size-code regimes; FIRM counts exact) |
CLAIM_INVENTORY.md |
the paper's claims decomposed and screened; closing adjudication |
AUDIT-2026-08-29.md |
independent computational audit (separate AI agent): every load-bearing number re-derived on a different numerical route (all 160 fits reproduce ≤ 5×10⁻⁶); two prose errors found, corrected, receipt-covered |
results/stage2-summary.md |
Stage-2 synthesis with dated correction notes |
results/deliver-number-checks.txt |
C1–C26 receipts: every number the report cites, re-derived from the CSVs by src/verify_report_numbers.py |
INVESTIGATION_CHECKLIST.md |
the failure-mode lens set walked before the claim was written |
Tested with Python 3.13, numpy 2.5.2, scipy 1.18.0.
python src/download_susb.py # re-fetch the 62 raw files per data/raw/manifest.csv (~1.3 GB, SHA-256 verified)
python src/ingest.py # contract assertions -> data/derived/canonical_bins.csv (876 rows, all 26 years exact)
python -m pytest tests/ -q # 23 tests: prereg validation grid + stage-2 machinery
python src/stage2_fits.py # 80 fit units, exact evaluator (~20 min)
python src/calibration.py # full Monte Carlo grid (~38 min, ~12 cores)
python src/build_explorer.py # regenerates results/explorer.html
python src/verify_report_numbers.py # re-derives every report-cited number (C1-C26)Data statement. The raw Census SUSB files are U.S. government works (public domain, freely redistributable) but total ~1.3 GB of state-level microdata, so they are not vendored: data/raw/manifest.csv carries the full custody chain (source URL, retrieval date, byte size, SHA-256 per file) and src/download_susb.py re-establishes it idempotently. Only U.S.-total rows are used; the derived canonical tables (data/derived/, ~128 KB) are included. Census renumbered its size codes at 2019 (regime G) — labels, never codes, are the analytic key across regimes.
A few evidence-chain documents reference atelier working files (e.g. AGENTS.md) that are not part of this repo; the investigation checklist referenced by the report is included at the root.
- Code (
src/,tests/): MIT — see LICENSE. REPORT.mdand the analysis documents: CC-BY-4.0.- Census SUSB data: public domain (U.S. federal government work); source URLs in
data/raw/manifest.csv.
Directed by Kenrin (@kenrinzero). The analysis was produced by AI agents under his direction: project scaffold and scope graduation by GPT-5.6 Sol (Codex harness); Step 0 pre-registration and Step 1 claim inventory/data contract by GLM-5.3-Flash (Z.ai, ZCode harness); ingestion, fits, calibration, report, explorer, and publication by GLM-5.3 (Z.ai, ZCode harness); independent numerical audit by Claude Fable 5 (Anthropic). The audit trail — findings, applied corrections, and dated correction notes — is preserved verbatim in this repository.