Function to calculate the allocated seats according to the First Past the Post method in a given electoral district.
Source:R/seat_allocation.R
fptp_seats.Rd
This function allocates every seat in an electoral district to the candidacy that receives the largest number of ballots. In case of a tie in the number of ballots the seats will be randomly allocated between those candidacies.
Usage
fptp_seats(
candidacies,
ballots,
blank_ballots,
n_seats,
threshold = 0.03,
short_version = TRUE
)
Arguments
- candidacies
A vector containing one of the following variable: unique codes or abbreviations of the candidacies that participated in the election.
- ballots
A vector containing the absolute number of ballots (integer positive values) received by each candidacies
- blank_ballots
A numerical value indicating the number of blank ballots (integer positive values).
- n_seats
An integer positive value indicating the number of seats that are going to distributed for a given electoral district.
- threshold
A numerical value (between 0 and 1) indicating the minimal percentage of ballots needed to obtain representation for a given electoral district. Defaults to
0.03
.- short_version
Flag to indicate whether it should be returned a short version of the data (just key variables) or not. Defaults to
TRUE
.
Value
- candidacies
abbrev or id of the candidacies
- seats
number of seats distributed to each party
- ballots
absolute number of ballots, just in long format
- porc_seats
percentage of seats respect to the number of seats, just in long format
- porc_ballots
percentage of ballots respect to party ballots (including blank ballots), just in long format
Details
The purpose of this helper function is to be used in a general
function, seats_allocation()
, to calculate the seats distribution of every
electoral district of a given election according to the plurality method.
Examples
## Correct examples
## Seats distribution with First Past the Post method for given vectors
## of candidacies and ballots without the remainder quotients
candidacies <- c("PP", "PSOE", "PODEMOS", "VOX")
ballots <- c(200, 350, 100, 200)
seats <- fptp_seats(candidacies = candidacies, ballots = ballots,
blank_ballots = 50, n_seats = 15, threshold = 0.03)
# Same results in a long version (providing quotients)
seats <- fptp_seats(candidacies, ballots, blank_ballots = 50,
n_seats = 15, short_version = FALSE)
# Adams with threshold 0.05
seats <- fptp_seats(candidacies, ballots, blank_ballots = 50,
n_seats = 5, threshold = 0.05)
# A very high threshold that only one party meets
seats <- fptp_seats(candidacies, ballots, blank_ballots = 50,
n_seats = 5, threshold = 0.3)
if (FALSE) { # \dontrun{
# Incorrect examples
# Different length of candidacies and ballots
candidacies <- c("PP", "PSOE", "PODEMOS", "VOX")
ballots <- c(200, 350, 100)
seats <- fptp_seats(candidacies = candidacies, ballots = ballots,
blank_ballots = 50, threshold = 0.03)
# Ballots with missing values
candidacies <- c("PP", "PSOE", "PODEMOS")
ballots <- c(200, 350, NA)
seats <- fptp_seats(candidacies = candidacies, ballots = ballots,
n_seats = 5, blank_ballots = 50,
threshold = 0.03)
# Ballots with char values
candidacies <- c("PP", "PSOE", "PODEMOS")
ballots <- c("200", "350", "100")
seats <- fptp_seats(candidacies = candidacies, ballots = ballots,
n_seats = 5, blank_ballots = 50,
threshold = 0.03)
# Threshold should be a numerical value between 0 and 1
candidacies <- c("PP", "PSOE", "PODEMOS")
ballots <- c(200, 350, 100)
seats <- fptp_seats(candidacies = candidacies, ballots = ballots,
n_seats = 5, blank_ballots = 50,
threshold = 3)
} # }