Package 'ElectDecomp'

Title: Decomposition of Seats-to-Votes Distortion in Multimember Elections
Description: Decomposes the seat-to-vote distortion for every party (individual party bias or individual party deviation from proportional representation) into segments that can be attributed to separate causes for the party infra or over-representation: the electoral system effect (separating the mean and the variance effect within it) and the population effect (separating malapportionment and unequal participation effect within it). It works on (single tired) districted electoral systems with any number of seats per district. In addition, the package aggregates the individual party distortion into an index of deviation from proportionality (the Losemore-Hanby index) whose value is also decomposed into segments attributed to the major causes of deviation from proportionality (plus the interactions among them).
Authors: Alberto Penadés [aut] , Jose M. Pavía [aut, cre]
Maintainer: Jose M. Pavía <[email protected]>
License: EPL
Version: 0.0.1-1
Built: 2024-12-01 08:12:34 UTC
Source: CRAN

Help Index


Decomposition of Seats-to-Votes Distortion

Description

Decomposes the seat-to-vote distortion for every party (individual party bias or individual party deviation from proportional representation) into segments that can be attributed to separate causes for the party infra or over-representation: the electoral system effect (separating the mean and the variance effect within it) and the population effect (separating malapportionment and unequal participation effect within it). It works on (single tired) districted electoral systems with any number of seats per district. In addition, the package aggregates the individual party distortion into an index of deviation from proportionality (the Losemore-Hanby index) whose value is also decomposed into segments attributed to the major causes of deviation from proportionality (plus the interactions among them).

Usage

distortion(votes, seats, census)

Arguments

votes

A data.frame or matrix of order kxp (where k is the number of constituencies/districts and p the number of parties) with the votes gained by each party/candidacy in each constituency/district. When blank and/or null votes are included as columns in votes, they are treated in the same way as the other parties.

seats

A data.frame or matrix of order kxp (where k is the number of constituencies/districts and p the number of parties), with row and columns in the same order as votes, with the seats gained by each party/candidacy in each constituency/district.

census

A vector (matrix or data.frame) of length k (the number of constituencies/districts), with components in the same order as the rows in votes, with the census (overall population entitled to vote) in each constituency/district.

Value

A list with three components

  • inputs: A list containing all the objects with the values used as arguments by the function.

  • party.distortions: A matrix of order 7xp with the estimates of the distortions at the party level.

  • aggregate.distortions: A matrix of order 8x1 with the Loosemore-Handy index and its decomposition due to parties with and without representation as well as its cumulative decomposition step-by-step into mean effects, variance effects, malapportionment effects and turnout (and interaction) effects. The last row includes the MAL index.

Author(s)

Alberto Penades, [email protected]

Jose M. Pavia, [email protected]

References

Penades, A. and Pavia, J.M. The decomposition of seats-to-votes distortion in multimember elections: mean, variance, malapportionment and participation.

Examples

