The idea behind this project is to see how a proportional representation (PR) system would have altered results in the 2019 UK general election. The plan is to merge neighbouring constituencies in the UK into 'super' constituencies with 2 / 3 / 4 / etc of them merged together into a larger one and use the D'Hondt method to allocate seats in this 'super' constituency.
After the 2019 UK general election an article appeared in Wales online suggesting that if the UK adopted a PR system the seat allocation of parliament would look as follows:
The seat numbers under PR were calculated by multiplying the percentage of votes of votes obtained by each politcal party by the total number of seats in the UK parliament, which is 650 (note that the percentages used in these calculations have since been revised see here). These figures are based on a very simple nationwide PR system but there are certain caveats, most notably it has not included a a minimum threshold, below which any party cannot be allocated a seat. This can vary but if it were set at 5% nationwide then that would remove 74 seats from the above analysis (including all SNP seats). There could be some 'regional' allowance for the SNP, Plaid Cymru and the parties in Northern Ireland to be allocated seats, however it would still likely mean that there would be no MPs from the Green party.
In addition the UK has the tradition of a link between constituents and their constituency MP rather than being allocated by a party list, so a nationwide PR system would not be considered. Of course there are other PR system that do have a link between a constituency and its MP, e.g. Mixed member proportionality in New Zealand, or the German voting system. However we cannot apply the results from the UK general election to these systems as they require a second vote, which is not available as each member of the UK electorate gets a single vote in their elections.
During elections for the European Parliament there was a PR system used whch only allowed one vote, the D'Hondt method, whereby large regions of the UK had multiple MEPs and they were allocated to parties over several rounds by dividing the votes a party received by the number of MEPs already allocated (see the wikipedia page for more details and examples).
An initial thought was to apply the D'Hondt method to the results of the UK general election, aggregating the results from the constituencies by their statistical regions, however this was not considered further for two reasons:
- we would still have a large region (e.g. London has 73 MPs) so it would be difficult to 'know' your local MP.
- it would also be too easy to calculate and we were looking for a more meatier project!!
Another method that could have been considered is if each constituency had 2 / 3 / 4 / etc MPs that could be allocated then what would the make-up of parliament have been if we applied the D'Hondt method to each constituency. This was not considered since it would have required doubling / tripling / etc the number of MPs.
The method that is going to be used is as follows:
- rather than applying the D'Hondt method to an entire statistical region of the UK we will form sub-regions, neighbouring constituencies will be 'merged' from 2 / 3 / 4 / etc constituencies in the same statistical region.
- the results from these merged constituencies will be aggregated and the D'Hondt method will be applied to these merged constituencies.
- as the merging process will be a random process we will run the above steps repeatedly.
Whilst multiple MPs for a constituency might seem controversial it has a long history in the UK parliament with multi-member constituencies only being abolished in 1948. For example, at the 1945 general election 39 MPs (out of 640) represented multi-member constituencies source and for much of the 18th and 19th Century the City of London constituency returned 4 MPs source.
To form the merged constituencies we will use the Exact Cover problem and Knuth's Algorithm X to solve it. Note that we will use a PyPy kernal to run Algorithm X as it ran much faster, hence you will need to use the Dockerfile in the 'AlgorithmX' folder set it up. Note that the initial analysis and results will be held in the 'Analysis' folder which uses a standard Python 3 kernel.
Resources used in this project:
- The shapefiles were obtained from data.gov.uk.
- Election results were taken from the R package
parlitools. - David Goodger code and Bjarki Ágúst Guðmundsson code to implement Knuth's Algorithm X.
Final results are given in the pdf presentation in the 'Analysis' folder (which was presented at PyData Global 2020).
