目前,我尝试了解Ranked Pairs方法。 从维基百科条目我不知道如何创建成对比较矩阵。 这个explanation帮助我理解了比较两对的一种方法 - 但是,我不确定这是否与wiki中说的完全相同。我的第一个问题是,根据2,1中对的比较是否有效?
我设法将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")
然后使用排名对方法对排名矩阵进行排名
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
)的值,以便我可以将其用作“数字”。这导致我的下一个问题:排序和确定胜利者。
我想,但我不确定,在哪里我可以按照候选人的基数来排序|:
scores <- apply(sorted * (ncol(sorted) ^ c(2,1,0)), MARGIN=2, sum)
所以按scores
排名(越高越好)给我们排名。正确?
第三个问题涉及确定候选人排名的相互关系。按分数排名为我们提供了候选人的排名列表。但维基百科1告诉我们,对于真正的排名,应该通过从列表中删除获胜者来重新计算整个过程,以确定下一个获胜者。我不明白为什么这可能会返回不同的排名。有人举个简单的例子吗?
非常感谢!