Bayesian "Now-Cast" Estimation of Event Probabilities in Multi-Party Democracies

An implementation of a Bayesian framework for the opinion poll based estimation of event probabilities in multi-party electoral systems (Bender and Bauer (2018) ).


lifecycle Travis-CI BuildStatus AppVeyor BuildStatus CoverageStatus DOI DOI CRAN_Status_Badge MITlicense

Overview

The package offers functions that calculate coalition probabilities in multi-party elections, based on a survey results:

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.de 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

News

coalitions 0.6

coalitions 0.6.5

  • Fixed scrapper for local German "Hessen" election
  • Fixed tests

coalitions 0.6.4

  • Add scrapers for local German "Hessen" election

coalitions 0.6.3

  • Update HP with new pkgdown version

coalitions 0.6.2

  • Added reference to Description and examples to functions as per CRAN request

coalitions 0.6.1

coalitions 0.6.0 (2018-03)

coalitions 0.5

coalitions 0.5.7 (2017-12)

  • Added federal Bavarian election scrapers

coalitions 0.5.1 (2017-03)

  • Major overhaul
  • More robust functions, more tests
  • Most functions comply with tidyverse
  • Improved documentation, added vignettes, created homepage (via pkgdown)

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("coalitions")

0.6.10 by Andreas Bender, 5 hours ago


http://adibender.github.io/coalitions/


Report a bug at https://github.com/adibender/coalitions/issues


Browse source code at https://github.com/cran/coalitions


Authors: Andreas Bender [aut, cre] , Alexander Bauer [aut]


Documentation:   PDF Manual  


MIT + file LICENSE license


Imports checkmate, gtools, rvest, xml2, jsonlite, RCurl, reshape2, rlang, magrittr, lubridate, forcats, stringr, tidyr, purrr, dplyr, ggplot2

Suggests testthat, covr, knitr, rmarkdown, pkgdown


See at CRAN