Original hypothesis refuted at the relevant unit: Fundo Partidário polls (party-fund-routed, n=239) show β = +6.9 pp, statistically indistinguishable from the pooled +7.8 baseline. Recursos Próprios (candidate-personal-money) is untestable at the contratante level — n=3 because Brazilian campaigns route candidate-personal money through the committee, not via the candidate's own CPF. The empirical signal that does emerge is DISCLOSURE-QUALITY: #NULO# (undeclared funding source) polls show elevated β = +10.4 pp (Spec A, n=25; committee × #NULO# cell β = +13.8 pp, n=16). Within the route=committee block, the funding gradient runs Doações Eleitorais (+5.8) < Fundo Partidário (+9.2) < Outros (+8.3) < #NULO# (+13.8) — opposite of the party-budget-discipline prediction (party fund should be lowest).

Hypothesis
pollster-firm-size-discipline
Confidence
yellow
Type
descriptive
Design
Sample
matched_share=1.0 cand_poll panel (22,256 rows; 450 sponsored). Per-protocol funding_source from poll_sponsor_2024.parquet's origem_recurso on the contratante row only (sponsor_route ∈ {cpf, committee, party, party_name}, role='contratante') — the canonical legally-contracting-entity declaration, not the payment processor's.
Specification
Spec A — PanelOLS with candidate FE + pollster FE + opponent_sponsored + (log_sample_size, days_to_election, days_to_election²); cluster SE at muni; per-funding sp_<level> dummies fit jointly (levels with n_self < 10 dropped: Recursos Próprios, Multiple, Mixed). Spec B — same panel restricted to each (route × funding) cell + the full independent comparator; Spec 2 refit per cell with n_self ≥ 5.
Comparator
pooled within-candidate β = +7.8 (AN-001); AN-006 per-route β (cpf +19, committee/party/party_name +6-9)
Notes
Contratante-level aggregation. Per-protocol structure is paired contratante + pagante rows that systematically declare DIFFERENT origem_recurso (831 of 860 protocols disagree); the contratante row is the legally-contracting entity's declaration of the funding bucket; the pagante row is the payment processor. Aggregating over both bakes Mixed into 96 % of protocols, which is why an early version of the script collapsed to a useless single bucket. Restricted to contratante: Fundo Partidário n=438, Outros n=224, Doações Eleitorais n=98, #NULO# n=70, Multiple n=14, Recursos Próprios n=12, Mixed n=4.
Script
source/analysis/an-120-funding-source-heterogeneity.py
Target
build/table/an-120-funding-source-heterogeneity.csv
Status
done · 2026-06-21
Created
2026-06-21

Question

The headline +7-8 pp within-candidate β pools across candidate-sponsored polls of every route (CPF / committee / party / party-name) and every declared funding source. AN-006 split by route and found CPF polls at β ≈ +19 pp vs other routes at +6-9 pp; AN-074/AN-075/AN-076 attributed the CPF tail to one-shot strategic-stake (M4) mechanics.

A complementary cut is funding source. TSE registration requires the contracting entity (contratante) to declare which budget bucket pays for the poll. The original prediction: if Fundo Partidário (party-fund- routed) polls show lower β than Recursos Próprios (candidate-personal money), sponsor IDENTITY (party-as-principal with reputational stakes across many candidates vs candidate-as-principal) carries explanatory weight independent of the route.

Design

source/analysis/an-120-funding-source-heterogeneity.py:

  1. Load pipelines/politica/build/clean/poll_sponsor_2024.parquet. Restrict to contratante rows (role='contratante') with sponsor_route flagging a candidate-linked sponsor. Build per-protocol funding_source from origem_recurso; collapse compound declarations like "Fundo Partidário / Outros" to Multiple. Modal aggregation within protocol; ties → Mixed.
  2. Merge funding_source onto the matched_share=1.0 cand_poll panel.
  3. Spec A — Funding-source split. Build sp_<funding> dummies per declared level (drop levels with n_self < 10 to avoid rank-deficient regressors). Fit PanelOLS with candidate FE + pollster FE + opponent_sponsored + base methodology controls; cluster SE at muni. Joint estimation; each coefficient is the within-candidate β conditional on that funding bucket.
  4. Spec B — Route × funding cross. For each (route × funding) cell with n_self ≥ 5, refit Spec 2 restricted to that cell + the full independent comparator pool.

