Skip to content
August Brooks
Experiments

NC Money & Votes

Campaign contributions and legislative behaviour, built identification-first

Finding

In progress — no holdout look has been spent. The panel is built and its committee-mapping defect corrected; the referral-specific test that carries the hypothesis stays blocked until bill referral data lands.

Date
Status
In progress

This is a study in progress, and this write-up is a status rather than a result. No holdout look has been spent, no targeting statistic has been computed, and nothing here should be read as a finding about any donor or any legislator.

It exists because a prior project — the pre-registered null — closed with the conclusion that a state-level test could not separate the mechanism it cared about from regime type, and that the question needed different data, at a smaller scale, where identification is possible rather than a better index. This is that project. It inherits the prior infrastructure and none of its findings, thresholds, or specifications.

The unit, and the rule about what may be said

The unit of analysis is the legislator–bill. A row exists when a named member of the North Carolina General Assembly had the opportunity to act on a specific bill in a specific session. Every input is a public record: the legislator roster, the State Board of Elections committee registry and transaction disclosures, the General Assembly's own committee rosters and roll calls.

The reporting rule is binding and is enforced by a test rather than by discipline:

Published output is contribution records and vote records as they exist in the public data. No inference about any individual's motive appears in any output, chart, or summary.

Concretely: no motive-attributing field may exist in any output artifact — not as a column, a derived score, a label, a chart annotation, or a category name. A test enumerates a deny-list, walks every table written to either store and every artifact in the output directory, and fails on a match. It is written so that it fails when the tripwire is removed, not only when a bad column appears.

Aggregate statements about donors are permitted and are the point. "Donor X directed 78% of its legislative giving to members of the committee its bills were referred to" is a description of donor X's own disclosures. The step from that to a statement about what a member intended is the step this project does not take.

Two outcomes that do not depend on each other

Donor targeting asks whether contributions concentrate on legislative leadership and on the committees a bill must clear, relative to a null of proportional giving. It is a claim about donor behaviour and requires no causal claim about any legislator.

Vote association asks whether contribution history predicts roll-call position, conditional on party, district partisanship, and the member's own prior voting record.

The one-directional temptation — money targets gatekeepers, therefore money moves gatekeepers' votes — is a non-sequitur, and the two outcomes are built as separate tables, separate estimators, separate registered evaluations and separate reported results so that the non-sequitur has no place to hide.

The existing correlational literature reports ratios of the form "industries that gave the most received the most favourable votes", often around an order of magnitude. A ten-to-one ratio is exactly as consistent with money buying votes as with money finding legislators who already agreed. Identification is the whole project, and it was built first rather than bolted on.

Where the panel actually stands

Roster coverage narrowed the window to 2019–2025

The roster source is not uniformly complete across the panel, and the entity build measures rather than assumes it: for each session it counts distinct members per chamber against the constitutional chamber size and takes the worse chamber as binding. The threshold was declared in configuration before it was applied to any analytic decision.

SessionHouseSenateBindingUsable
2009108 (90%)49 (98%)0.900yes
201195 (79%)44 (88%)0.792no
201379 (66%)33 (66%)0.658no
201570 (58%)26 (52%)0.520no
201787 (73%)35 (70%)0.700no
2019106 (88%)44 (88%)0.880yes
2021125 (104%)49 (98%)0.980yes
2023126 (105%)51 (102%)1.020yes
2025124 (103%)53 (106%)1.033yes

Fractions above 1.0 are expected and are not capped — vacancies are filled by appointment, so more than 170 distinct people serve one two-year session.

The usable window is the longest contiguous run of complete sessions: 2019, 2021, 2023, 2025. A run rather than "every complete session", because a model fitted across a mid-panel gap would compare sessions whose rosters were built from different fractions of the chamber. This costs the project real power — four sessions, two on each side of the split — and the cost is stated rather than absorbed.

The committee-mapping defect concentrated on leadership

A legislator whose campaign committee cannot be resolved contributes no money at all to the panel. Whether that matters depends entirely on whether the failure correlates with the thing being measured, so the failure was measured against leadership status before it was fixed, and recorded whichever way it came out.

Over 677 in-window legislator-sessions:

GroupMappedRate
Not chamber leadership599 / 65291.9%
Chamber leadership17 / 2568.0%

A 23.9-point gap. Leadership was 3.9× more likely to be unmapped than a rank-and-file member. Fisher exact, two-sided: p = 8.7 × 10⁻⁴. By position the gap sat entirely in the elected floor leaders — the minority leader mapped 2 of 8, at 25%.

