Today is the European Elections in the UK, and (to my mild surprise) a lot of election-related hashtags are trending on Twitter. However, a lot of people still seem rather apathetic about voting. This voter apathy is far less justifiable in the European Elections than UK domestic elections (though frankly is unacceptable in either case), simply because of the voting system used, which is proportional representation.

## Proportional Representation

You may recognise this phrase from the referendum that the Lib Dems demanded so that they would form the current Conservative-Liberal coalition, and then lost. The European elections work on the basis of proportional representation, which is not the same as UK domestic elections, which operate on a first-past-the-post basis. Specifically, European elections in the UK use the D'Hondt method which seems awkward to calculate at first blush - but in fact, it's so easy to calculate, it can be done in five lines of Python.

In [1]:
from __future__ import division
import numpy as N
import matplotlib.pyplot as plt
import scipy.optimize

#NB undefined behaviour in the event of exact tiebreaks.
#I actually couldn't find how the tiebreaks are settled (whether they go to the least
#or most already-represented party) in the EU, so didn't sweat it.
while N.sum(result) < nSeats:
result[maxLoc]+=1
return result


Let's check this gives us the same answer as the example on Wikipedia.

In [2]:
baselineVotes = N.array([100000,80000,30000,20000])

[ 4.  3.  1.  0.]



Looks good. Note that party 4 is achieving zero seats. Okay, so now let's take the same voting population, but we somehow mobilise another few thousand voters. They all vote for party 1, who is winning. As we mobilise more voters, what effect do we have on the results of the election?

In [3]:
additionalVotes = N.arange(1,50000,1000)
offset = [-0.075,-0.025,0.025,0.075]
results = []
plt.ylabel("Number of seats awarded");


As expected, when enough extra people start voting for party 1 (about 33000), they get one more seat, taking a seat from party #2. This seems reasonable for an election. What if these extra mobilised voters start voting for party 4 instead, who have no seats with our original election result?

In [4]:
additionalVotes = N.arange(1,50000,1000)
results = []
plt.ylabel("Number of seats awarded");


Party #2 - the one labelled in green - has still lost its seat once 33000 new voters have been mobilised. However, party #4 claimed their first seat once they reached only 5000 extra voters, claiming it from party #1.

## Conclusions

Hopefully, this toy example has demonstrated why it is important to vote in these European elections, for two reasons:

• If you want to vote for a small party, your vote is more valuable to them than it is to one of the bigger parties - 34000 extra votes, in this example, took party #1 from four to five seats, but took party #4 from zero to two seats.
• If you disagree with the views of a small party, then your vote is needed to count against the votes of their supporters. If you're voting for an established party, that party needs two, three or even more votes to outweigh a single vote for a smaller, perhaps more extreme, party.

This may seem trite on reflection, but the point is that no matter the size of party that you're voting for, your vote is valuable to them, and this is more true today than it will be in the general election next year.

Note that the effects of additional voters here are dependent on the initial number of votes for each party, which I just took from the example on Wikipedia. The qualitative conclusion is still valid, however - any party that you vote for sees your vote as especially valuable, today!