Description
Efficient Voting Methods for Committee Selection.
Description
A fast 'Rcpp'-based implementation of polynomially-computable voting theory methods for committee ranking and scoring. The package includes methods such as Approval Voting (AV), Satisfaction Approval Voting (SAV), sequential Proportional Approval Voting (PAV), and sequential Phragmen's Rule. Weighted variants of these methods are also provided, allowing for differential voter influence.
README.md
fastVoteR
Overview
fastVoteR
is an R package with Efficient Rcpp Voting Methods for Committee Selection.
Still under development.
Installation
Development version:
# install.packages("pak")
pak::pak("bblodfon/fastVoteR")
Usage
library(fastVoteR)
# 5 candidates
candidates = paste0("V", seq_len(5))
candidates
#> [1] "V1" "V2" "V3" "V4" "V5"
# 4 voters
voters = list(
c("V3", "V1", "V4"),
c("V3", "V1"),
c("V3", "V2"),
c("V2", "V4")
)
voters
#> [[1]]
#> [1] "V3" "V1" "V4"
#>
#> [[2]]
#> [1] "V3" "V1"
#>
#> [[3]]
#> [1] "V3" "V2"
#>
#> [[4]]
#> [1] "V2" "V4"
set.seed(42)
# voter weights
weights = c(1.1, 2.5, 0.8, 0.9)
# Approval voting (all voters equal)
rank_candidates(voters, candidates)
#> candidate score norm_score borda_score
#> <char> <num> <num> <num>
#> 1: V3 3 0.75 1.00
#> 2: V1 2 0.50 0.75
#> 3: V2 2 0.50 0.50
#> 4: V4 2 0.50 0.25
#> 5: V5 0 0.00 0.00
# Approval voting (voters unequal)
rank_candidates(voters, candidates, weights)
#> candidate score norm_score borda_score
#> <char> <num> <num> <num>
#> 1: V3 4.4 0.8301887 1.00
#> 2: V1 3.6 0.6792453 0.75
#> 3: V4 2.0 0.3773585 0.50
#> 4: V2 1.7 0.3207547 0.25
#> 5: V5 0.0 0.0000000 0.00
# Satisfaction Approval voting (voters unequal)
rank_candidates(voters, candidates, weights, method = "sav")
#> candidate score norm_score borda_score
#> <char> <num> <num> <num>
#> 1: V3 2.0166667 0.8175676 1.00
#> 2: V1 1.6166667 0.6554054 0.75
#> 3: V2 0.8500000 0.3445946 0.50
#> 4: V4 0.8166667 0.3310811 0.25
#> 5: V5 0.0000000 0.0000000 0.00
# Sequential Proportional Approval voting (voters equal)
rank_candidates(voters, candidates, method = "seq_pav")
#> candidate borda_score
#> <char> <num>
#> 1: V3 1.00
#> 2: V2 0.75
#> 3: V1 0.50
#> 4: V4 0.25
#> 5: V5 0.00
Related work
See vote and votesys R packages. For strictly ABC-voting rules, see abcvoting Python package.
Code of Conduct
Please note that the fastVoteR
project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.