Majoritarian elections · 🗳️

Author

Holger Döring

Published

July 13, 2024

Code
library(conflicted) # create errors for function name conflicts

library(tidyverse)
conflicts_prefer(dplyr::filter, .quiet = TRUE)
library(knitr) # layout // tables in RMarkdown with kable()

ggplot2::theme_set(theme_minimal())
options(scipen = 999) # suppress scientific notation

library(patchwork) # plots  // arrange
library(reactable) # layout // interactive data tables

UK 2024 election

Photo by Kristina Gadeikyte on Unsplash

In the 2024 United Kingdom general election Labour won a 33.7% vote share and gained a 63.2% seat share. Compared to the 2019 UK election, it increased its vote share by 3.2% and its seat share by 27.3%.

Majoritarian electoral systems convert votes into seats disproportionally and provide a seats bonus for the winning party. However, the votes-seats ratio of the Labour party in the 2024 election is rather high.

Among more than 600 majoritarian elections in democratic regimes between 1900 and 2020 it is one of the highest votes-seats difference (see below).

Here, I provide a brief overview of the votes-seats translation for majoritarian electoral systems (first-past-the-post and two-round) in democratic regimes, following the V-Dem classifications.

For some background on electoral systems around the world, see the notebooks about types and evolution of electoral systems since 1900.

Code
elec_raw <- read_csv("data/uk-election-2024_bbc.csv")

pl_dt <-
  elec_raw |>
  mutate(
    seat_share = round(seats / 650 * 100, 1), # total seats UK Parliament: 650
    party = fct_reorder(party, vote_share)
  ) |>
  filter(vote_share >= 2.5)

party_colors <- c(
  "Lab" = "#E91D0E",
  "Con" = "#0575C9",
  "R-UK" = "#12b6cf",
  "Lib" = "#FF9A02",
  "Green" = "#99CC33",
  "SNP" = "#0AD1E0"
)

pl1 <-
  ggplot(pl_dt, aes(x = vote_share, y = party, fill = party)) +
  geom_col() +
  xlim(0, 60) +
  scale_fill_manual(values = party_colors) +
  labs(y = NULL) +
  theme(legend.position = "none")

pl2 <-
  ggplot(pl_dt, aes(x = seat_share, y = party, fill = party)) +
  geom_col() +
  scale_fill_manual(values = party_colors) +
  labs(y = NULL) +
  theme(axis.text.y = element_blank(), legend.position = "none")

pl1 + pl2

V-Party data

Election results are from V-Party (v2) and electoral systems classifications from V-Dem (v11.1).

For the analysis, election results are selected for all majoritarian electoral systems (first-past-post and two round) in democratic regimes since 1900 (V-Dem classifications).

Code
callr::rscript("data-raw.R")

UK elections

Con · Lab · Lib

UK election results for Conservatives, Labour, and Liberals from 1900 to 2024 with 2024 results added from BBC News.

Code
uk_3 <- read_csv("data/uk-elections_top-3_vparty.csv")

Seat and vote share of three main parties in the UK.

Code
pl <-
  ggplot(uk_3, aes(x = year, color = party)) +
  geom_line(aes(y = seat_share)) +
  geom_point(aes(y = seat_share, shape = "Seats")) +
  geom_line(aes(y = vote_share), alpha = 0.3) +
  geom_point(aes(y = vote_share, shape = "Votes"), alpha = 0.6) +
  labs(x = "Year", y = "Share (%)", color = "Party", shape = "Share") +
  scale_color_manual(values = party_colors) +
  scale_shape_manual(values = c("Seats" = 16, "Votes" = 1))

ggsave("figures/elections-uk.png", plot = pl, width = 10, height = 6, dpi = 300)
pl

Votes-Seats differences

Two highest seat share gains through positive votes-seats ratio by party.

Code
uk_3 |>
  slice_max(order_by = share_diff, n = 2, by = c(party)) |>
  select(party, year, share_gain = share_diff, seat_share, vote_share) |>
  arrange(party, desc(share_gain))
party year share_gain seat_share vote_share
Con 1931 21.4 76.4 55.0
Con 1924 19.8 67.0 47.2
Lab 2024 29.7 63.4 33.7
Lab 2001 21.8 62.5 40.7
Lib 1906 15.2 59.7 44.5
Lib 1910 -0.3 40.4 40.7

Seat share losses through negative votes-seats ratio.

Code
uk_3 |>
  slice_min(order_by = share_diff, n = 2, by = c(party)) |>
  select(party, year, share_loss = share_diff, seat_share, vote_share) |>
  arrange(party, share_loss)
party year share_loss seat_share vote_share
Con 1906 -17.2 19.6 36.8
Con 1910 -7.2 33.4 40.6
Lab 1931 -22.2 8.5 30.7
Lab 1935 -12.9 25.0 37.9
Lib 1983 -22.8 2.6 25.4
Lib 1987 -20.0 2.6 22.6

Share changes

Two highest vote share gains compared to previous election and seat share change by party.

Code
uk_3 |>
  slice_max(order_by = vote_change, n = 2, by = c(party)) |>
  select(party, year, vote_change, vote_share, seats_change, seat_share)
party year vote_change vote_share seats_change seat_share
Con 1931 16.8 55.0 34.1 76.4
Con 1924 9.2 47.2 25.0 67.0
Lib 1983 11.6 25.4 0.9 2.6
Lib 1923 11.2 29.7 15.6 25.7
Lab 1918 13.8 20.8 1.8 8.1
Lab 1945 10.1 48.0 36.4 61.4

