The stuff this cycle made, archived 2026-10-21 and rendered from
git show rev65-attempt45-iterations11ofx:stuff/….
moment-match-check.mdncx2-shape-check.mdtail-ratio-check.mdAnswer to the cycle 81 direction (member-1). The simulated cycle 75 alternative statistic is not ncx2(3, lambda) at n=25 or n=50, and the mismatch is not a matter of which lambda or which rescaling is used. For c * ncx2(3, lambda) the scale-free ratio var/mean^2 equals 2(3+2 lambda)/(3+lambda)^2, which is at most 2/3 (at lambda=0) and falls toward 0 as lambda grows. The cycle 75 draws have var/mean^2 of 49 at n=25 and 515 at n=50, with bootstrap 2.5% bounds of 38 and 276. So there is no lambda >= 0 and no scale factor c for which a three-degree-of-freedom noncentral chi-square reproduces both the mean and the variance. Cycle 80's lambda of 4.018 and 7.154 can therefore only have matched one quantile (the p95 crossing), and the shape is heavier-tailed than any ncx2(3, lambda).
This is a third, independent route to the same conclusion as member-2 (null-p95 rescaling: variance 7 to 30 times too large) and member-3 (scale-free quantile ratios and Hill index below 1).
stuff/c75-df3-draws.csv (cycle 75 archive tag rev65-attempt39-iterations11ofx, t(3) gate statistic, seeds 65068 and 65069, 2000 draws per seed per n, 4000 pooled). Used raw, no rescaling.stuff/moment-match-check.py; output stuff/moment-match-check.csv.| n | source | sims | seed | mean | variance | var/mean^2 | ncx2 max | implied lambda |
|---|---|---|---|---|---|---|---|---|
| 25 | cycle 75 raw | 2000 | 65068 | 0.4973 | 14.01 | 56.6 | 0.667 | none |
| 25 | cycle 75 raw | 2000 | 65069 | 0.4546 | 8.25 | 39.9 | 0.667 | none |
| 25 | cycle 75 raw | 4000 | pooled | 0.4760 | 11.13 | 49.1 | 0.667 | none |
| 25 | bootstrap 2.5% / 97.5% | 400 | 65083 | 6.81 / 16.96 | 38.4 / 60.1 | 0.667 | none | |
| 25 | ncx2(3, 4.018), c=0.0678 | 20000 | 65084 | 0.4764 | 0.1035 | 0.456 | 0.667 | 4.018 |
| 50 | cycle 75 raw | 2000 | 65068 | 6725 | 2.41e10 | 533 | 0.667 | none |
| 50 | cycle 75 raw | 2000 | 65069 | 4056 | 5.83e9 | 355 | 0.667 | none |
| 50 | cycle 75 raw | 4000 | pooled | 5390 | 1.50e10 | 515 | 0.667 | none |
| 50 | bootstrap 2.5% / 97.5% | 400 | 65083 | 1.72e9 / 3.32e10 | 276 / 811 | 0.667 | none | |
| 50 | ncx2(3, 7.154), c=530.9 | 20000 | 65084 | 5379 | 9.72e6 | 0.336 | 0.667 | 7.154 |
"Implied lambda" is the lambda that would give the observed var/mean^2; it is "none" wherever that ratio exceeds 2/3, which is every cycle 75 row and every bootstrap bound. At the matched mean, the cycle 80 ncx2 has a variance 108 times too small at n=25 and 1540 times too small at n=50.
Both rows per n share the same mean, so the quantiles are directly comparable on the raw scale.
| n | source | p90 | p95 | p99 |
|---|---|---|---|---|
| 25 | cycle 75 raw, pooled | 0.295 | 0.841 | 9.22 |
| 25 | ncx2(3, 4.018) scaled to same mean | 0.912 | 1.094 | 1.485 |
| 50 | cycle 75 raw, pooled | 1.59 | 21.1 | 11327 |
| 50 | ncx2(3, 7.154) scaled to same mean | 9593 | 11137 | 14512 |
With the mean pinned, the cycle 75 statistic sits far below the ncx2 at p90 and p95 and far above it at p99 (6 times at n=25). Its mean is carried by a handful of extreme draws: at n=50 the pooled mean of 5390 exceeds the p95 of 21 by a factor of 255. No noncentral chi-square can have its mean above its own p95; that alone rules out ncx2(3, lambda) at n=50.
Answer to the cycle 81 direction. The cycle 75 alternative statistic is not ncx2(3, lambda) at n=25 or n=50. Rescaled so that its own null p95 sits at chi2_95(3) = 7.815, it reproduces the fitted ncx2 power at 7.815 almost exactly (that is what the lambda fit of cycle 80 guaranteed), but its mean, variance and upper quantiles are nowhere near 3 + lambda and 2(3 + 2 lambda). It is a far heavier-tailed shape whose p95 happens to coincide with the ncx2 p95 because lambda was fitted to exactly that crossing.
stuff/c75-df3-draws.csv, copied verbatim from the cycle 75 archive tag rev65-attempt39-iterations11ofx (t(3) gate statistic, seeds 65068 and 65069 pooled, 4000 draws per n).stuff/c75-null-draws.csv, same tag, same seeds, 4000 per n.stuff/ncx2-shape-check.py; output stuff/ncx2-shape-check.csv.| n | source | sims | seed | mean | variance |
|---|---|---|---|---|---|
| 25 | cycle 75 statistic, rescaled | 4000 | 65068+65069 | 45.67 | 102469 |
| 25 | ncx2(3, 4.018) analytic | 7.018 | 22.07 | ||
| 25 | ncx2(3, 4.018) simulated | 20000 | 65081 | 6.988 | 22.00 |
| 50 | cycle 75 statistic, rescaled | 4000 | 65068+65069 | 721440 | 2.7e14 |
| 50 | ncx2(3, 7.154) analytic | 10.154 | 34.62 | ||
| 50 | ncx2(3, 7.154) simulated | 20000 | 65081 | 10.180 | 34.54 |
| n | source | p90 | p95 | p99 | P(stat > 7.815) |
|---|---|---|---|---|---|
| 25 | cycle 75 statistic, rescaled | 28.27 | 80.71 | 885.0 | 0.3610 |
| 25 | ncx2(3, 4.018) simulated | 13.32 | 15.99 | 21.80 | 0.3615 |
| 50 | cycle 75 statistic, rescaled | 212.5 | 2828 | 1.5e6 | 0.5975 |
| 50 | ncx2(3, 7.154) simulated | 18.17 | 21.17 | 27.66 | 0.5994 |
Answer to the cycle 81 direction (member-3). The simulated cycle 75 alternative statistic is not ncx2(3, lambda) at n=25 or n=50. This check needs no rescaling at all: quantile ratios and exceedance fractions above multiples of the statistic's own p95 are invariant to any constant scale factor, so they compare the raw gate statistic directly with ncx2(3, lambda) regardless of which mapping (null p95, lambda-fit crossing, or none) is used. On every scale-free measure the cycle 75 statistic has a power-law tail and ncx2 has an exponential one. The lambda fit of cycle 80 matched one crossing point (power at p95) of two shapes that agree nowhere else.
stuff/c75-df3-draws.csv (cycle 75 archive tag rev65-attempt39-iterations11ofx, t(3) gate statistic, seeds 65068 and 65069 pooled, 4000 draws per n). Used raw, no rescaling.stuff/tail-ratio-check.py; output stuff/tail-ratio-check.csv.Raw draws and ncx2 are on different scales, so the absolute columns are not comparable across rows; the ratio columns in the next table are.
| n | source | sims | seed | mean | variance | p90 | p95 | p99 |
|---|---|---|---|---|---|---|---|---|
| 25 | cycle 75 statistic, raw | 4000 | 65068+65069 | 0.476 | 11.13 | 0.2946 | 0.8411 | 9.223 |
| 25 | ncx2(3, 4.018) analytic | 7.018 | 22.07 | |||||
| 25 | ncx2(3, 4.018) simulated | 20000 | 65082 | 7.016 | 22.04 | 13.313 | 16.099 | 21.450 |
| 50 | cycle 75 statistic, raw | 4000 | 65068+65069 | 5390 | 1.497e10 | 1.588 | 21.13 | 11330 |
| 50 | ncx2(3, 7.154) analytic | 10.154 | 34.62 | |||||
| 50 | ncx2(3, 7.154) simulated | 20000 | 65082 | 10.22 | 34.39 | 18.114 | 21.239 | 27.495 |
The raw mean exceeds the raw p95 at n=50 and the variance is ten orders of magnitude above the ncx2 variance. A handful of draws dominate both moments, which is what a tail index below 2 implies (see Hill column below).
| n | source | p95/p90 | p99/p95 | p99/p90 | frac > 1.5 p95 | frac > 2 p95 | frac > 3 p95 | Hill index, top 5% |
|---|---|---|---|---|---|---|---|---|
| 25 | cycle 75 statistic | 2.855 | 10.966 | 31.30 | 0.0387 | 0.0318 | 0.0270 | 0.70 |
| 25 | ncx2(3, 4.018) | 1.209 | 1.332 | 1.611 | 0.0044 | 0.0004 | 0.0000 | 5.53 |
| 50 | cycle 75 statistic | 13.309 | 536.0 | 7134 | 0.0450 | 0.0423 | 0.0385 | 0.27 |
| 50 | ncx2(3, 7.154) | 1.172 | 1.295 | 1.518 | 0.0034 | 0.0001 | 0.0000 | 6.07 |
Reading the table:
The lambda/n = 0.161 and 0.143 "excess noncentrality" is a one-point fit: lambda was chosen so that P(ncx2 > crit) equals the cycle 75 power, which is the fraction of a power-law tail that crosses one threshold. Any threshold crossing of a heavy tail can be matched by some lambda, so the fit is not evidence about noncentrality. At n=100 the bootstrap interval of cycle 80 included 0.12n only because the crossing fraction there happened to land near the baseline, not because the shape became ncx2.
Consistent with member-2's stuff/ncx2-shape-check.md, which reached the same conclusion via the null-p95 rescaling; this file shows the conclusion does not depend on that rescaling.
python3 -I stuff/tail-ratio-check.py > stuff/tail-ratio-check.csv