SPB Git

spb/wp28_uqo

Public

WP28: README, LIMITATIONS_AND_CLAIMS, phase status 1-6

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Oct 28, 2026) parent 56b0e6f Browse files

34 changed files +19,951 −20

34 changed files
added LIMITATIONS_AND_CLAIMS.md +33 −0
@@ -0,0 +1,33 @@
1 +# LIMITATIONS_AND_CLAIMS — what WP28 claims, under what conditions, and what it does not claim
2 +
3 +## Proved (with explicit assumptions)
4 +1. **Theorem 1 (order–round frontier).** Under A1 (uniform stochastic expansion with a common influence function and E‖R_S‖² ≤ C|S|⁻² on the sub-sample family), A2(r) (bias expansion of order r) and A3 (local Newton regularity), fixed p, m → ∞: if K = o(N^{1−1/(2^{q+1}r)}) then √N(θ^{(q)}_r − θ̂_N) → 0 and √N(θ^{(q)}_r − θ0) ⇒ N(0, Σ_ψ). The centered random remainder (order (m√K)⁻¹) is tracked explicitly. Constants depend on p; nothing is claimed for growing p.
5 +2. **Theorem 2 (exponential model).** Exact moments, exact biases for any pattern, exact Var J₂, exact Newton identities and basin (0, 2θ̂_N), boundary limits −θ0(β_r c^r)^{2^q} (q ≥ 1) and β_rθ0c^r (q = 0), divergence beyond the frontier. Sharpness is for *this construction in this model*, not a lower bound over procedures (the pooled sufficient statistic is exact).
6 +3. **Theorem 3 (inexact curvature).** Perturbation bound O_p(‖e‖² + δ_N‖e‖ + ‖δ_g‖); exponents 1−1/(2(r+q)) (stale averaged local Hessians; needs A4), 1−1/(2r+q) (single-machine Hessian), bit requirement b ≥ (½ − r(1−α)) log₂N for relative quantization. Known special cases recovered: JLY 2/3, CEASE (t+1)/(t+2), Zhu–Li–Wang 3/4.
7 +4. **Proposition 4.** Size-weighted aggregation preserves the frontier with m replaced by m_eff; equal weights with unequal sizes fail at q = 0 and are repaired by one Newton step; misspecification handled with the sandwich. These are extensions of known results, not contributions.
8 +5. **Corollary (inference).** Wald intervals with a consistent covariance estimator are asymptotically valid *inside* the frontier only.
9 +
10 +## Numerically supported observations (not theorems)
11 +- Finite-sample ranking: order-3 pilots have larger RMSE than order-2 pilots for moderate m despite smaller bias; the one-step versions inherit part of this; the analytic Cox–Snell + Newton baseline attains the order-2 exponent with one local fit when the bias formula is exact for the model.
12 +- The finite-m prediction (exact bias + variance of the local remainder) tracks the boundary Monte Carlo means to three digits; convergence of the mean gap to the asymptotic limit is slow because m ≍ N^{1/(2^{q+1}r)}.
13 +- Coverage: nominal inside the frontier; under-coverage of the plain average and of the one-step estimator at small m; Fisher-based intervals under-cover under misspecification while sandwich intervals do not.
14 +- Quantization: the Monte Carlo ablation shows the number of mantissa bits at which the quantized step becomes indistinguishable from the exact step at finite N (paper Table 6).
15 +- Benchmarks: wall-clock of local and derivative phases, latency percentiles, bytes per phase on the MacLustr LAN for the designs run (paper Section 10). These calibrate the cost model; they do not establish a general speed advantage.
16 +
17 +## Heuristics and conditional statements
18 +- Proposition 5 (cost model and exchange rate) is a tautology given the cost model (eq. 12 of the paper); its content is the calibration on one cluster.
19 +- Communication accounting (Table 2 of the paper) counts numbers/bytes/rounds/messages; it is bookkeeping, not a theorem; headers and serialization are measured, not derived.
20 +
21 +## Open / not attempted
22 +- Adaptive choice of r (or of (r, q)) from the data with a theorem: open; no adaptive estimator is reported.
23 +- Growing dimension p_N; dependent or non-identically distributed blocks (heterogeneous pseudo-true values); asynchronous updates; worker drop-out theory; energy and monetary cost; minimax or communication lower bounds.
24 +- Lean/Coq formalization: not attempted (no proof assistant installed).
25 +
26 +## Explicit non-claims
27 +- Not a new estimator: the components (generalized jackknife; distributed one-step Newton) are known and cited.
28 +- Not a wall-clock or energy advantage in general; not a byte-count optimality.
29 +- Not valid for p growing with N, nor for a fixed data set with "the maximal number of machines".
30 +- The "GPT-6.1" co-author designation is provenance of the prior draft at the researcher's request, not a legally accountable author; see the disclosure in the paper.
31 +
32 +## Replication-count statement
33 +Prior draft: 500 replications × 3 designs (exact-Gamma, N = 2^20). This paper: exponential grid 2000 replications per cell (40 cells), logistic/Poisson 1000 (500 for p = 20 and the ill-conditioned/small-m designs), boundary study 2000/1000/400 by N, ablations 1000 (exponential) and 400 (logistic), skewed partitions 1000/300, benchmarks 3 repeats per design. Actual counts are recorded per cell in `experiments/EXPERIMENT_MANIFEST.csv` and in every table note.
modified PHASE_STATUS.md +41 −0
@@ -15,3 +15,44 @@ Unproved statements or unresolved citations: all theorems of the prior draft are
15 15 references are being verified in Phase 1.
16 16 Decision and justification: keep identifier WP28 (free in the series; collision note recorded). Proceed to Phase 1.
17 17 Next phase action: literature/priority audit (four parallel verification tasks launched 18:47).
18 +
19 +Phase: 1 — Exhaustive state-of-the-art / priority investigation
20 +Start/finish timestamp: 2026-10-28 18:47 → 19:12
21 +What was actually done: four parallel verification tasks read 24 papers in full text (arXiv/accepted manuscripts where publisher pages were bot-blocked) and verified 56 bibliographic records via Crossref; theorem-level comparisons recorded in literature/audit_A..D.md; PRIOR_ART_MATRIX.csv (56 rows); PRIORITY_AND_GAP.md with claim-by-claim map, candidates A/B/C and GO/REVISE/DROP decisions; two wrong DOIs in the brief corrected.
22 +Artifacts created: literature/audit_A_*.md, audit_B_*.md, audit_C_*.md, audit_D_*.md, PRIOR_ART_MATRIX.csv, PRIORITY_AND_GAP.md.
23 +Tests passed: n/a. Tests failed: n/a.
24 +Unproved statements or unresolved citations: texts behind paywalls (Quenouille 1949/1956, Schucany et al. 1971, Sharot 1976, Rilstone et al. 1996, Le Cam 1956, Bickel 1975 technical content, Cordeiro–McCullagh original notation, published JASA numbering of JLY/CEASE/FONE, Springer text of Huang–Huo, Yin's 2022 thesis) — flagged in PRIORITY_AND_GAP.md §5.
25 +Decision and justification: GO for the joint (r,q) frontier, sharpness, inexact-curvature/quantization theorem; DROP novelty claims on the components; REVISE unequal sizes/misspecification to extensions; cost model as conditional proposition.
26 +Next phase action: mathematical specification (Phase 2).
27 +
28 +Phase: 2 — Mathematical specification and attack on the assumptions
29 +Start/finish timestamp: 2026-10-28 18:55 → 19:40
30 +What was actually done: assumptions A1–A5 written (theory/ASSUMPTIONS.md); every identity of the prior draft re-derived symbolically (theory/symbolic_checks.py S1–S8: weights, Gamma moments, exact biases, Newton identity, q-fold identity and boundary constants, exact Var(J2) via the Beta decomposition, Newton basin, amplification constants, exponent table); sign error found and fixed in the analytic Cox–Snell correction implementation (b1 = +½ I^{-1} T; checked b1 = θ0 in the exponential model).
31 +Artifacts created: theory/ASSUMPTIONS.md, theory/THEOREM_AUDIT.md (proof ledger), theory/symbolic_checks.py.
32 +Tests passed: all symbolic checks; 29 unit tests. Tests failed: none.
33 +Unproved statements: adaptive order selection (H1) left open by design.
34 +Decision: proceed with the general r-th order family and the (r,q) theorem.
35 +
36 +Phase: 3 — General high-order bias-correction family
37 +Start/finish timestamp: 2026-10-28 19:00 → 19:45
38 +What was actually done: Vandermonde weights for arbitrary patterns computed in exact rational arithmetic (src/pamle/jackknife.py), constants β_r and A_r derived, Lemmas 1–5 proved (paper App. A), conditioning analysis of 11 patterns (results/tables/weights_analysis.csv: κ(V) from 6.9 for (1,2) to 4.8e5 for (1,2,4,8,16); A_r = 4, 8, 80/7 for the doubling pattern; (1,2,3) has smaller |β_3| = 6 but larger A_3 = 12).
39 +Artifacts: src/pamle/jackknife.py, experiments/run_weights_analysis.py, results/tables/weights_analysis.csv, paper/sections/construction.tex.
40 +Tests passed: tests/test_jackknife_weights.py. Decision: order selection from the data stated as open (no theorem).
41 +
42 +Phase: 4 — Statistical–synchronization frontier
43 +Start/finish timestamp: 2026-10-28 19:30 → 20:30
44 +What was actually done: Theorem 1 (joint (r,q) frontier) proved with the stochastic remainder tracked (App. A); Theorem 3 (inexact curvature: stale averaged local Hessians ⇒ 1−1/(2(r+q)); single-machine ⇒ 1−1/(2r+q), recovering CEASE's (t+1)/(t+2) and JLY's 2/3; relative quantization ⇒ bit requirement (½ − r(1−α)) log2 N) proved; Proposition 4 (unequal sizes with weights m_k/N, equal-weight counterexample; misspecification) proved; Proposition 5 (cost model) stated as conditional.
45 +Artifacts: paper/sections/results.tex, inexact.tex, costmodel.tex, robustness.tex, appendices/proofs.tex.
46 +Tests: exponent formulas tested (tests/test_communication_accounting.py). Unresolved: Theorem 3(a) needs the fourth-moment block condition (A4) — stated explicitly.
47 +
48 +Phase: 5 — Exact analytic models and counterexamples
49 +Start/finish timestamp: 2026-10-28 19:00 → 20:40
50 +What was actually done: Theorem 2 (exact exponential identities (i)–(iv), boundary limit (v) for all (r,q), necessity (vi)) proved (App. B) and checked symbolically and numerically; failure gallery (Newton basin (0, 2θ̂_N), negative pilots, sign alternation β_2 < 0 < β_3); logistic and Poisson likelihoods implemented with batched Newton, separation safeguard, finite-difference-checked derivatives, analytic Cox–Snell baseline; boundary study run (results/processed/boundary_summary*.csv; finite-m prediction matches Monte Carlo means to 3 digits; the (3,1) boundary regime m ≍ N^{1/24} is unreachable).
51 +Artifacts: paper/sections/exactmodel.tex, appendices/exponential.tex, experiments/run_boundary.py, experiments/boundary_pred.py.
52 +Tests passed: tests/test_math_identities.py (6 tests). Decision: exponential model used as a laboratory only; no computational lower-bound claim.
53 +
54 +Phase: 6 — Research-grade benchmark library
55 +Start/finish timestamp: 2026-10-28 18:58 → 21:00
56 +What was actually done: package src/pamle (jackknife, partitioning, likelihoods, algorithms incl. CSL/AEE/Cox–Snell/stale/single/quantized Newton, communication accounting, diagnostics, TCP protocol + worker); 30 tests incl. reproduction of the prior draft's Monte Carlo summary to 1e-9 relative and an end-to-end protocol test with worker subprocesses; np.linalg.inv is used only for the diagnostic Cox–Snell bias (p×p), never in a Newton step.
57 +Tests passed: 30/30 (laptop, Python 3.14); 29/29 on a Python 3.9 node (the 30th needs the frozen references directory).
58 +Decision: Gate 6 passed; large experiments launched.
added README.md +135 −0
@@ -0,0 +1,135 @@
1 +<!-- Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca -->
2 +# 🧮 Beyond One-Step Distributed Maximum Likelihood
3 +
4 +**UQO Working Paper No. 28** — *Local bias cancellation, global synchronization, and the price of inexact curvature: a joint order–round frontier, its sharpness in an exact model, and measured communication costs*
5 +
6 +[![Paper](https://img.shields.io/badge/paper-PDF-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)
7 +[![Python](https://img.shields.io/badge/python-3.9%20%7C%203.14-3776AB?logo=python&logoColor=white)](requirements.txt)
8 +[![Data](https://img.shields.io/badge/data-synthetic%20·%20seeded-4051b5)](results/)
9 +[![Reproducible](https://img.shields.io/badge/reproducible-end--to--end%20pipeline-2e7d32)](experiments/)
10 +[![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca)
11 +[![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca)
12 +
13 +> **TL;DR** — Each of $K$ workers debiases its local MLE by an order-$r$ split-sample extrapolation over nested sub-blocks; the coordinator averages and applies $q$ aggregated Newton steps. For fixed-dimensional regular likelihoods the result is first-order equivalent to the centralized MLE whenever $K = o(N^{1-1/(2^{q+1}r)})$ (half-block jackknife + one step: $K = o(N^{7/8})$ against the $K = O(N^{1/2})$ stated for the plain-average one-step estimator). The exponent is sharp for the construction in the exponential model (boundary shift $-\theta_0(\beta_r c^r)^{2^q}$, e.g. $-4\theta_0c^4$), and a perturbation theorem gives the exponent for stale, single-machine and $b$-bit quantized Hessians. Monte Carlo (exponential, logistic, Poisson; paired replications; $N$ up to $2^{22}$), an exact boundary study, ablations, and timed coordinator–worker benchmarks on the MacLustr cluster quantify the finite-sample costs. Components are known (Quenouille/Dhaene–Jochmans jackknife; Huang–Huo one-step); the joint frontier, its sharpness and the bit-precision result are new. No communication lower bound is claimed.
14 +
15 +---
16 +
17 +## 📌 Status
18 +
19 +| Item | Value |
20 +|---|---|
21 +| Version | 1.0 (October 2026) — working draft under internal review; see `FINAL_REVIEW.md` |
22 +| SSRN | not yet submitted |
23 +| Journal | — (candidates: Journal of Econometrics, Econometric Theory, JASA T&M, JCGS) |
24 +| Code & data | fully reproducible from `experiments/` (synthetic data only); raw Monte Carlo outputs committed in `results/raw/` with manifests |
25 +| Provenance | develops the exploratory note "Local Bias Correction versus Global Synchronization in Distributed Maximum Likelihood" (Boucher & "GPT-6.1", 2026-10-28), frozen in `references/initial_pamle/`; see `SOURCE_PROVENANCE.md` and the disclosure on page 3 of the paper |
26 +
27 +## 🎯 What this paper does
28 +
29 +Distributed MLE with $N$ observations on $K$ workers of $m = N/K$ observations: averaging local MLEs keeps the $O(1/m)$ local bias, so plain averaging is equivalent to the centralized MLE only for $K = o(N^{1/2})$. Two known remedies — local debiasing and global Newton corrections — are analysed **jointly**. The local correction is the generalized (split-sample) jackknife with Vandermonde weights over nested sub-blocks of sizes $m/s_j$,
30 +
31 +```
32 +J_{r,k} = Σ_j w_j T_{s_j,k}, Σ_j w_j = 1, Σ_j w_j s_j^a = 0 (a = 1..r-1)
33 +θ^(0) = K^{-1} Σ_k J_{r,k}; θ ← θ − H_N(θ)^{-1} g_N(θ) (q times, aggregated score and Hessian)
34 +```
35 +
36 +Main results: Theorem 1 (frontier $K = o(N^{1-1/(2^{q+1}r)})$ with the centered random remainder of order $(m\sqrt K)^{-1}$ kept), Theorem 2 (exact exponential identities, boundary limits for every $(r,q)$, Newton basin $(0, 2\hat\theta_N)$, necessity), Theorem 3 (inexact curvature: stale averaged local Hessians $\Rightarrow 1-1/(2(r+q))$; single-machine Hessian $\Rightarrow 1-1/(2r+q)$, recovering CEASE's $(t+1)/(t+2)$ and CSL's $2/3$; quantization to $b \ge (\tfrac12 - r(1-\alpha))\log_2 N$ bits), Proposition 4 (unequal sizes, misspecification), Proposition 5 (cost model and exchange rate between a local level and a round).
37 +
38 +## 🏆 Headline results
39 +
40 +| Object | Result |
41 +|---|---|
42 +| Sufficient exponent, half-block jackknife + 1 Newton step | $K = o(N^{7/8})$ (plain average + 1 step: $3/4$; quarter-block + 1 step: $11/12$) |
43 +| Exponent structure | depends on $(r,q)$ only through $D = 2^q r$: one round ⇔ doubling the local order |
44 +| Sharpness (exponential model) | $\sqrt N(\theta^{(1)}_2 - \hat\theta_N) \to -4\theta_0c^4$ when $K \sim cN^{7/8}$; divergence beyond |
45 +| Inexact curvature | stale: $1-1/(2(r+q))$; single machine: $1-1/(2r+q)$; bits for quantized derivatives: $(\tfrac12 - r(1-\alpha))\log_2 N$ |
46 +| Exact variance cost of the half-block correction | $\mathrm{Var}\,J_2 = \theta_0^2 m^2(m^2-6m+17)/((m-4)(m-2)^2(m-1)^2) = \theta_0^2(m^{-1}+4m^{-2}+O(m^{-3}))$, same first two terms as the raw MLE |
47 +| Monte Carlo and benchmarks | see `paper/tables/` (generated), `results/processed/summary.csv`, `results/processed/benchmarks_summary.csv` |
48 +
49 +## 🗂 Repository layout
50 +
51 +```
52 +distributed-mle-synchronization/
53 +├── CLAUDE.md # the research mandate (verbatim)
54 +├── PROJECT_MAP.md · SOURCE_PROVENANCE.md · PHASE_STATUS.md · research_log.md
55 +├── LIMITATIONS_AND_CLAIMS.md · FINAL_REVIEW.md · FINAL_DELIVERY.md
56 +├── references/initial_pamle/ # frozen prior draft + archive + SHA256SUMS.txt (read-only)
57 +├── literature/ # audits A–D, PRIOR_ART_MATRIX.csv (56 rows), PRIORITY_AND_GAP.md
58 +├── theory/ # ASSUMPTIONS.md, THEOREM_AUDIT.md (proof ledger), symbolic_checks.py (SymPy)
59 +├── src/pamle/ # library: jackknife, partitioning, likelihoods, algorithms, communication, diagnostics, protocol, worker
60 +├── experiments/ # run_monte_carlo.py (+configs/), scatter_cluster.py, run_boundary.py, run_ablations.py, run_skewed.py,
61 +│ # run_benchmarks.py, process_results.py, make_tables.py, EXPERIMENT_MANIFEST.csv
62 +├── tests/ # pytest suite (weights, exact identities, derivatives, estimators, accounting, reproducibility, protocol)
63 +├── results/{raw,processed,tables,figures,resource_profiles}
64 +├── paper/ # main.tex, sections/, appendices/, tables/ (generated), figures/, references.bib → main.pdf
65 +├── scripts/ # compile_paper.sh, validate_pdf.sh, reproduce_all.sh
66 +└── docs/ # cluster inventory, misc
67 +```
68 +
69 +## 🚀 Quick start
70 +
71 +```bash
72 +python3 -m pip install -r requirements.txt
73 +pytest -q # 30 tests (≈ 10 s)
74 +python3 theory/symbolic_checks.py # SymPy verification of every identity (≈ 1 min)
75 +python3 experiments/run_monte_carlo.py --config experiments/configs/main_exponential.yaml # laptop, ≈ 2 h
76 +python3 experiments/run_boundary.py; python3 experiments/run_ablations.py --model logistic; python3 experiments/run_skewed.py
77 +python3 experiments/scatter_cluster.py --configs experiments/configs/main_logistic.yaml experiments/configs/main_poisson.yaml experiments/configs/robustness.yaml --launch # cluster
78 +python3 experiments/run_benchmarks.py --config experiments/configs/benchmarks.yaml --out results/raw/benchmarks.jsonl # cluster
79 +python3 experiments/process_results.py --figures && python3 experiments/make_tables.py
80 +bash scripts/compile_paper.sh && bash scripts/validate_pdf.sh
81 +```
82 +
83 +Runtime: the exponential Monte Carlo (40 cells × 2000 replications) takes about two hours on an Apple M5 Max laptop; the logistic/Poisson/robustness grids (136 cells) were spread over 18 MacLustr nodes (several hours); the benchmarks need the cluster.
84 +
85 +## 🗃 Data
86 +
87 +All data are synthetic and seeded (`seed_base = 20261028` plus a hash of the cell description); nothing proprietary. Raw per-replication outputs (`results/raw/*.csv`) carry a JSON manifest (git commit, Python/NumPy versions, host, wall time, SHA-256); `experiments/EXPERIMENT_MANIFEST.csv` collects them.
88 +
89 +## 🔬 Methodology
90 +
91 +1. Local split fits on nested sub-blocks, batched Newton with step halving and status codes — `src/pamle/likelihoods.py`, `algorithms.local_split_fits`.
92 +2. Vandermonde weights, pilot — `jackknife.py`, `algorithms.worker_corrected_estimates`, `pilot_estimator`.
93 +3. Global corrections (exact / stale / single-machine / quantized curvature), CSL, AEE, analytic Cox–Snell — `algorithms.global_newton`, `csl`, `aee_lin_xi`, `analytic_bias_correction`.
94 +4. Communication accounting — `communication.py`; real protocol — `protocol.py`, `worker.py`.
95 +5. Experiments and processing — `experiments/` (every table/figure regenerated from `results/`).
96 +
97 +## 🖼 Figures & tables inventory
98 +
99 +| Figure | Content |
100 +|---|---|
101 +| `fig_rms_gap_vs_m_<design>` | RMS scaled gap to the centralized MLE vs $m$ for all estimators |
102 +| `fig_rmse_theta0_vs_m_<design>` | scaled RMSE vs $\theta_0$: bias–variance trade-off across orders |
103 +| `fig_gap_collapse_<design>` | gaps against $K/N^{\alpha(r,q)}$ for several $N$ (collapse predicted by Theorem 1) |
104 +| `fig_coverage95_<design>` | empirical 95 % coverage vs $m$ |
105 +| `fig_boundary_exponential` | boundary study: gap / asymptotic limit vs $m$ with finite-$m$ prediction |
106 +
107 +Tables (`paper/tables/*.tex`, generated by `experiments/make_tables.py`): `mc_<design>.tex`, `mc_rates.tex`, `boundary.tex`, `abl_exponential.tex`, `abl_logistic.tex`, `skew.tex`, `bench.tex`, `numbers.tex`.
108 +
109 +## ⚠️ Limitations
110 +
111 +See `LIMITATIONS_AND_CLAIMS.md`. Fixed $p$ and i.i.d. data only; sufficient exponents, sharp only for the construction in the exponential model; the boundary regime $m \asymp N^{1/(2^{q+1}r)}$ is reached only at very large $N$; higher orders inflate variance and can fail at small $m$; benchmarks are specific to one cluster and one Python/TCP implementation; no energy or cost measurements; no lower bounds.
112 +
113 +## 📝 Citation
114 +
115 +```bibtex
116 +@techreport{boucher2026distributedmle,
117 + author = {Boucher, Simon-Pierre},
118 + title = {Beyond One-Step Distributed Maximum Likelihood: Local Bias Cancellation, Global Synchronization, and the Price of Inexact Curvature},
119 + institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},
120 + type = {Working Paper},
121 + number = {28},
122 + year = {2026},
123 + month = {October}
124 +}
125 +```
126 +
127 +## 👤 Author & contact
128 +
129 +**Simon-Pierre Boucher** — Département des sciences administratives, Université du Québec en Outaouais (UQO), Gatineau, QC. 📧 [simon-pierre.boucher@uqo.ca](mailto:simon-pierre.boucher@uqo.ca)
130 +
131 +## 🗒 Notes
132 +
133 +- Numbering: No. 28 is the next free number of the UQO series (`Recherche-UQO/README.md` stops at 27). The SPID database paper in `finance/russell3000-strategic-project-database` carries FIRC series No. 0001, not 28; see `SOURCE_PROVENANCE.md`.
134 +- Authorship: the title page lists Simon-Pierre Boucher and preserves the "GPT-6.1" AI co-author designation of the prior draft, with a disclosure paragraph; for a journal submission the designation should move to the disclosure (flagged, not silently changed).
135 +- Deviation from the template: `paper/main.tex` adds amsthm, algorithmic and TikZ packages; `sections/titlepage.tex` is the exact template copy.
modified experiments/process_results.py +18 −20
@@ -119,8 +119,9 @@ def fig_rmse_vs_m(s, label, p, N, metric="rms_gap", ests=("r1_q0", "r1_q1", "r1_
119 119 col, mk, ls, lab = STYLE[e]
120 120 ax.plot(dd["m"], dd[metric].clip(lower=1e-12), marker=mk, ls=ls, color=PAL[col], label=lab, markerfacecolor="white", markeredgewidth=1.2)
121 121 ax.set_xscale("log", base=2); ax.set_yscale("log"); ax.set_xlabel("local sample size m (N fixed)"); ax.set_ylabel(ylabel or metric)
122 + ax.set_ylim(bottom=max(ax.get_ylim()[0], 1e-8))
122 123 ax.set_title(f"{label}, p = {p}, N = {N:,}", loc="left", fontsize=9, color=INK)
123 − ax.legend(ncol=1, loc="best"); FIG.mkdir(parents=True, exist_ok=True)
124 + ax.legend(ncol=2, loc="upper center", bbox_to_anchor=(0.5, -0.22), fontsize=7); FIG.mkdir(parents=True, exist_ok=True)
124 125 fig.savefig(FIG / (fname or f"fig_{metric}_vs_m_{label}_p{p}_N{N}.pdf")); plt.close(fig)
125 126
126 127
@@ -159,29 +160,25 @@ def fig_coverage(s, label, p, N, ests=("r1_q0", "r1_q1", "r2_q0", "r2_q1", "r3_q
159 160
160 161
161 162 def fig_boundary(fname="fig_boundary_exponential.pdf"):
162 − f = PROC / "boundary_summary.csv"
163 − if not f.exists():
163 + """Ratio of the Monte Carlo mean scaled gap to the asymptotic limit, against m, per (r,q) and c; hollow markers = finite-m prediction."""
164 + fp = PROC / "boundary_summary_with_prediction.csv"; f = PROC / "boundary_summary.csv"
165 + if not (fp.exists() or f.exists()):
164 166 return
165 − b = pd.read_csv(f)
166 − fp = PROC / "boundary_summary_with_prediction.csv"
167 − if fp.exists():
168 − b = pd.read_csv(fp)
169 − cases = [(2, 1), (1, 2), (3, 1), (2, 0)]
170 − fig, axes = plt.subplots(1, len(cases), figsize=(2.5 * len(cases) + 0.5, 2.9))
171 − cols = ["blue", "orange", "aqua"]
167 + b = pd.read_csv(fp if fp.exists() else f)
168 + cases = [(1, 1), (2, 0), (2, 1), (1, 2)]
169 + fig, axes = plt.subplots(1, len(cases), figsize=(2.45 * len(cases) + 0.6, 2.9), sharey=True)
170 + cols = ["blue", "orange", "aqua"]; mks = ["o", "s", "^"]
172 171 for ax, (r, q) in zip(axes, cases):
173 172 d = b[(b.r == r) & (b.q == q)]
174 173 for i, c in enumerate(sorted(d.c.unique())):
175 − dd = d[d.c == c].sort_values("N")
176 − ax.errorbar(dd["N"], dd["mean_gap"], yerr=1.96 * dd["se"], marker="o", ms=3.5, color=PAL[cols[i]], label=f"c = {c:g}", capsize=2, lw=1.2)
177 − ax.plot(dd["N"], dd["limit_c_eff"], ls="--", color=PAL[cols[i]], lw=1.0)
174 + dd = d[d.c == c].sort_values("m")
175 + ratio = dd["mean_gap"] / dd["limit_c_eff"]; err = 1.96 * dd["se"] / dd["limit_c_eff"].abs()
176 + ax.errorbar(dd["m"], ratio, yerr=err, marker=mks[i], ms=4, color=PAL[cols[i]], label=f"c = {c:g}", capsize=2, lw=1.2, ls="-")
178 177 if "pred_finite_m" in dd:
179 − ax.plot(dd["N"], dd["pred_finite_m"], ls=":", color=PAL[cols[i]], lw=1.0)
180 − ax.set_xscale("log", base=2); ax.set_xlabel("N"); ax.set_title(f"(r, q) = ({r}, {q}), α = {1-1/(2**(q+1)*r):.4g}", fontsize=8, loc="left")
181 − axes[0].set_ylabel("mean of √N (θ̃ − θ̂_N)"); axes[0].legend(fontsize=7)
182 − axes[-1].text(0.02, 0.02, "solid: Monte Carlo ±1.96 s.e.; dashed: limit; dotted: finite-m prediction", transform=axes[-1].transAxes, fontsize=6, color=INK2)
183 − for ax in axes:
184 − ax.set_yscale("symlog", linthresh=1.0)
178 + ax.plot(dd["m"], dd["pred_finite_m"] / dd["limit_c_eff"], marker=mks[i], ms=6, markerfacecolor="white", color=PAL[cols[i]], lw=0, markeredgewidth=1.1)
179 + ax.axhline(1.0, color=INK2, lw=0.8); ax.set_xscale("log", base=2); ax.set_xlabel("local sample size m")
180 + ax.set_title(f"(r, q) = ({r}, {q}), α = {1-1/(2**(q+1)*r):.4g}", fontsize=8, loc="left")
181 + axes[0].set_ylabel("mean gap / asymptotic limit"); axes[0].legend(fontsize=7, loc="upper right")
185 182 fig.savefig(FIG / fname); plt.close(fig)
186 183
187 184
@@ -191,7 +188,8 @@ def main():
191 188 if a.figures:
192 189 for (label, p), d in s.groupby(["label", "p"]):
193 190 Nmax = d.N.max()
194 − fig_rmse_vs_m(s, label, p, Nmax, "rms_gap", ylabel="RMS of √N (θ̃ − θ̂_N)")
191 + ests = ("r1_q0", "r1_q1", "r1_q2", "r2_q0", "r2_q1", "r3_q0", "r3_q1", "cs_q1") + (() if label.startswith("exp") else ("csl1",))
192 + fig_rmse_vs_m(s, label, p, Nmax, "rms_gap", ests=ests, ylabel="RMS of √N (θ̃ − θ̂_N)")
195 193 fig_rmse_vs_m(s, label, p, Nmax, "rmse", ests=("r1_q0", "r2_q0", "r3_q0", "r1_q1", "r2_q1", "cs_q0"), ylabel="RMSE of √N (θ̃ − θ0)", fname=f"fig_rmse_theta0_vs_m_{label}_p{p}_N{Nmax}.pdf")
196 194 fig_gap_collapse(s, label, p); fig_coverage(s, label, p, Nmax)
197 195 fig_boundary()
modified results/figures/fig_boundary_exponential.pdf +0 −0

Binary file not shown.

modified results/figures/fig_coverage95_exp_contam_p1_N1048576.pdf +0 −0

Binary file not shown.

modified results/figures/fig_coverage95_exp_p1_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_coverage95_logit_misspec_p3_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_coverage95_logit_p3_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_coverage95_logit_p8_N16384.pdf +0 −0

Binary file not shown.

modified results/figures/fig_coverage95_pois_p3_N65536.pdf +0 −0

Binary file not shown.

modified results/figures/fig_coverage95_pois_p8_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_gap_collapse_exp_contam_p1.pdf +0 −0

Binary file not shown.

modified results/figures/fig_gap_collapse_exp_p1.pdf +0 −0

Binary file not shown.

modified results/figures/fig_gap_collapse_logit_misspec_p3.pdf +0 −0

Binary file not shown.

modified results/figures/fig_gap_collapse_logit_p3.pdf +0 −0

Binary file not shown.

modified results/figures/fig_gap_collapse_logit_p8.pdf +0 −0

Binary file not shown.

modified results/figures/fig_gap_collapse_pois_p3.pdf +0 −0

Binary file not shown.

modified results/figures/fig_gap_collapse_pois_p8.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rms_gap_vs_m_exp_contam_p1_N1048576.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rms_gap_vs_m_exp_p1_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rms_gap_vs_m_logit_misspec_p3_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rms_gap_vs_m_logit_p3_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rms_gap_vs_m_logit_p8_N16384.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rms_gap_vs_m_pois_p3_N65536.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rms_gap_vs_m_pois_p8_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rmse_theta0_vs_m_exp_contam_p1_N1048576.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rmse_theta0_vs_m_exp_p1_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rmse_theta0_vs_m_logit_misspec_p3_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rmse_theta0_vs_m_logit_p3_N262144.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rmse_theta0_vs_m_logit_p8_N16384.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rmse_theta0_vs_m_pois_p3_N65536.pdf +0 −0

Binary file not shown.

modified results/figures/fig_rmse_theta0_vs_m_pois_p8_N262144.pdf +0 −0

Binary file not shown.

modified results/raw/ablation_exponential_N1572864_m96.csv +19724 −0
Large diff (19,727 lines) is not loaded by default to keep the page fast.Load diff

Diff truncated — file too large.

Menu

Theme