View source: R/biproportional.R
biproporz | R Documentation |
Method to proportionally allocate seats among parties (or lists) and districts (or entities, regions), thus bi-proportional.
biproporz(
votes_matrix,
district_seats,
quorum,
use_list_votes = TRUE,
method = "round"
)
votes_matrix |
Vote count matrix with votes by party in rows and votes by district in columns. |
district_seats |
Vector defining the number of seats per district. Must be the same
length as |
quorum |
Optional list of functions which take the votes_matrix and return a logical
vector that denotes for each list/party whether they reached the quorum (i.e. are
eligible for seats). The easiest way to do this is via |
use_list_votes |
By default ( |
method |
Defines which method is used to assign seats. The following methods are recommended:
It is also possible to use any divisor method name listed in |
Each party nominates a candidate list for every district. The voters vote for the parties of their district. The seat allocation is calculated in two steps:
In the so called upper apportionment
the number of seats for each party (over all districts) is determined.
Normally, the number of seats for each region are defined before the
election and are independent of the vote counts.
In the so called lower apportionment
the seats are distributed to the regional party list respecting the
results from the upper apportionment.
Parties failing to reach quorums cannot get seats. This function does not handle seat assignment to candidates.
Matrix with the same dimension as votes_matrix
containing the number of seats
with the row and column divisors stored in attributes (hidden from print, see
get_divisors()
).
The iterative process in the lower apportionment is only guaranteed to terminate with the default Sainte-Laguë/Webster method.
Gaffke, Norbert; Pukelsheim, Friedrich (2008): Divisor methods for proportional representation systems: An optimization approach to vector and matrix apportionment problems. Mathematical Social Sciences, 56 (2), 166-184.
pukelsheim()
for biproportional apportionment with data.frames
as inputs.
votes_matrix = uri2020$votes_matrix
district_seats = uri2020$seats_vector
biproporz(votes_matrix, district_seats)
# apply quorum (high values for illustrative purposes)
biproporz(votes_matrix, district_seats,
quorum_all(any_district = 0.1, total = 0.25))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.