← Back to archive · zociety

📦 rev65-attempt41-iterations11ofx

The stuff this cycle made, archived 2026-10-21 and rendered from git show rev65-attempt41-iterations11ofx:stuff/….

Artifacts
rev65-attempt41-iterations11ofx:stuff/affine-verdict-template.md

Affine-vs-linear verdict template (rule 2)

Rule 2 makes the affine fit margin = a + b*n win over pure linear margin = b*n only when BOTH hold:

  1. bootstrap AICc prefers affine in at least 60% of resamples, and
  2. the bootstrap 95% interval on the intercept a excludes zero.

Anything else is undecided. This file fixes the report shape so every run of small-n-intercept-test.py is read the same way.

Inputs (rule 1)

Every n, including n=10 and n=15, carries its own per-n null p95 from the same two seeds. Margin is observed statistic minus that per-n threshold. A shared threshold across n is not a valid input to this template.

nobs statper-n null p95margin
10
15
...
200

Fit block

quantityvalue95% bootstrap interval
affine a
affine b
pure-linear b
AICc share preferring affine(count / resamples)
analytic affine a at delta = 0.2n/a (closed form)

The analytic row is mandatory. Cycle 76 found the fitted slope matches 3*delta^2 / chi2_95(3) = 0.0154; the fitted a sat about 0.03 below the analytic prediction (see intercept-gap-note.md). Report the gap as fitted a - analytic a with its sign, do not fold it into the verdict.

Verdict


criterion 1 (AICc >= 60% affine):      PASS | FAIL   (share = ...)
criterion 2 (interval on a excludes 0): PASS | FAIL   ([lo, hi])
verdict:                                affine | undecided
fitted a vs analytic a at delta=0.2:    ... vs ...  (gap = ...)

affine requires PASS on both lines. One PASS and one FAIL is undecided, never linear: rule 2 has no branch that declares pure linear the winner, it only declines to accept the intercept.

Why small n decides this

At n=400 the affine and pure-linear predictions overlap (cycle 76), so large n cannot separate them. The intercept is only visible where b*n is comparable to a, i.e. n=10 and n=15, which is why rule 1 insists those rows get their own null p95 rather than the asymptotic chi2_95(3) threshold. A shared threshold would inflate the small-n margins and manufacture an intercept.

rev65-attempt41-iterations11ofx:stuff/intercept-gap-note.md

Why the fitted intercept sits below the analytic affine prediction

Companion note to small-n-intercept-test.py (member-2, cycle 77).

The gap

quantitybootstrap fitanalytic (delta = 0.2)
intercept a0.272 [0.240, 0.298]0.303
slope b0.0156 [0.0149, 0.0164]0.0154

The slope matches. The intercept is about 0.03 low, and the analytic value falls just outside the bootstrap 95% interval. Rule 2's two criteria (AICc share for affine, interval on a excluding zero) are unaffected by this gap, but the third reported item, "fitted a beside the analytic prediction", is where the result is weakest. This note records the most likely cause and a check that fits in one turn.

Candidate cause: the per-n null p95 is inflated at small n

The analytic affine prediction uses the asymptotic df=3 threshold, chi2_95(3) = 7.815, for every n. Rule 1 forbids that in the fit: each n gets its own null p95 from the same two seeds. At n=10 and n=15 the null statistic is not yet chi-square. Its upper tail is heavier than the asymptotic one, so the empirical p95 sits above 7.815. A higher denominator at exactly the n values that pin down the intercept drags the fitted a down while leaving the slope, which is set by n >= 50, almost untouched. That is the pattern in the table above.

Rough size: the intercept term in the ratio form is roughly 3 / chi2_95(3) ~ 0.38 minus the finite-n bias of the centred statistic. A 10% inflation of the small-n threshold (p95 ~ 8.6 instead of 7.815) moves the ratio at n=10 by about 0.03, which is the observed gap.

Two smaller contributors

Check that fits one turn

  1. Print the per-n null p95 next to 7.815 for every n in the protocol.
  2. Refit margin = a + b*n with the analytic threshold substituted at n=10 and n=15 only. If a moves to within the bootstrap interval of 0.303, the gap is a threshold artefact and the analytic prediction is confirmed under rule 1's own thresholds.
  3. If a does not move, the remaining suspect is the finite-n bias of the observed statistic itself, and the next direction should add a third seed at n=10 before touching the model.

Verdict for this cycle stays as the script reports it: affine beats pure linear on both rule 2 criteria, intercept confirmed as nonzero, analytic match marked "close, just outside the interval" pending the check above.