votes.ex <- structure(list(UCD = c(92019L, 112927L, 117482L, 152498L, 89494L,
                                   103697L, 115390L, 223252L, 55837L, 46820L,
                                   138575L, 177843L, 163536L, 187254L, 140237L,
                                   102719L, 64603L, 102362L, 70550L, 39321L,
                                   101891L, 71650L, 89363L, 137495L, 51568L,
                                   108862L, 50270L, 35324L, 104145L, 60626L,
                                   355857L, 45231L, 45191L, 69014L, 148697L,
                                   115729L, 221996L, 87059L, 99440L, 198231L,
                                   737699L, 75036L, 38338L, 0L, 91262L, 181633L,
                                   56917L, 197100L, 84115L, 334705L, 8808L, 10723L),
                         PSOE = c(50723L, 150896L, 122361L, 111746L, 63172L,
                                  123708L, 185095L, 251336L, 33693L, 16423L,
                                  111293L, 182850L, 73554L, 39616L, 50951L,
                                  67611L, 56332L, 79715L, 28350L, 17133L, 83956L,
                                  14984L, 44388L, 64766L, 25878L, 44168L, 18210L,
                                  10757L, 76308L, 26225L, 721880L, 60747L, 27809L,
                                  59926L, 107797L, 54827L, 78598L, 20808L, 21079L,
                                  54642L, 731380L, 54720L, 34244L, 93010L, 140643L,
                                  155871L, 36186L, 213242L, 69976L, 395211L,
                                  7886L, 5186L),
                          PCE = c(11926L, 41809L, 59668L, 33879L, 10217L, 29847L,
                                  50990L, 91914L, 7398L, 2442L, 22446L, 60297L,
                                  14046L, 7467L, 10643L, 13971L, 13623L, 15562L,
                                  7927L, 5521L, 21942L, 2406L, 4765L, 12460L, 3744L,
                                  5522L, 2101L, 1196L, 15798L, 2783L, 469361L,
                                  24746L, 22680L, 41345L, 21932L, 6797L, 16777L,
                                  2949L, 2627L, 11835L, 247038L, 6319L, 3906L,
                                  12042L, 29968L, 29840L, 3846L, 50444L, 14029L,
                                  106133L, 0L, 966L),
                           AP = c(14886L, 20424L, 33616L, 24573L, 9415L, 26422L,
                                  34838L, 42860L, 7223L, 15180L, 34857L, 77932L,
                                  28472L, 15944L, 27828L, 36598L, 16005L, 31310L,
                                  10277L, 12815L, 44091L, 7123L, 28707L, 33285L,
                                  14638L, 15259L, 7407L, 3792L, 20521L, 30677L,
                                  75097L, 7953L, 10067L, 15216L, 21880L, 19516L,
                                  50256L, 36377L, 21502L, 40104L, 242077L, 0L,
                                  7927L, 27048L, 36934L, 30167L, 19925L, 35755L,
                                  14596L, 60410L, 2915L, 2074L)),
                            class = "data.frame", row.names = c(NA, -52L))

seats.ex <- structure(list(UCD = c(3L, 2L, 3L, 4L, 3L, 3L, 3L, 5L, 2L, 2L, 3L,
                                   4L, 4L, 5L, 5L, 3L, 2L, 3L, 3L, 2L, 2L, 3L,
                                   3L, 4L, 2L, 3L, 2L, 3L, 3L, 2L, 5L, 1L, 1L,
                                   2L, 4L, 4L, 6L, 4L, 4L, 6L, 11L, 3L, 2L, 0L,
                                   2L, 4L, 2L, 4L, 2L, 5L, 1L, 1L),
                           PSOE = c(2L, 4L, 3L, 3L, 2L, 4L, 4L, 5L, 1L,
                                   1L, 3L, 4L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L,
                                   2L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 2L, 1L, 11L,
                                   2L, 1L, 1L, 3L, 1L, 2L, 0L, 0L, 1L, 11L, 2L,
                                   1L, 3L, 3L, 4L, 1L, 4L, 2L, 7L, 0L, 0L),
                           PCE = c(0L, 1L, 1L, 0L, 0L, 0L, 1L, 2L, 0L, 0L, 0L,
                                   1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
                                   0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 7L, 0L, 0L,
                                   1L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 0L, 0L, 0L,
                                   0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L),
                           AP = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
                                  1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L,
                                  0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L,
                                  0L, 0L, 0L, 1L, 1L, 1L, 1L, 3L, 0L, 0L, 0L,
                                  1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L)),
                           class = "data.frame", row.names = c(NA, -52L))
 census.ex <- c(239935L, 559590L, 451021L, 456952L, 255557L, 403142L, 569535L,
                842042L, 153109L, 112376L, 547396L, 783206L, 407899L, 365063L,
                397732L, 327008L, 211249L, 310547L, 151099L, 95061L, 309595L,
                130998L, 238885L, 364127L, 125385L, 241301L, 99408L, 73992L,
                295410L, 164706L, 3004988L, 304448L, 242148L, 331744L, 413193L,
                279372L, 731499L, 302293L, 315033L, 548711L, 2744152L, 319222L,
                153080L, 437592L, 749572L, 551021L, 167030L, 677156L, 283161L,
                1287981L, 31672L, 25368L)

example <- distortion(votes.ex, seats.ex, census.ex)
example$party.distortions