A tabulator for comparing ranked methods on real ballot data
Shel Kaphan via Election-Methods <[email protected]>
| Newsgroups | gmane.politics.election-methods |
|---|---|
| Message-ID | <[email protected]> |
I've built a free site for tabulating and analyzing ranked-ballot elections, at https://rcv-lab.org <https://rcv-lab.org/>. It's mine, so treat this as a disclosure rather than a recommendation. I'm posting here because this list will find the edge cases faster than anyone, and I'd rather hear about them. Two things in it are likely to interest this list specifically. 1. (OPTIONALLY): EQUAL RANKINGS, OR: SHARED, WEIGHTED, RANKED APPROVAL The cleanest statement of what a ballot is here is a sequence of approval sets in priority order. The ballot's entire weight goes to the highest-priority set that still has surviving candidates, divided equally among the members of that set. When every candidate in a set has been eliminated, the whole weight moves to the next set down. Candidates in a lower set receive nothing while any candidate in a higher set is still standing. The invariant that matters: at every stage the ballot contributes exactly one vote, held entirely within a single tier. That is the answer to the usual objection to equal rankings — this is the fractional variant, not the whole-vote variant in which a ballot ranking three candidates equally contributes three votes to a round. With a single rank the system reduces to weighted approval: one vote shared among the approved candidates, which is the same tally as equal-and-even cumulative voting. That case is a first-class method in the app, listed as "Approval (split vote)". Conventional approval is implemented on top of it, by scaling each ballot's weight back up by its approval count — so the shared-vote form is the engine's native primitive and unweighted approval is the special case that needs extra work. This is not Bucklin. In Bucklin a ballot's lower ranks are added while its higher-ranked candidates are still in the running, so one ballot can support several candidates at once. Here the weight only ever occupies one tier at a time. The same rule carries into STV surplus transfers. The voting interfaces let voters actually do this, which as far as I know is unusual — most implementations accept equal rankings only as a CVR-parsing rule. 2. PAIRWISE ANALYSIS ON EVERY TABULATION Alongside the count, each election reports a pairwise matrix and the iterated Smith sets — the Smith set, then the Smith set of the remainder, and so on — as an ordered partition of the candidates. Semantics: co-ranked candidates are mutually indifferent; a ballot's ranked candidates are preferred to every candidate it leaves unranked; unranked-vs-unranked contributes nothing. Exact pairwise ties merge tiers so the ordering stays total. Every pairwise result also reports how many ballots expressed no preference on that pair, which makes truncation visible rather than assumed. No completion rule is implemented. When the top tier is a cycle the site names the members and stops. I'd rather report a cycle than pick among completion rules that disagree precisely where it matters. I expect that to be the most arguable decision here, and I'm interested in the argument. Otherwise: IRV, STV under Meek or WIGM, Droop or Hare quotas, several termination and tie-break modes, and single-round methods (plurality, approval, cumulative) for comparison. Two rule sets can be run against the same ballots side by side. Ballot data comes in as Google Forms CSV exports, ES&S spreadsheets, generic CSV, BLT, or NIST CDF. RCTab interoperation runs both ways: config files are read and written, so a rule set moves between the two systems intact, with a compatibility check that flags rules RCTab cannot express — equal ranking among them. RCTab summary output (the detailed report) is likewise both read and written, so a count done elsewhere can be visualized here and a count done here can be taken away. Results can also be cross-checked against a copy of RCTab running as a service, and cast vote records are downloadable so anyone can re-run a count independently. The sample library has real elections (Maine 2018, Portland ME 2015, Minneapolis Park Board) preloaded. What I'd most value is being told where the tabulator is wrong — transfer arithmetic, quota handling, exhaustion accounting, or the equal-ranking semantics above. ---- Election-Methods mailing list -- [email protected] - see https://electorama.com/em for list info