我正在分析一些体育数据,我有一组大约 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,或基于获胜概率或失败次数等),然后如何最好地重新加权每个团队,而不仅仅是基于赢/输的数量,但取决于他们击败的对手的排名。