Satisfaction Approval Voting
sav.RdSatisfaction Approval Voting (SAV) ranks candidates by normalizing approval scores based on the size of each voter's approval set. Voters who approve more candidates contribute a lesser score to the individual approved candidates.
This function uses an internal C++ implementation for efficient computation.
Usage
sav(
voters,
candidates,
weights = NULL,
committee_size = NULL,
borda_score = TRUE,
check = FALSE
)Arguments
- voters
(
list())
A list of subsets (charactervectors), where each subset contains the candidates approved or selected by a voter.- candidates
(
character())
A vector of all candidates to be ranked.- weights
(
numeric()|NULL)
A numeric vector of non-negative weights representing each voter's influence. Larger weight, higher influence. Must have the same length asvoters. IfNULL(default), all voters are assigned equal weights of 1, representing equal influence.- committee_size
(
integer(1)|NULL)
Number of top-ranked candidates to return. Default (NULL) returns all candidates.- borda_score
(
logical(1))
Whether to include aborda_scorecolumn in the output, which provides a normalized score based on the candidate's rank. IfTRUE(default), theborda_scoreis calculated as \((p - i) / (p - 1)\), where \(p\) is the total number of candidates and \(i\) is the candidate's rank.- check
(
logical(1))
Whether to run additional voter-integrity checks. WhenTRUE, each voter must approve at least one candidate, approvals must be unique per voter, and all approved candidates must appear incandidates. UseFALSEto skip these checks when inputs are known to be valid.
Value
A data.frame with columns:
"candidate": Candidate names."score": Satisfaction scores."norm_score": Normalized scores, scaled to the range \([0,1]\)."borda_score": Borda scores for method-agnostic comparison, ranging in \([0,1]\), where the top candidate receives a score of 1 and the lowest-ranked candidate receives a score of 0, based on the total number of candidates.
Candidates are ordered by decreasing "score".
See also
Other voting methods:
av(),
seq_pav(),
seq_phragmen()