Recent trends in cabinet size

The average number of parties in government peaked in the last decade

Many countries are governed by one multiple political parties at the same time. Indeed, the number of parties in government — the cabinet size — is rarely one.

In this blogpost, I explore the average cabinet size, and how this average has been trending in the recent history.

To do so, I turn to the Parliaments and Governments Database (ParlGov), which brings together three inter-related datasets, as presented in Table 1. Here I work with only one of them: Cabinet.

Table 1: The three components of the ParlGov Database
DatasetFilenameObservations
Partiesview_party1700
Electionsview_election1000
Cabinetsview_cabinet1600

To start with, let’s load three packages that I need for this task, dataverse (to download the dataset from Harvard Dataverse), tidyverse (to clean, tidy, and plot the data), and knitr (to table the data).

I will leave the underlying R code visible, in case you are interested in this sort of thing.

# load the packages needed

library(dataverse)
library(tidyverse)
library(knitr)

We can now download the dataset with the get_dataframe_by_name function.

# download the data from harvard dataverse

df_cabs <- get_dataframe_by_name(
  filename  = "view_cabinet.tab",
  dataset   = "10.7910/DVN/Q6CVHX",
  server    = "dataverse.harvard.edu"
  )

How does the dataset look? We can use the kable function function to see. However, this is a large dataset. As of 25 April 2021, it has 12070 observations and 19 variables. Therefore, Table 2 displays only a random selection of these observations.

# table a random selection of observations

kable(sample_n(df_cabs, 10),
      caption = "Randomly selected 10 observations in the Cabinet dataset")
Table 2: Randomly selected 10 observations in the Cabinet dataset
country_name_shortcountry_nameelection_datestart_datecabinet_namecaretakercabinet_partyprime_ministerseatselection_seats_totalparty_name_shortparty_nameparty_name_englishleft_rightcountry_idelection_idcabinet_idprevious_cabinet_idparty_id
HUNHungary1998-05-241998-07-06Orban I011148386Fi-MPSzFidesz – Magyar Polgári SzövetségFidesz – Hungarian Civic Union6.543239671827488921
AUSAustralia2016-07-022016-07-19Turnbull II01145150LPALiberal Party of AustraliaLiberal Party of Australia7.3903331006149011741411
TURTurkey1995-12-241997-06-30Yilmaz III000158550RPRefah (Fazilet) PartisiWelfare (Virtue) Party8.333320810109910981122
DEUGermany1930-09-141930-12-05Brüning III0004577KVPKonservative VolksparteiConservative Peoples’ Party7.4000541037158315822711
ISRIsrael1996-05-291996-06-18Netanyahu I0105120GesherGesherBridge7.4000347179619601862
ISRIsrael1949-01-251950-11-01Ben-Gurion III0007120ZKZionim KlalimGeneral Zionists6.0000347049239221472
CZECzech Republic1996-06-011998-01-02Tosovsky10061200CSSDCeská strana sociálne demokratickáCzech Social Democratic Party3.04636830176136789
DNKDenmark1947-10-281947-11-13Hedtoft I0006150RFRetsforbundJustice Party6.0000215414083871606
DEUGermany1930-09-141930-12-05Brüning III000107577NSDAPNationalsozialistische Deutsche ArbeiterparteiNational Socialist German Workers’ Party8.8000541037158315822695
ISRIsrael1992-06-231995-11-22Peres II0001120noneno party affiliationno party affiliationNA347169601120123

Before visualising the trend over the years, we need to get the data into the right shape. There are many helpful functions in the tidyverse family for this purpose.

# tidy the data

df_ends <- df_cabs %>% 
        filter(start_date > as.Date("1948-12-31") & start_date < as.Date("2020-01-01")) %>%
        mutate(end_year = as.numeric(format(start_date,'%Y'))) %>%
        select(previous_cabinet_id, end_year) %>%
        distinct()

df <- df_cabs %>%
      filter(start_date > as.Date("1948-12-31") & start_date < as.Date("2020-01-01"))  %>%
      mutate(start_year = as.numeric(format(start_date,'%Y'))) %>%
      group_by(cabinet_id, start_year) %>%
      summarise(parties = sum(cabinet_party)) %>%
      ungroup() %>%
      left_join(., df_ends, by = c("cabinet_id" = "previous_cabinet_id")) %>%
      mutate(end_year = replace_na(end_year, 2019)) %>%
      pivot_longer(cols = c("start_year", "end_year"), values_to = "year") %>%
      select(-name) %>%
      group_by(cabinet_id) %>%
      complete(cabinet_id, year = full_seq(year, 1)) %>%
      fill(parties) %>%
      group_by(year) %>%
      summarise(cabinet_size = mean(parties))

Now that the data is in the right shape, Figure 1 plots it.

# plot the data

ggplot(df, aes(x = year, y = cabinet_size)) +
        geom_line(size = 1.5) +
        theme_minimal() +
        theme(axis.title = element_text(size = 14),
              axis.text = element_text(size = 14)) +
        labs(y = "Average cabinet size\n", x = "")
Average cabinet size, 1949--2019.

Figure 1: Average cabinet size, 1949–2019.

The figure shows that the average number of parties in government peaked in the last decade.

Jane J. Doe
Jane J. Doe
Associate Professor of Politics

My academic interests include party politics, public policy, and international polities.