【发布时间】:2015-02-09 14:39:52
【问题描述】:
我正在分析一些体育数据,我有一组大约 40 支球队的输赢记录。我想提出一个排名,其中每场胜利都取决于对手的实力。这必须是某种迭代/递归的东西,其中权重和等级在每次迭代时都会更新,直到收敛。有谁知道是否有现有的功能或包来做这种事情?我的猜测是它不会是一个特定于运动的包,但我想这种东西在很多领域都很常见。
编辑:
这是一些示例数据。有 4 支队伍,A、B、C 和 D,每支队伍与另一支队伍交手一次,产生 10 场独特的比赛。数据加倍,因此每支球队的四场比赛都被列为自己的行,“a.win”列表示“team.a”是否赢得了比赛(1=是)。
dat<-data.frame(
team.a=c("A","A","A","A","B","B","B","B","C","C","C","C","D","D","D","D","E","E","E","E"),
team.b=c("B","C","D","E","A","C","D","E","A","B","D","E","A","B","C","E","A","B","C","D"),
a.win=c(1,1,0,1,0,0,1,0,0,1,1,0,1,0,0,1,0,1,1,0))
根据这些数据,A 队赢了 3/4,B 队赢了 1/4,C、D 和 E 队各赢了 2/4。但是 D 队击败了 A,而 C 和 E 都输给了 A。所以直觉上 D 的排名应该略高于 C 和 E,因为它的胜利之一是得分最高的对手。同样的,C队输给了B队(唯一赢过的队伍),所以直觉上应该排在D和E的后面。
我试图弄清楚如何最好地分配排名(例如,从 -1 到 1,或基于获胜概率或失败次数等),然后如何最好地重新加权每个团队而不是仅基于输赢的数量,而是基于他们击败的对手的排名。
【问题讨论】:
-
就目前而言,这是一个相当广泛的问题。我建议您添加某种代码和/或数据,否则可能会被关闭。
-
我不知道为什么这个范围如此广泛。我只是在寻找一个基本的团队排名系统,它根据对手/时间表的实力加权,但它会根据上一次迭代的排名迭代计算实力。这在整个运动中都很常见,我只是找不到可以做到这一点的内置 R 函数。
-
@user3037237 请阅读about SO:“包括您尝试过的详细信息”; “不要问...... [q]你没有试图找到答案的问题(展示你的工作!)”。另请阅读What topics can I ask about here?:“要求我们推荐或查找 [..] 工具、软件库、[...] 的问题是题外话”。
-
我不认为这适用于询问特定功能,但很高兴将来知道。那么,询问特定的 R 函数在哪里是主题?
-
@user3037237:在我鼓励您通过添加数据和代码使您的问题具体化之后,我看到您删除了您最近的问题。在这里,您似乎得到了与我给出的类似的建议,并且过去曾使用编辑功能来改进您的问题。您还应该考虑在 CrossValidated.com 上发布一般方法问题,如果您只要求对方法进行描述,并且不坚持以 R 代码提供答案或仅限于 R 包,那么这些问题将成为主题。
标签: r ranking ranking-functions weighting