Results

Per-funding-source β with 95% CI

Table: Spec A — pooled β by funding source

Funding source β SE 95% CI p n_self
Fundo Partidário +6.86 1.52 [+3.89, +9.84] <10⁻⁵ 239
Doações Eleitorais +3.05 2.43 [−1.72, +7.81] 0.21 50
Outros +6.93 1.97 [+3.07, +10.78] <10⁻³ 127
#NULO# (undeclared) +10.39 2.25 [+5.98, +14.79] <10⁻⁵ 25
Recursos Próprios dropped 3
Multiple dropped 6

Table: Spec B — route × funding cross (n_self ≥ 5 cells)

Route Funding β SE n_self
committee Fundo Partidário +9.20 1.87 167
committee Doações Eleitorais +5.83 2.33 39
committee Outros +8.25 1.66 94
committee #NULO# +13.77 1.98 16
committee Multiple +11.00 3.91 6
party Fundo Partidário +5.72 3.41 10
party Doações Eleitorais −9.79 14.47 5
party Outros +7.99 4.21 6
party #NULO# +1.25 8.82 6
party_name Fundo Partidário +4.38 3.33 62
party_name Doações Eleitorais +0.51 2.86 6
party_name Outros +3.63 4.26 21
cpf Outros +25.74 15.28 6

Interpretation

Confidence rationale (yellow). The empirical findings are clean: the funding-split Spec A coefficients are jointly identified, well within p < 10⁻⁵ for the largest cells, and reproduce the pooled +7-8 baseline on the modal categories. The #NULO# elevation is robust across Spec A (n=25) and Spec B committee × #NULO# (n=16). What keeps the badge from green: (i) the original hypothesis (Fundo Partidário vs Recursos Próprios as a sponsor-identity discriminator) is structurally untestable at the contratante level, so the result answers a different question than asked; (ii) interpretation of the #NULO# elevation hinges on the assumption that contratante is the right unit of analysis (vs pagante or a joint contratante+pagante declaration); (iii) party × Doações Eleitorais shows β = −9.8 on n=5, but the CI is so wide ([−38.1, +18.6]) that the negative point estimate carries no information. Green would require replication of the #NULO# signal on the 2022 cycle (when it ships) or on the pagante-level declaration as a cross-check.

Follow-ups

  1. Add a "funding declared vs not declared" row to the §sec:roadmap design-inventory table (extension). The selective-disclosure paragraph already documents under-disclosure of coverage / audit / methodology completeness on sponsored polls; funding-source disclosure is a parallel dimension with a sharper p-value (#NULO# β = +10.4, p < 10⁻⁵) than several rows already in Table 5. Cell: "Funding source declared at registration" — share #NULO# on sponsored vs independent. The check is a one-line addition to source/analysis/an-120-funding-source-heterogeneity.py. Suggested script extension: same file, new function funding_disclosure_by_sponsor().

  2. Cross-validate the funding signal on the pagante row (blind spot). The contratante's declaration is one of two per-protocol declarations; the pagante's may carry different information (especially for Recursos Próprios where the candidate personally reimburses the committee). A pagante-level rerun would test whether the contratante-level reading is artefactual. Suggested script: an-NNN-funding-source-pagante.py.

  3. #NULO# protocols — what's the within-firm pattern? (puzzle). Is the +13.8 pp on n=16 committee × #NULO# protocols concentrated in specific firms (consistent with firm-tier discipline gradient AN-018) or spread across many? If concentrated in low-volume firms, the funding-disclosure axis is collinear with the volume axis and adds no new mechanism. If spread evenly, funding-disclosure is a separable signal worth its own paper paragraph. Suggested script: an-NNN-nulo-funding-by-firm.py.

  4. Doações Eleitorais low-β puzzle (puzzle, low priority). Point estimate +3.0 (Spec A) / +5.8 (committee cell) is the lowest among declared categories, but n is thin (50 / 39) and CI overlaps the others. If this cell expands to 2× in the 2022 cycle, the "donor-funded polls are less biased" reading would emerge as a distinct mechanism (donor-side reputational stake) parallel to pollster-side reputation. Park until cycle extension ships.