Directional support for M5 on the routes where AN-074 said repeats = tracking contracts, not statistically conclusive: committee disclosure rate = 63.3% (repeat) vs 71.7% (singleton), gap −8.4 pp, χ² p = 0.12; CPF 42.9% vs 63.6%, gap −20.8 pp (n=14+11, p=0.53); party essentially zero gap; party-name +7.4 pp (REVERSED — repeats more disclosed, n=69+80, p=0.29). The party-name pattern fits the relational reading (campaigns repeatedly using a firm they trust to publish); the committee + CPF patterns fit M5. Joint evidence: AN-074's time-gap diagnostic (committee 12% > 30d, party-name 87% > 30d) + AN-077's β gap pattern (only contract-routes show gap) + AN-078's directional disclosure pattern align coherently. M5 wins the weight-of-evidence test on the committee route, not the knockout test.

Confidence
yellow
Type
descriptive
Design
Sample
793 candidate-sponsored protocols (poll_sponsor_2024.parquet filtered to sponsor_candidate_party non-null, deduplicated to protocol-level), with within-route dyad_kind per AN-077 logic and is_disclosed = protocol present in poll_response_2024.parquet (the extracted/disclosed subset of registered polls)
Specification
Per route × dyad_kind, disclosure rate = (# protocols in poll_2024) / (# candidate-sponsored protocols). Chi-square test of independence per route; also report Δ = rate(repeat) − rate(singleton).
Comparator
marginal disclosure rate by route
Notes
M1-vs-M5 discriminator on AN-077's committee +7.43 pp repeat-singleton gap. If committee_repeat disclosure rate << committee_singleton rate, M5 (selective publication of favorable tracking-poll waves) is the active mechanism — the high β on disclosed committee_repeat polls is cherry-picked. If disclosure rates similar, the committee gap is more likely structural or relational (M1). Important caveat: 'in poll_2024' means 'relatório PDF filed AND extraction succeeded'; the 'not in poll_2024' set conflates campaign withholding (M5) with extraction failure (data quality). The signal should still be informative if the gap is large.
Script
source/analysis/an-078-disclosure-rate-by-route-dyad.py
Target
build/table/an-078-disclosure-rate-by-route-dyad.csv
Status
interpreted · 2026-06-16
Created
2026-06-16

Question

AN-077 found β_committee_repeat = +14.17 pp vs β_committee_singleton = +6.75 pp (gap +7.43 pp), but AN-074 showed committee repeats are mostly single-campaign multi-wave tracking contracts (median time-gap 11 days, only 12 % > 30 days). Two readings:

The discriminator: does the disclosure rate differ between repeat and singleton dyads on the committee route? If disclosed-committee_repeat is < 100 % while disclosed-singleton is much higher (because singletons are commissioned and released unconditionally while tracking-contract waves are filtered), the M5 mechanism is operating.

Design

source/analysis/an-078-disclosure-rate-by-route-dyad.py:

  1. Load 793 candidate-sponsored protocols from poll_sponsor_2024.parquet.
  2. Compute within-route dyad_kind per AN-077 logic.
  3. Mark is_disclosed = protocol present in poll_response_2024.parquet (the registry's extracted-and-disclosed subset).
  4. Cross-tabulate disclosure rate by sponsor_route × dyad_kind.
  5. Chi-square test of independence per route.
  6. Report Δ_route = rate(repeat) − rate(singleton).
  7. Plot per-cell disclosure rates with 95 % Clopper-Pearson CIs.

Results

Disclosure rate by route × dyad

Route Repeat n / disclosed / rate Singleton n / disclosed / rate Gap χ² p
CPF 14 / 6 / 42.9 % 11 / 7 / 63.6 % −20.8 pp 0.53
Committee 98 / 62 / 63.3 % 463 / 332 / 71.7 % −8.4 pp 0.12
Party 19 / 12 / 63.2 % 39 / 25 / 64.1 % −0.9 pp 1.00
Party-name 69 / 62 / 89.9 % 80 / 66 / 82.5 % +7.4 pp 0.29

The overall candidate-sponsored disclosure rate is 72.1 %.

The committee gap of −8.4 pp has z ≈ 1.65 (two-sided p ≈ 0.10) — directionally consistent with M5 selective publication, falling short of conventional significance. The CPF gap is larger (−20.8 pp) but with n=14+11 is statistically uninformative. Party-name shows a reversed gap (+7.4 pp — repeats more disclosed than singletons), consistent with the relational reading (campaigns repeatedly use a firm they trust to publish).

Interpretation

The discriminator is directionally aligned with M5 on the routes where AN-074 said repeats = single tracking contracts (committee and CPF), and reversed on the route where AN-074 said repeats = separate decisions (party-name). Joint reading:

Route AN-074 time-gap signature AN-077 β gap AN-078 disclosure gap Coherent mechanism
Committee tracking contract (12 % > 30 d) +7.43 pp −8.4 pp M5 — selective publication
CPF tracking contract (50 % only 1 dyad timed, +84 d) +2.61 pp −20.8 pp M5 directional, n thin
Party mixed (60 % > 30 d) −1.27 pp −0.9 pp (no signal)
Party-name separate decisions (87 % > 30 d) −0.60 pp +7.4 pp relational (M1-individual) candidate

The cross-route pattern is internally consistent in a way that strengthens the M5 reading for committee beyond what the χ² p = 0.12 would suggest in isolation. Three independent signals (time-gap → contract structure; β gap → only on contract routes; disclosure gap → directionally lower on contract routes) line up.

Net update on the enforcement-puzzle ranking: M5 / publication option / contract-structure remains the leading reading of the committee +7.43 pp β gap. M1-individual relational gets a very weak positive signal at party-name (+7.4 pp disclosure gap in the relational direction) but n=69 + 80 with χ² p = 0.29 is too thin to anchor anything on. The headline ranking is unchanged: M4-leaning for the CPF +19, M5-leaning for the committee +7.43.

Caveats:

Follow-ups

  1. Refine the disclosure indicator (extension): separate PDF-filed from extraction-success. A protocol that registered but never filed a relatório is unambiguously campaign-side withholding; a protocol that filed a relatório but extraction failed is data-quality. The relatório PDF list is available on bi-dropbox:data/TSE/2024/pesquisa_eleitoral/relatorios/ per docs/summary.md. Refining the indicator would let us test M5 cleanly. ~1 hour to wire up.

  2. The party-name +7.4 pp reversed gap deserves a closer look (puzzle): party-name repeats are the "purest" M1-individual case in the data (87 % gap > 30 d, n=69 repeats), and they show higher disclosure rate than singletons — the relational story would predict this. The n is too thin to conclude, but a one-page descriptive write-up of the party- name repeat dyads (which firms, which candidates, what's the firm-level β) might surface a relational pattern AN-077's pooled β missed. ~30 min.

  3. Selective publication × β interaction (extension): if M5 is operating, the β coefficient on disclosed repeats should be biased UPWARD relative to a counterfactual with full disclosure. Construct bounds: assume the non-disclosed committee_repeat polls (36 protocols) had β = 0 or β = the committee average (~7 pp), recompute the disclosed β adjusted for selection. The Lee bounds or Imbens-Manski bounds give the M5-attribution magnitude formally. ~1 hour.

  4. Heuristic tracking-contract flag (extension, already on todo): build the "≥ 3 polls in 60 days from same firm for same candidate" indicator. Useful cross-cut with AN-078's disclosure rate. ~30 min.

  5. 2020 cross-cycle data is still the unblocker. Without it, the M1-individual story can't be cleanly identified anywhere. AN-077 + AN-078 jointly close the within-cycle inquiry — the next major sharpening test requires 2020 sponsor data.