src/build_explorer.py; model curves are display
copies (4 dp) recomputed with the exact fit evaluators — all statistics are the CSV receipts.Axtell (2001, *Science*) reported that the 1997 U.S. firm-size distribution follows Zipf's law — survival Pr[S ≥ s] ∝ s^−ζ with ζ ≈ 1.059 (0.054) — "all the way down," on a special SBA/Brookings power-of-three tabulation, estimated by OLS on the width-normalized histogram. The claim inventory (CLAIM_INVENTORY.md) found the paper never ran a goodness-of-fit test or an alternative-model comparison on its own data; the entire quantitative basis is one binned histogram with an OLS line. This project re-estimates the law on the public Census SUSB enterprise-employment tables, 1997–2022 (26 years, 62 manifested raw files, all contract assertions exact), with the discrete interval-censored MLE, pre-registered cutoff selection, refitted bootstrap GoF, Vuong alternative comparisons, and a Monte Carlo calibration of Axtell's own estimator class under every real SUSB bin scheme.
p(s) ∝ s^−α on the published classes (open top class summed analytically); survival exponent ζ = α − 1; Zipf ⇔ α = 2. The binned-data framework — interval-censored MLE, distance-minimizing cutoff selection, parametric bootstrap goodness-of-fit — follows Virkar & Clauset (2014); their formulation is continuous, and the discrete integer-mass likelihood used here is our Step-0 derivation (prereg §4 receipts), a generalization their paper asserts but does not work out. Two derivation traps caught and fixtured before fitting: the no-normalization objective (slams α̂ to the 1⁺ bound) and a 2× SE error (Amendment 1).R1 — A tail law, not a full-support law. Forced fits from the smallest body class are rejected in all 70 body-class units, in two strata: from the smallest published class L=1 (regimes A–B S2 pure full support + FSB blended, 26 units: ζ̂ 0.53–0.60, standardized residuals 425–650) and from the smallest employer-pure class L=5 (S1 + regimes C–G S2, 44 units: ζ̂ 0.87–0.92, residuals 80–125) — every rejection at the bootstrap p-floor. No zeta pmf fits body and tail jointly. (LT's smallest published class is 500 — a tail fit, not a full-support test; 3/10 rejected there.)
R2 — The upper tail is compatible with Zipf, slightly below 1. Above data-selected cutoffs (L\* ∈ {500…2000} in 25/26 detail years) the power law passes refitted GoF in 25/26 years (p ∈ [0.09, 1.00]; sole exception 2004, a cutoff near-tie whose unconditional interval is the one to read). ζ̂ ∈ [0.955, 0.985] (2004 aside: 1.120 conditional on its fragile L\*); per-regime medians span 0.958–0.976 with no visible break across all seven size-code regimes. ζ = 1 lies inside the conditional CI in 7/26 years and inside the joint-bootstrap unconditional interval in all 26 (FSB 18/18; LT 6/10; S1 3/26, whose point estimates sit at 0.99–1.03).
R3 — Alternatives. The lognormal is never favored against the power law on any retained tail (S2: PL favored 14/26, indistinguishable 12/26; S1: PL favored 26/26), and its own supplementary GoF rejects it in 21/26 S2 years (26/26 on S1). The cutoff power law is indistinguishable from a pure power law on every deep-tail support (S2 25/26, FSB and LT all years; ŝ_c at the 10⁹ guard/unidentified) — and the calibration shows a cutoff as strong as s_c = 50,000 would have been rejected 86–100% of the time, so the non-rejection is informative. On the coarse S1 bins, where census-N GoF rejects the pure power law every year (max residuals 22–55 — minute departures), Vuong prefers the cutoff form (V = −10…−24, ŝ_c identified at ≈2,500–7,600 employees; ΔAICc 430–2,420 in the cutoff form's favor — at census N its parameter penalty is negligible, so it tracks the likelihood; on the deep-tail S2 supports the two are AICc-near-tied, gap ≤ 2): the coarse-bin curvature is a phenomenon the deep tails do not show.
R4 — Axtell's estimator is not a calibrated instrument at these bins. Under known truths at every real scheme: the binned MLE is unbiased (max |bias| ≤ 2.7×10⁻⁵ at census N; 2.9×10⁻⁴ on the small-N LT tail schemes); OLS-PDF and OLS-CCDF are biased upward on every full scheme (+0.003…+0.036 at ζ = 1, largest where fine small classes meet coarse upper classes, ≈0 on deep-tail schemes, flat in ζ); their analytic-SE intervals cover 0.29 (median, PDF) and 0.02 (CCDF) against a nominal 0.95. The MLE bootstrap CI covers 0.940–0.952 (known-L cell means) and 0.921–0.942 (reselected-L) — cutoff selection costs ≈1.5 pp. GoF size is nominal (0.018–0.068 over all 33 cells).
R5 — Stability and the event window. S1 drifts smoothly 1.03 → 0.99 over 26 years (adjacent-year CI overlaps except 12/25 pairs, all moves ≤ 0.026); the largest single-year move of the whole series is the 2020→2021 event-window step (+0.0255; 2021 ζ̂ = 1.018, recovered by 2022), while the deep tail moves less. Extending the open top to 20,000+ (LT arm) leaves ζ̂ = 0.966–0.991, indistinguishable from overlapping detail fits — top-bin sensitivity closed.
Every figure below reads the same receipts as the report:
fitted values, goodness-of-fit, Vuong verdicts, and calibration numbers come
verbatim from results/stage2/*.csv; model curves are display
copies recomputed with the exact fit evaluators. Point at any dot for exact
values; click timeline points to load a year.
On the public Census SUSB enterprise-employment tables (1997–2022), the U.S. employer-firm size distribution is incompatible with a Zipf power law over its full support, and statistically compatible with one in the upper tail: above data-selected cutoffs around 500–2,000 employees, the discrete power law passes a refitted bootstrap goodness-of-fit test in 25 of 26 years, with tail exponent ζ̂ ≈ 0.96–0.98 stable across a quarter century and all seven Census size-code regimes, and ζ = 1 inside the joint-bootstrap uncertainty interval in every year — though point estimates sit consistently slightly below 1. The lognormal is favored against in no year; no exponential cutoff is identified in the deep tail. Axtell-style histogram/CCDF OLS estimates at exactly these bins and census sizes carry an upward bias of +0.003 to +0.036 and analytic standard errors whose intervals cover as little as 2% of the time, so the 2001 headline value 1.059 (0.054) functions as an order-of-magnitude anchor from a different tabulation and estimator, not as a calibrated measurement.
One-sentence form: *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.*
| claim | verdict (prereg §13 language) |
|---|---|
| A1 1997 anchor | Compatible as an anchor, not replicated as a number. Our 1997: ζ̂ = 1.031 [1.029, 1.033] (S1) / 0.983 [0.965, 1.000] (S2) vs printed 1.059 (0.054) from different bins and an uncalibrated estimator. |
| A2 modern compatibility | Compatible above a selected cutoff; rejected below it. Not "Zipf confirmed." |
| A3 stability | Confirmed. 0.958–0.976 regime medians, no regime break; event window = largest S1 move, recovered 2022. |
| A4 OLS distortion | Confirmed and quantified (R4). |
| A5 distinguishability | Lognormal rejected-or-tied everywhere, never favored; cutoff PL indistinguishable on deep tails (ŝ_c unidentified); on fine partitions PL-vs-LN is often genuinely inconclusive (planted-LN rejection 26–58% at low-L schemes) — prediction 5 of the prereg. |
INVESTIGATION_CHECKLIST.md lenses and fraud screens applied to our own deliverable (the paper's walk is CLAIM_INVENTORY.md; unchanged verdicts). Receipts: src/verify_report_numbers.py → results/deliver-number-checks.txt.
meta.json).stage2-summary.md.results/explorer.html — self-contained (no network, no dependencies); overlays empirical and fitted survival curves with cutoff/model/year controls, the D(L) selection profile, the 26-year exponent timeline with conditional/unconditional CIs and the Axtell 1997 anchor, and the Monte Carlo calibration tables. Regenerate: python src/build_explorer.py.src/ingest.py → src/stage2_fits.py → src/calibration.py; tests pytest tests/ -q (23 passing).results/step0-derivation-checks.txt, results/stage2/meta.json, results/stage2/calibration_meta.json, results/deliver-number-checks.txt.data/raw/<year>/ with SHA-256 manifest (62 files); derived tables asserted per data/CONTRACT.md.