Learn R Programming

coalitions

Overview

The coalitions package implements a Bayesian framework for the estimation of event probabilities in multi-party electoral systems (Bauer and others, 2019). To support estimation the package also implements scrappers that obtain data for German federal and general elections as well as Austrian general election. The implementation can be extended to support other elections.

German (state and federal) elections/surveys

Installation

# To install from CRAN use:
install.packages("coalitions")

# To install the most current version from GitHub use:
devtools::install_github("adibender/coalitions")

Usage

Detailed workflow is outlined in the workflow vignette.

A short overview is presented below.

Scrape surveys

The wrapper get_surveys() which takes no arguments, downloads all surveys currently available at wahlrecht and stores them in a nested tibble:

library(coalitions)
library(dplyr)
library(tidyr)
surveys <- get_surveys()
surveys
## # A tibble: 7 x 2
##   pollster   surveys
##   <chr>      <list>
## 1 allensbach <tibble [42 × 5]>
## 2 emnid      <tibble [226 × 5]>
## 3 forsa      <tibble [236 × 5]>
## 4 fgw        <tibble [84 × 5]>
## 5 gms        <tibble [96 × 5]>
## 6 infratest  <tibble [110 × 5]>
## 7 insa       <tibble [305 × 5]>

Each row represents a polling agency and each row in the surveys column again contains a nested tibble with survey results from different time-points:

surveys %>%
    filter(pollster == "allensbach") %>%
    unnest()
## # A tibble: 42 x 6
##    pollster   date       start      end        respondents survey
##    <chr>      <date>     <date>     <date>           <dbl> <list>
##  1 allensbach 2018-02-23 2018-02-02 2018-02-15        1271 <tibble [7 × 3…
##  2 allensbach 2018-01-25 2018-01-05 2018-01-18        1221 <tibble [7 × 3…
##  3 allensbach 2017-12-21 2017-12-01 2017-12-14        1443 <tibble [7 × 3…
##  4 allensbach 2017-11-30 2017-11-22 2017-11-27        1299 <tibble [7 × 3…
##  5 allensbach 2017-10-25 2017-10-07 2017-10-19        1454 <tibble [7 × 3…
##  6 allensbach 2017-09-22 2017-09-13 2017-09-20        1074 <tibble [7 × 3…
##  7 allensbach 2017-09-19 2017-09-06 2017-09-14        1083 <tibble [7 × 3…
##  8 allensbach 2017-09-06 2017-08-22 2017-08-31        1043 <tibble [7 × 3…
##  9 allensbach 2017-08-22 2017-08-04 2017-08-17        1421 <tibble [7 × 3…
## 10 allensbach 2017-07-18 2017-07-01 2017-07-12        1403 <tibble [7 × 3…
## # ... with 32 more rows
survey <- surveys %>% unnest() %>% slice(1)
survey %>% unnest()
## # A tibble: 7 x 8
##   pollster   date       start      end        respondents party  percent
##   <chr>      <date>     <date>     <date>           <dbl> <chr>    <dbl>
## 1 allensbach 2018-02-23 2018-02-02 2018-02-15        1271 cdu      32.0
## 2 allensbach 2018-02-23 2018-02-02 2018-02-15        1271 spd      17.5
## 3 allensbach 2018-02-23 2018-02-02 2018-02-15        1271 greens   12.0
## 4 allensbach 2018-02-23 2018-02-02 2018-02-15        1271 fdp      11.0
## 5 allensbach 2018-02-23 2018-02-02 2018-02-15        1271 left      9.50
## 6 allensbach 2018-02-23 2018-02-02 2018-02-15        1271 afd      13.0
## 7 allensbach 2018-02-23 2018-02-02 2018-02-15        1271 others    5.00
## # ... with 1 more variable: votes <dbl>

Calculate coalition probabilities

For each survey (row) we can calculate the coalition probabilities

survey %>% get_probabilities(nsim=1e4) %>% unnest()
## # A tibble: 6 x 4
##   pollster   date       coalition       probability
##   <chr>      <date>     <chr>                 <dbl>
## 1 allensbach 2018-02-23 cdu                  0
## 2 allensbach 2018-02-23 cdu_fdp              0.0500
## 3 allensbach 2018-02-23 cdu_fdp_greens     100.0
## 4 allensbach 2018-02-23 spd                  0
## 5 allensbach 2018-02-23 left_spd             0
## 6 allensbach 2018-02-23 greens_left_spd      0

References

Bauer, Alexander, Andreas Bender, André Klima, and Helmut Küchenhoff. 2019. “KOALA: A New Paradigm for Election Coverage.” AStA Advances in Statistical Analysis, June. https://doi.org/10.1007/s10182-019-00352-6.

Bender, Andreas, and Alexander Bauer. 2018. “Coalitions: Coalition Probabilities in Multi-Party Democracies,” March. https://doi.org/10.21105/joss.00606.

Copy Link

Version

Install

install.packages('coalitions')

Monthly Downloads

109

Version

0.6.24

License

MIT + file LICENSE

Maintainer

Andreas Bender

Last Published

August 17th, 2022

Functions in coalitions (0.6.24)

dHondt

Seat Distribution by D'Hondt
effective_samplesize

Calculate the effective sample size
collapse_parties

Transform surveys in long format
scrape_austria

Import Austrian survey results
get_probabilities

Wrapper for calculation of coalition probabilities from survey
calculate_probs

Calculate coalition probabilities for multiple coalitions
get_seats

Calculate seat distribution from draws from posterior
scrape_wahlrecht

Scrape surveys for German general election
as_survey

Creates basic survey table from votes in percent
calculate_prob

Calculate coalition probability from majority table
gg_survey

Plot voter shares observed in one survey
party_colors_de

Colors for German parties
filter_superior

Remove rows from table for which superior coalitions are possible
party_labels_de

Labels for German parties
get_eligible

Extract surveys from institutes within a specified time-window
extract_num

Extract numerics from string or character
get_n

Total number of survey participants from surveys eligible for pooling.
get_meta

Extract "meta" information from survey data base
have_majority

Do coalitions have a majority
try_readHTML

Try call of read_html that throws an error if the url cannot be resolved
get_entryprobability

Get probabilities to enter the parliament.
has_majority

Does a coalition have a majority
pool_austria

Pool surveys from different pollsters
pool_surveys

Obtain pooled survey during specified period
get_pooled

Extract effective sample size for pooled sample
sanitize_colnames

Sanitize column names
sls

Seat Distribution by Sainte-Lague/Schepers
surveys_sample

Sample of selected surveys
sanitize_strings

Sanitize character vector
get_superior

Extract superior coalitions from coalition string or vector
get_surveys

Scrape surveys from all pollsters
prettify_strings

Replace/prettify matching words/terms in one vector by another
redistribute

Calculate percentage of votes/seats after excluding parties with votes < hurdle
hare_niemeyer

Seat Distribution by Hare/Niemeyer
%>%

Pipe operator
paste_coalitions

Transform list of coalitions to vector by combining party names
draw_from_posterior

Draw random numbers from posterior distribution