Skip to content

About

Axtell (2001) 'Zipf Distribution of U.S. Firm Sizes' re-estimated on public Census SUSB tables 1997-2022: discrete binned MLE under a frozen prereg, GoF + alternatives, OLS estimator calibration, self-contained explorer. Independently computationally audited by a separate AI agent.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Axtell (2001) "Zipf Distribution of U.S. Firm Sizes" — a modern SUSB re-estimation

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.

Headline findings

  1. 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).
  2. 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.
  3. 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).
  4. 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.

The evidence chain

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

Reproduce

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.

License

  • Code (src/, tests/): MIT — see LICENSE.
  • REPORT.md and the analysis documents: CC-BY-4.0.
  • Census SUSB data: public domain (U.S. federal government work); source URLs in data/raw/manifest.csv.

Credits

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.

About

Axtell (2001) 'Zipf Distribution of U.S. Firm Sizes' re-estimated on public Census SUSB tables 1997-2022: discrete binned MLE under a frozen prereg, GoF + alternatives, OLS estimator calibration, self-contained explorer. Independently computationally audited by a separate AI agent.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages