Saturday, 30 May 2009

The voting system at EU elections - the 'multi-member constituency'

This week's Fun Online Poll shows a clear preference for multi-member constituencies (only a minority support staying with first-past-the-post, see in particular these results). As it happens, multi-member constituencies form the basis of the d'Hondt voting system which is used for the elections to the EU Parliament, due again next Thursday, 4th June 2009, so we can cover both topics in on go.

(AFAIAA, the EU elections work on the basis of party lists, but this is not necessary. We could tweak it that each party puts up as many named candidates as it wants and everybody votes once for a single, named candidate, with each party's seats being allocated to their candidates in order of the number of votes they achieved personally.)

It's quite a neat system, actually, but the way the system is usually explained, while correct, is rather tortuous, so here's my crash-course in forecasting the results for any particular UK constituency, using the likely vote shares reported by PoliticalBetting a couple of weeks ago*:

1. Set up a spreadsheet, with parties and their votes in the left hand column (total votes do not add up to 100%, but that's the way they were reported). You don't have to arrange them in descending order, but it makes it a bit easier later on.

2. Type in the numbers 1 to 6 across the top of the columns, which is enough to cover most constituencies (unless the leading party gets a much, much larger share of the votes cast).

3. Divide each party's votes by the number in the top of each column (for example, Lib Dem, get 14% of the votes, so the result in the column headed '4' is 3.5%. Whether you use 14% or 140,000 votes out of 1,000,000 is irrelevant).

4. Allocating seat is then easy - you just look for the biggest X numbers, where X is the number of seats in the constituency. I've allocated the first ten seats because the largest UK constituency at the EU elections (the 'South East', excl. London) has ten seats (pdf); Northern Ireland and the North East, with much smaller populations only have three each. I've shaded the ten biggest numbers grey to make it easier to visualise:

The Tories get the first seat (28%); Labour get the next one (20%); then UKIP (15%); the next two go to the Tories and Lib Dem (14% each); then Greens (11%); then Labour (10%); then Tories (9.3%); then UKIP (7.5%); and finally Lib Dem (7%, assuming they manage to just pip the Tories by a fraction of a per cent).

Final result:
Tories: 28% of the vote, 30% of the seats
Labour: 20% of the vote, 20% of the seats
UKIP: 15% of the vote, 20% of the seats
Lib Dem: 14% of the vote, 20% of the seats
Greens: 11% of the vote; 10% of the seats

This worked example produces a 'fair' result, but noticeably 'fairer' to the Lib Dems than anybody else (unless the Tories had just beaten them to the final seat, in which case the Tories would have been laughing), but that's the fun part - smaller parties prefer larger constituencies (the more seats there are, the closer the relationship between % share of the vote and % share of the seats) but it helps you, relatively speaking, if your party is awarded the final seat...

For example, in this constituency, it would have suited UKIP if there were only three seats (they would have achieved 33% of the seats for only 15% of the vote) and it would have suited  Labour if there were only six seats (they would have achieved 33% of the seats with only 20% of the vote). With the benefit of hindsight, the Tories would have preferred the constituency to only have five seats (in which case they would have achieved 40% of the seats for only 28% of the votes), and so on.

I expect to spend the evening of Sunday 7 June in front of the telly with a lap-top while I process all this in real time.

I trust that this is of assistance, and remain.

* The results published today are far more interesting...

11 comments:

Morus said...

I must confess Mark, I tend to cheat and use an online calculator: http://icon.cat/util/elections

We're going to be covering the Euro results (both UK and abroad!) in quite some detail, so I hope you'll join us.

Morus

Vindico said...

Mark, I will be in the candidates room at the South East declaration in Southampton on Sunday June 7th. I am planning to live-blog the results on IndHome as they come in.

Mark Wadsworth said...

V, all I need to work out is how to get the spreadsheet to highlight the best X results (using conditional formatting or something), the rest is a doddle.

gordon-bennett said...

MW: Here's a website which might interest you.

http://www.jdawiseman.com/index.html

gordon-bennett said...

I suggest that you write a macro to process your table.

Have a sheet with all possible party names for all constituencies in the Party column (the "home sheet").

For a given constituency, enter the Votes %ages against the names of the parties competing in the constituency.

Run the macro.

The macro asks for the number of seats in the constituency, sorts the home sheet table into ascending order of votes %ages, sorts the X values on another worksheet, counts the top values by Party and puts the result back on the home sheet.

Something like that, anyway.

Mark Wadsworth said...

GB, that's a good website, thanks. I might just about manage a speadsheet like that by next Sunday, but no doubt one already exists. The tricky bit is telling the spreadsheet how to calculate the 'cut-off' for the last MEP (in the worked example, 7% gives the right answer).

gordon-bennett said...

Taking your spreadsheet, what you need to do is to append the values in col "2" to those in col "1", then append col 3 that col and so on for all 6 cols.

Make a 2 col array where the first col is the numbers 1 to 36 (=coords in your spreadsheet) and the second col is the new col (from above, with the appended cols).

Sort the array in descending order of X value. Take the top 10 values and highlight the cell in your spreadsheet pointed to by the coordinates beside that number.

When you do the sort the 7% X value will be in 10th place.

It's probably easier to write the macro than it is to explain (especially since it has to be more generalised than your example) so I'll do that and email it to you Sun or Mon.

Mark Wadsworth said...

G-B, thanks, I look forward to that. I did one just know (as the kids are hogging the telly) using brute force, as follows:

Step 1. You have a space on the spreadsheet to enter the required number of successful candidates, where you type in a number between 3 and 10.

Step 2. Set up a long column of %ages (from 5% to 25%, adding 0.25% each time).

Step 3, in the next column do a "countif" for how many variables in the box are > than that %age.

Step 4. The next column uses "if" to choose the lowest %age (from Step 2) which produces the desired result of the "countif" formula (in step 3), i.e. is equal to the 'required number of successful candidates number' (from Step 1).

Step 5. Do conditional formatting on the cells, so that all cells larger than the %age derived (from Step 4) are coloured grey (you could be really funky and have Tory MEPs coloured blue, UKIP purple and so on ...)

Paul Lockett said...

This is slightly "after the horse has bolted," but I've written a javascript calculator for Closed List Elections (to go alongside the STV calculator I already had).

It works using number of votes rather than percentages. It's at http://paul-lockett.co.uk/closedlist.html. I've checked it against some of the Euro results and it's come out with the same answer every time.

Now, I just need to produce one for open lists, which might be a bit trickier!

Mark Wadsworth said...

PL, excellent work, but can you shift the 'final result' bit to the top? And/or display it graphically like I did in the post (with grey shading for the winners)?

Paul Lockett said...

Leave it with me. Moving the result to the top should be easy enough. Presenting it graphically should be doable with tables but it might take me a while to work out how.