目前,我尝试了解Ranked Pairs方法。从 Wikipedia 条目中,我并没有真正了解如何创建成对比较矩阵。这个解释帮助我理解了比较这些对的一种方法——不过,我不确定这是否正是 wiki 中所说的。我的第一个问题是,根据1比较2中的对是否有效?
我设法将2中的解释改编为 R 代码:
在以下(不切实际)示例中,候选人(行)多于选民(列),但所有选民都给每个候选人一个排名(完整排名)
# some random example
random.example <- matrix(rnorm(50), ncol = 5,
dimnames = list(candidates = paste("c", 1:10, sep=""),
voters = paste("v", 1:5, sep="")))
rmat <- apply(random.example, MARGIN = 2, rank, ties.method = "f")
然后使用 Ranked Pairs 方法对秩矩阵进行排名
pm <- apply(rmat , MARGIN=1, function(x) {
return(apply(rmat , MARGIN=1, function(y) {
return(sum(x > y) - sum(x < y))
}))
})
sorted <- apply(pm , MARGIN=1, function(x, numberOfVoters) {
return(c(like = sum(x > 0),
dislike = numberOfVoters - sum(x < 0),
ties = numberOfVoters - (sum(x == 0) - 1)))
}, numberOfVoters = ncol(rmat)))
评论sorted
:如果我理解正确,那么我们需要先按,like
然后dislike
按 ,然后按ties
。我重新分配了dislike
和ties
( numberOfVoters
) 的值,以便可以将其用作“数字”。这引出了我的下一个问题:排序和确定获胜者。我想,但我不确定,在哪里可以按 |candidates| 的基数排序:
scores <- apply(sorted * (ncol(sorted) ^ c(2,1,0)), MARGIN=2, sum)
所以排名scores
(越高越好)给了我们一个排名。正确的?
第三个问题是关于确定候选人排名的交互作用。分数排名为我们提供了候选人的排名列表。但是 Wikipedia 1告诉我们,对于真正的排名,应该通过从列表中删除获胜者来重新计算整个过程以确定下一个获胜者。而且我不明白为什么这可能会返回不同的排名。有人举个简单的例子吗?
非常感谢!