id: an-008 hypothesis: headline-sponsor-bias headline: SP-only prototype (2026-06-01): within-candidate FE gave β = +7.24 pp on 15 self-sponsored rows. Superseded by AN-001's all-Brazil run but kept as the project's first-pass design validation. type: robustness question: "Does the within-candidate FE design work on the SP slice before the all-Brazil LLM extraction finishes?" tags: ["hyp:headline-sponsor-bias", regressions, sp-slice, prototype, historical] status: interpreted status_date: 2026-06-01 confidence: yellow created: 2026-06-01 script: source/analysis/sp_regressions.py target: build/table/sp_regressions.csv commit: 4f41c25 design: sample: estimulado-non-aggregate-match2-SP-only specification: error ~ sponsored_by + opponent_sponsored + controls | candidate FE + pollster FE (via Patsy C(entity)); cluster-robust SE at muni comparator: all cluster: muni notes: "Patsy C(entity) materializes 8k dummy columns — OOM'd on all-Brazil. The fix in AN-001 was linearmodels.PanelOLS within-demeaning."

AN-008: SP-slice prototype design validation

Results

SP-only sample: 1,203 polls with estimulado scenarios, 15 self-sponsored rows after match-score ≥ 2 filter.

Table: Spec ladder for β (sponsored_by)

Spec β (sponsored_by) SE p
naive (no FE) +2.17 2.49 0.38
Spec 1 (pollster + candidate FE) +7.64 2.56 0.003
Spec 2 (+ methodology controls) +7.24 2.46 0.003
Spec 3c (clean + race × week FE) +15.73 3.41 <0.001
Spec 2 WLS +8.06 2.60 0.002

(from source/analysis/sp_regressions.py)

The naive → Spec 1 transition is dramatic: +2.17 → +7.64. SP-only candidates who self-sponsor are negatively selected on standing — the within-candidate FE strips that out.

Symmetry test (Spec 2): β_self = +7.24, β_opp = −3.14, β_self − β_opp = +10.4 pp.

Table: SP slice vs all-Brazil run

Quantity SP only All-Brazil
β (Spec 2) +7.24 +7.75
n_self 15 568
Spec 3c β +15.73 (3 cells) +6.95 (60 cells)
Placebo n 7 132
Placebo jump +11.27 (noisy) +6.70 (t=5.21)
Independent-baseline mean error −12.55 +0.93

(from source/analysis/sp_regressions.py)

Interpretation

This was the project's first piece of empirical evidence — demonstrated 2026-06-01 on SP-only data while the laptop bulk extraction was still running for the other 25 UFs. It showed:

All four findings replicated at the all-Brazil scale (see AN-001). The SP slice was the go/no-go test that justified the bulk extraction investment.

Independent-baseline shift is the key difference. The −12.55 → +0.93 movement is the most important contrast with the all-Brazil run: at SP-only scale, the selection of candidates with matched independent + self-sponsored polls happened to pick candidates whose independent polls undershot dramatically. At all-Brazil scale, the baseline is centered.

Confidence rationale (yellow). The prototype's headline number (+7.24 pp) lines up almost exactly with the all-Brazil β (+7.75 pp), but with only 15 self-sponsored rows the SP estimate is fragile — Spec 3c on 3 cells and the −12.55 baseline shift show how easily the slice could have given a misleading picture. The page is kept as a provenance record of the design validation, not as a load-bearing result.

Follow-ups

This page is historical. No further work planned on the SP slice; all design questions are resolved at the all-Brazil scale in AN-001 through AN-007. The brief at docs/briefs/sp_slice_analysis.md preserves the contemporaneous writeup for the project's provenance story.