Vote share losses and seat share change.

Code
uk_3 |>
  slice_min(order_by = vote_change, n = 2, by = c(party)) |>
  select(party, year, vote_change, vote_share, seats_change, seat_share)
party year vote_change vote_share seats_change seat_share
Con 2024 -19.9 23.7 -37.4 18.6
Con 1945 -11.5 36.2 -32.1 30.8
Lib 1918 -27.7 13.0 -35.3 5.1
Lib 1931 -17.1 6.3 -4.4 5.2
Lab 1983 -9.3 27.6 -10.2 32.2
Lab 2019 -7.8 32.2 -9.1 31.2

Majoritarian systems

Nine countries

Votes-seats differences for the two largest parties in an election.

Nine countries with the highest number of majoritarian elections are presented.

Code
top_2 <- read_csv("data/majoritarian-elections_top-2_vparty.csv")
Code
ctry_count <-
  top_2 |>
  distinct(country, year) |>
  count(country, sort = TRUE)


pl <-
  top_2 |>
  filter(country %in% ctry_count[["country"]][1:9]) |>
  ggplot(aes(x = year, color = rank)) +
  geom_line(aes(y = seat_share)) +
  geom_point(aes(y = seat_share, shape = "Seats")) +
  geom_line(aes(y = vote_share), alpha = 0.3) +
  geom_point(aes(y = vote_share, shape = "Votes"), alpha = 0.6) +
  labs(x = "Year", y = "Share (%)", color = "Party", shape = "Share") +
  facet_wrap(vars(country_name))

ggsave("figures/elections-majoritarian.png",
  plot = pl, width = 10, height = 6, dpi = 300
)
pl

Votes-seats

Votes and seats share differences in majoritarian democratic elections.

Code
vparty_elec <- read_csv("data/majoritarian-elections_vparty.csv")

pl1 <-
  ggplot(vparty_elec, aes(x = vote_share, y = share_diff, colour = elec_sys)) +
  geom_point(alpha = 0.3) +
  guides(colour = "none")

pl2 <-
  ggplot(vparty_elec, aes(x = share_diff, colour = elec_sys)) +
  geom_histogram()

pl1 + pl2 + plot_layout(widths = c(3, 2))

Highest vote/seat share difference for all democratic regimes with majoritarian elections.

Code
top_2 |>
  slice_max(order_by = share_diff, n = 1, by = c(country)) |>
  select(country, country_name, year, party, vote_share, seat_share, share_diff) |>
  arrange(desc(share_diff)) |>
  reactable(searchable = TRUE, striped = TRUE)

Electoral systems

Types of electoral systems in democratic regimes classified by Bormann and Golder (2013).

Explore data

UK · Con, Lab, Lib

Code
uk_3 |>
  select(year:seats_total) |>
  reactable(searchable = TRUE, striped = TRUE)

Top 2 · Majoritarian

Code
top_2 |>
  select(country, country_name, year, party, vote_share, seat_share, share_diff) |>
  reactable(searchable = TRUE, striped = TRUE)

Electoral systems

Code
top_2 |>
  distinct(country, country_name, elec_sys) |>
  reactable(searchable = TRUE, striped = TRUE)

References

Code
library(httr2)

get_doi_reference <- function(doi) {
  request(paste0("https://doi.org/", doi)) |>
    req_headers("Accept" = "text/x-bibliography") |>
    req_perform() |>
    resp_body_string()
}

references_doi <- c(
  "10.1016/j.electstud.2013.01.005",
  "10.2139/ssrn.3831905",
  "10.1080/13569775.2021.1993564",
  "10.23696/vpartydsv2"
)

references <- map_chr(references_doi, get_doi_reference)
  • Bormann, N.-C., & Golder, M. (2013). Democratic Electoral Systems around the world, 1946–2011. Electoral Studies, 32(2), 360–369. https://doi.org/10.1016/j.electstud.2013.01.005
  • Coppedge, M., Gerring, J., Knutsen, C. H., Lindberg, S. I., Teorell, J., Alizada, N., Altman, D., Bernhard, M., Cornell, A., Fish, M. S., Gastaldi, L., Gjerløw, H., Glynn, A., Hicken, A., Hindle, G., Ilchenko, N., Krusell, J., Lührmann, A., Maerz, S. F., … Ziblatt, D. (2021). V-Dem Dataset v11.1. SSRN Electronic Journal. https://doi.org/10.2139/ssrn.3831905
  • Kasuya, Y., & Mori, K. (2021). Re-examining thresholds of continuous democracy measures. Contemporary Politics, 28(4), 365–385. https://doi.org/10.1080/13569775.2021.1993564
  • Staffan. I. Lindberg, Nils Düpont, Masaaki Higashijima, Yaman Berker Kavasoglu, Kyle L. Marquardt, Michael Bernhard, Holger Döring, Allen Hicken, Melis Laebens, Juraj Medzihorsky, Anja Neundorf, Ora John Reuter, Saskia Ruth-Lovell, Keith R. Weghorst, Nina Wiesehomeier, Joseph Wright, Nazifa Alizada, Paul Bederke, Lisa Gastaldi, Sandra Grahn, Garry Hindle, Nina Ilchenko, Johannes Von Römer, Steven Wilson, Daniel Pemstein, Brigitte Seim. (2022). V-Party Dataset v2 [Data set]. V-Dem Institute. https://doi.org/10.23696/VPARTYDSV2