David Golden > Statistics-RankOrder > Statistics::RankOrder

Download:
Statistics-RankOrder-0.13.tar.gz

Dependencies

Annotate this POD

Website

View/Report Bugs
Module Version: 0.13   Source  

NAME ^

Statistics::RankOrder - Algorithms for determining overall rankings from a panel of judges

VERSION ^

version 0.13

SYNOPSIS ^

  use Statistics::RankOrder;

  my $r = Statistics::RankOrder->new();
  
  $r->add_judge( [qw( A B C )] );
  $r->add_judge( [qw( A C B )] );
  $r->add_judge( [qw( B A C )] );

  my %ranks = $r->mean_rank;
  my %ranks = $r->trimmed_mean_rank(1);
  my %ranks = $r->median_rank;
  my %ranks = $r->best_majority_rank;

DESCRIPTION ^

This module offers algorithms for combining the rank-ordering of candidates by a panel of judges. For the purpose of this module, the term "candidates" means candidates in an election, brands in a taste-test, competitors in a sporting event, and so on. "Judges" means those rank-ordering the candidates, whether these are event judges, voters, etc. Unlike "voting" algorithms (e.g. majority-rule or single-transferable-vote), these algorithms require judges to rank-order all candidates. (Ties may be permissible for some algorithms).

Algorithms included are:

In this alpha version, there is minimal error checking. Future versions will have more robust error checking and may have additional ranking methods such as pair-ranking methods.

METHODS ^

new

 $r = Statistics::RankOrder->new();

Creates a new object with no judges on the panel (i.e. no data);

add_judge

 $r->add_judge( [qw( A B C D E )] );

Adds a judge to the panel. The single argument is an array-reference with the names of candidates ordered from best to worst.

best_majority_rank

 my %ranks = $r->best_majority_rank;

Ranks candidates according to the "Best-of-Majority" algorithm. The median rank is found for each candidate. If there are an even number of judges, the worst of the two median ranks is used. The idea behind this method is that the result for a candidate represents the worst rank such that a majority of judges support that rank or better. Ties in the median ranks are broken by the following comparisons, in order, until the tie is broken:

If a tie still exists after these comparisons, then the tie stands. (In practice, this is generally rare.) When a tie occurs, the next rank assigned after the tie is calculated as if the tie had not occurred. E.g., 1st, 2nd, 2nd, 4th, 5th.

Returns a hash where the keys are the names of the candidates and the values are their rankings, with 1 being best and higher numbers worse.

candidates

 my %candidates = $r->candidates;

Returns a hash with keys being the names of candidates and the values being array references containing the rankings from all judges for each candidate.

judges

 my @judges = $r->judges;

Returns a list of array-references representing the rank-orderings of each judge.

mean_rank

 my %ranks = $r->mean_rank;

Ranks candidates according to the "Lowest Mean Rank" algorithm. The average rank is computed for each candidate. The candidate with the lowest mean rank is placed 1st, the second lowest mean rank is 2nd, and so on. If the mean ranks are the same, the candidates tie for that position. When a tie occurs, the next rank assigned after the tie is calculated as if the tie had not occurred. E.g., 1st, 2nd, 2nd, 4th, 5th.

Returns a hash where the keys are the names of the candidates and the values are their rankings, with 1 being best and higher numbers worse.

median_rank

 my %ranks = $r->median_rank;

Ranks candidates according to the "Median Rank" algorithm. The median rank is found for each candidate. If there are an even number of judges, the worst of the two median ranks is used. The idea behind this method is that the result for a candidate represents the lowest rank such that a majority of judges support that rank or better. The candidate with the lowest median rank is placed 1st, the second lowest median rank is 2nd, and so on. If the median ranks are the same, the candidates tie for that position. When a tie occurs, the next rank assigned after the tie is calculated as if the tie had not occurred. E.g., 1st, 2nd, 2nd, 4th, 5th.

Returns a hash where the keys are the names of the candidates and the values are their rankings, with 1 being best and higher numbers worse.

trimmed_mean_rank

 my %ranks = $r->trimmed_mean_rank( N );

Ranks candidates according to the "Trimmed Lowest Mean Rank" algorithm. The average rank is computed for each candidate after dropping the N lowest and N highest scores. E.g. trimmed_mean_rank(2) will drop the 2 lowest and highest scores. The candidate with the lowest mean rank is placed 1st, the second lowest mean rank is 2nd, and so on. If the mean ranks are the same, the candidates tie for that position. When a tie occurs, the next rank assigned after the tie is calculated as if the tie had not occurred. E.g., 1st, 2nd, 2nd, 4th, 5th.

Returns a hash where the keys are the names of the candidates and the values are their rankings, with 1 being best and higher numbers worse.

SEE ALSO ^

For further details on various ranking methods, in particular, the "Best of Majority" method, see the following articles:

SUPPORT ^

Bugs / Feature Requests

Please report any bugs or feature requests through the issue tracker at https://github.com/dagolden/Statistics-RankOrder/issues. You will be notified automatically of any progress on your issue.

Source Code

This is open source software. The code repository is available for public review and contribution under the terms of the license.

https://github.com/dagolden/Statistics-RankOrder

  git clone https://github.com/dagolden/Statistics-RankOrder.git

AUTHOR ^

David Golden <dagolden@cpan.org>

COPYRIGHT AND LICENSE ^

This software is Copyright (c) 2005 by David A Golden.

This is free software, licensed under:

  The Apache License, Version 2.0, January 2004
syntax highlighting: