[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Some vote analysis

Hello world,

(Hrm, vote.debian.org has the 2005 elections out of order on the sidebar)

Anyway. I think it's always interesting to analyse the voting a little beyond just "who won". Anyway, some (IMHO) interesting implications from this vote.

First, in spite of some quite disparate choices, and a fairly close contest between three or four candidates, we've /still/ avoided any circular ties in each of our 16 elections/polls. I'm pretty sure the predictions I've seen suggested that there'd be a circular tie in one out of every five or ten elections, but really we should've come across one by now if so. AIUI, the predictions are made assuming people vote randomly, and of course there needs to be a reasonable number of options to choose between for the probability to be high, but whatever it is that influences the choices to not be random even in close elections is intriguing.

NOTA did particularly well this year: last year NOTA received 258 votes over Gergely, 70 of Branden, and 26 over Martin. This year NOTA received 337 votes over Jonathan, 184 votes over Gus, 120 votes over Andreas, 107 votes over Branden, 101 votes over me, and 75 votes of Matthew. The only previous candidates who received over 70 votes below NOTA were Gergely ("my Tamagotchi made me do it") and Moshe ("I promise to do nothing"). Even Anand, who didn't post a platform or participate in campaigning when he nominated in 2001 got under 70 votes below NOTA (though only 311 people voted all up). So it seems like there's a lot unhappiness with even the least controversial of the candidates this year.

With as many choices as we had, it's also interesting to look at how many people voted in the same way. As it turns out: not many. Of 504 voters, there were 390 different ballots submitted -- even ignoring ballots like [------1] and [2222221] being the same. The most common ballots was [--12---], and even it was only submitted by 10 people. 224 people expressed full preferences (numbering each choice differently) which isn't quite half; 308 people expressed almost full preferences, just giving two choices equal eight.

There're a whole bunch of different voting systems we could've used. Here's what might've happened if we had.

First past the post (ie, just vote [1]), a la US elections and straw polls would've gotten us the same rankings, modulo Angus and NOTA getting reversed:

 	144 122 Branden Robinson
	136 121 Anthony Towns
	133 118 Matthew Garrett
	 91  75 Andreas Schuldei
	 21  19 NOTA
	 13  11 Angus Lees
	  4   4 Jonathan Walther

(first column just counts the number of [1]'s each candidate got, the second discards ballots that marked a couple of candidates equal first)

IRV (ie, vote full preferences, then discard the candidates who got the least votes and redistribute them based on preferences, 'til someone has >50% of the votes) gives something like:

	Jonathan:   4--------------------
	Matthew:  118     120 132 146----
	Branden:  122 124 126 128 179 245
	Anthony:  121     125 126 148 222
	Angus:     11     ---------------
	Andreas:   75  76      77--------
	NOTA:      19      22------------

Those numbers probably don't add up quite right, since the possibility of ranking two candidates equally confuses things. In normal IRV elections (at least in .au), they just throw your vote away when they get to that part.

So that's at least pretty reassuring: we've got a clear Condorcet result, and if we'd used either of the other fairly sane vote countings systems, we'd likely have got the same result.

Not all systems manage that though. Approval voting -- where you give a tick to every candidate you find acceptable -- could've given a range of different winners. If you assume people would've just ticked the people they voted [1], then Branden wins as above. If you assume that people would've ticked everyone they voted above NOTA, then I'd've won with 390 votes, beating Matthew on 384 votes and Branden on 376. If you assume that people would've ticked everyone they voted equal or above NOTA, then Matthew would've won with 429 votes, beating me on 403 votes, and Branden on 397 votes. More likely, something more complicated would've happened, and the result isn't predictable.

The Borda count method, where every [1] vote counts as 6 points, and every [7] vote counts as 0 points, gives results something like:

	2231 4.42 Matthew
	2207 4.37 Anthony
	2202 4.36 Branden
	2045 4.05 Andreas
	1499 2.97 Angus
	1344 2.66 NOTA
	 900 1.78 Jonathan

First column is raw totals, second is total divided by number of votes -- ie, an average score. Subtract from 7 for an average ranking.

But again, it's not meant to deal with equal rankings, so there's some fudge factor involved there -- eg, someone who votes [1111112] gives NOTA more points than someone who voted [1235674], even though the latter vote ranks NOTA higher than the first.

Another interesting question, especially given we had two candidates who were planning on working together to lead Debian should either be elected, is how closely together candidates were ranked. If you count two candidates as "clones" if no one voted any other candidate in between them (but possibly with NOTA in between them), then the following candidate pairs were "clones" in some sense:

	359 Walther/Lees
	329 Robinson/Schuldei
	281 Garrett/Towns
	276 Lees/Schuldei
	274 Garrett/Schuldei
	273 Robinson/Towns
	271 Towns/Lees
	260 Garrett/Lees

The number on the left is how many voters (out of 504) ranked the two candidates together. The order on the right is the ballot order. Average distance between candidates was:

	JW   MG   BR   AT   AL   AS
JW	-
MG	2.76 -
BR	2.81 1.93 -
AT	2.72 1.76 1.90 -
AL	1.52 1.83 2.19 1.89 -
AS	2.59 1.80 1.46 1.92 1.83 -
NO      1.63 2.19 2.50 2.43 1.39 2.21

With fairly similar results.

Attached is my "canonize" script that converts votes into a canonical form (ie [1137---] -> [1123---]) for easy comparison/manipulation.

#!/usr/bin/perl -w

use strict;

while(<>) {
	next unless (m/^V:\s+([0-9-]+)(\s.*)?$/);
	my $x = $1;

	$x =~ s/-/8/g;
	my $i = 1;
	for my $j (1..8) {
		next unless ($x =~ m/$j/);
		$x =~ s/$j/$i/g;
	print "V: $x\n";

Reply to: