0

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

4

1 回答 1

1

试试这个PlayerRatings包。

http://cran.r-project.org/web/packages/PlayerRatings/index.html

它实现了国际象棋中使用的 Elo 和 Glicko 评级,但它也可以扩展到其他运动。该软件包还包含根据之前的评分和游戏结果更新玩家评分的功能。这是一个基本的起点,您必须根据自己的情况进行构建。

http://en.wikipedia.org/wiki/Elo_rating_system#Elo_ratings_beyond_chess

我认为不会有针对您想要做的事情的量身定制的解决方案,因为您如何进行评级将取决于您的场景的具体情况。

于 2015-02-09T15:22:44.863 回答