CPF route survives finite-sample wild-cluster bootstrap inference. WCR two-sided p=0.009 against H0: β_cpf=0. WCU percentile 95% CI: [+8.68, +29.47] — modestly TIGHTER than the CRVE [+7.62, +30.42] on the lower bound, meaning the bootstrap is more confident the coefficient is bounded above zero. The +19.02 pp point estimate is identical to AN-006's +19.12 (within PanelOLS solver tolerance) and the other three routes also pass: committee [+6.16, +11.23] (WCR p<0.001), party [+3.83, +11.51] (p=0.006), party-name [+2.03, +10.29] (p=0.004). The §4.4 paper footnote's concern about CRVE asymptotic-normality at n_self=18 is unfounded — the bootstrap inference confirms the route gradient.

Confidence
green
Type
robustness
Design
Sample
All-Brazil candidate-poll panel after error.notna() (n=31,186 rows, candidate FE absorbing 8,431 candidates, 2,942 muni clusters). Per-route treated cells from AN-006: n_self_cpf=18, n_self_committee=429, n_self_party=42, n_self_party_name=152.
Specification
error ~ sp_cpf + sp_committee + sp_party + sp_party_name + opponent_sponsored + log_sample_size + days_to_election + days² | candidate FE + pollster FE. Wild-cluster bootstrap on β_route via FWL residualization (PanelOLS to residualize y and sp_<route> against all other regressors + FE, then numpy loop). WCR for p-value (impose β_route=0 in DGP), WCU percentile for CI. B=2000 Rademacher draws at muni cluster level.
Comparator
Reference is β=0; bootstrap CI bounds replace the AN-006 CRVE CI in the §4.4 paper footnote.
Cluster
muni
Weights
none
Notes
Bootstrap β_obs = +19.02 vs AN-006's stored +19.12 — 0.1 pp difference is within PanelOLS iterative-solver tolerance, not a substantive shift. The AN-006 number remains canonical for paper citation; this AN supplies the bootstrap CI bounds.
Script
source/analysis/an-031-route-bootstrap.py
Target
build/table/route_bootstrap.csv
Status
interpreted · 2026-06-02
Created
2026-06-02

Question

§4.4 of the paper reports the AN-006 sponsor-route split: CPF route β = +19.12 pp with a cluster-robust 95% CI [+5.6, +32.6] versus committee +8.73, party +7.70, party-name +6.33. The CPF cell is small (n_self=18); the CRVE CI relies on asymptotic-normality assumptions that may not hold. AN-031 bootstraps all four route coefficients to deliver finite-sample-valid inference.

Results

Sponsor-route split: CRVE vs bootstrap inference

Route $n_{\text{self}}$ $\hat\beta$ CRVE 95% CI Bootstrap WCU pct WCR p
CPF 18 +19.02 [+7.62, +30.42] [+8.68, +29.47] 0.009
Committee 429 +8.71 [+6.13, +11.29] [+6.16, +11.23] <0.001
Party 42 +7.66 [+3.76, +11.55] [+3.83, +11.51] 0.006
Party-name 152 +6.27 [+1.99, +10.56] [+2.03, +10.29] 0.004

For CPF the bootstrap percentile CI lower bound (+8.68) is modestly tighter than the CRVE lower bound (+7.62), and the WCR two-sided p-value of 0.009 rejects $H_0: \beta_{\text{cpf}} = 0$ at the 1% level. The other three routes have bootstrap and CRVE CIs that essentially coincide and WCR p-values that are all $\leq 0.006$.

The CPF route's distance from the other three remains the load-bearing observation: the bootstrap CI's lower bound (+8.68) still sits at or above the other routes' point estimates (+6.27 to +8.71), so even the worst-case CPF estimate under bootstrap inference exceeds the committee/party/party-name central estimates.

Interpretation

The §4.4 paper footnote's concern that the CPF route's CRVE inference might be fragile at $n_{\text{self}} = 18$ is unfounded. Wild-cluster bootstrap delivers a bootstrap percentile CI that is modestly tighter than the CRVE on the lower bound and a WCR p-value of 0.009 that comfortably rejects the null. The "skin-in-the-game" interpretation of the CPF route's roughly twofold-larger slant is robust to finite-sample-valid inference.

Follow-ups

  1. Update §4.4 paper footnote (immediate): replace the "queued for the replication materials" hedge with the bootstrap CI bounds and p-value. Add macros for the bootstrap CI to build_numbers.py.

  2. Within-CPF-cell heterogeneity (extension): with n=18, the bootstrap takes the cell's marginal structure as given. A descriptive look at the 18 CPF candidates (race competitiveness, final outcome, party, candidate experience) could surface whether the +19 pp comes from a homogeneous "personal-stake" pattern or is driven by a subset of unusual cases.