The verdict was blocking, not a caveat. The bias runs downward on every concentration statistic, and the outcome asks whether money concentrates on leadership. A null would have been uninformative rather than safe — exactly what a panel omitting a third of leadership's receipts produces whether or not the concentration is real. A positive would have been indefensible.

It was fixed by a curated override table, not by loosening the matcher

The matcher requires surname exact, suffix exact, and every given token matched. Widening any of those would have raised the mapping rate and traded a reported failure for a silent misattribution — the opposite of the trade this project makes everywhere else.

The concrete hazard is not hypothetical. Relaxing suffix equality would make PHILIP E BERGER, President Pro Tempore of the Senate, match PHILIP BERGER JR, a judicial candidate; and DAN BLUE, Senate minority leader, match DAN BLUE 3, a different candidate. Both pairs are father and son. Both would be merged, and the Senate leader's receipts would land on a judicial campaign, silently, with no report anywhere.

So 33 committee filings were resolved by hand instead, each evidenced on filing facts — jurisdiction scope, the office named in the committee's own title, filing address against the member's district, and the sessions in which the committee actually received money. Name similarity appears in no entry's justification.

GroupBeforeAfter
Not chamber leadership599 / 652 — 91.9%647 / 652 — 99.2%
Chamber leadership17 / 25 — 68.0%25 / 25 — 100%
Gap−23.9 points+0.8 points
Fisher exact, two-sidedp = 8.7 × 10⁻⁴p = 1.000

The correction was deliberately not stopped at leadership. Resolving the eight leadership rows alone would have left leadership at 100% against a rank and file at 92% — the same defect with its sign flipped, and flipped into the dangerous direction, since a panel covering leadership better than everyone else inflates every concentration-on-leadership statistic. The remaining in-window members were resolved in the same pass, and the test guarding this asserts the gap is small in both directions.

Five legislator-sessions remain unmapped, across three members. They are reported, not dropped.

Committee chairs: a provisional no-deficit finding

The chair-status result was originally recorded as provisional because it rested on a single session — the roster source's committee files carry no session dimension. Per-session rosters were subsequently acquired for all four in-window sessions, and the finding holds across the panel: chairs 347/350 (99.1%), non-chairs 325/327 (99.4%), a gap of −0.3 points, Fisher exact p = 1.000, with no session showing a deficit.

The original single-session caveat is kept in the record rather than deleted, because it is the reason the acquisition was attempted.

Acquiring it surfaced its own collision. The General Assembly numbers its members within each chamber: House member 389 is one person, Senate member 389 is another. Keying the crosswalk on the number alone makes every such pair look like one member holding two seats. This is the same shape as the country-code collision that silently swapped two countries' data in the prior project, in a different code space — and the member key is (chamber, id) for that reason.

What is blocked, and why it stays blocked

Gatekeeper definitionObserved inComputable now
leadership — Speaker, Pro Tem, floor leaders2019, 2021, 2023, 2025Yes
Any standing-committee chair or vice-chair2019, 2021, 2023, 2025Yes
referral_specific — chairs of the committees a donor's bills were referred toNo

referral_specific is the definition that carries the hypothesis, and it is blocked by bill referral data, which is unacquired. Knowing who chaired Finance in 2021 does not say which bills reached Finance.

No evaluation is being added to the registry to route around this. "Any standing-committee chair" is a weaker construct than the registered definition, and slipping it into the registered look would be answering a different question with a spent look. It is available as a training-store descriptive quantity and is reported as such — never as the registered outcome, and never on the holdout.

One thing already worth noticing before any statistic is computed: gatekeepers, defined as chairs and vice-chairs of any chamber standing committee, are 44.0%, 58.4%, 53.7% and 49.7% of serving members across the four sessions. A "gatekeeper" set containing half the legislature discriminates much less than the word suggests, which is precisely why the referral-specific definition is the one that matters.

If the referral data never arrives, that evaluation is reported as unspent with that reason — declared, not silently dropped, and not re-allocated to something else.

The commitment

The look budget is five evaluations, the set is closed, and each runs once. If donor allocation is indistinguishable from the declared nulls, that is the finding and it is reported. If contribution history adds nothing to the conditioning set, that is the finding and it is reported. If none of the three identification strategies yields usable variation, the vote-association outcome is reported as unidentifiable — not estimated with a caveat, and not estimated and hedged in the discussion.

That last outcome is a real and likely possibility, not a formality. Four sessions make it materially more likely than the design assumed, and that was written down before any count arrived, so that "the window was too short" is a prediction the design already made rather than an explanation constructed afterwards.