我正在分析一些体育数据,我有大约40支球队的一组赢/输记录。我想提出一个排名,每个胜利都由对手的实力加权。这必须是一些迭代/递归类型的事情,其中权重和等级在每次迭代时更新直到收敛。有没有人知道是否有现有的功能或包来做这种事情?我的猜测是,它不会是一个特定于运动的包,但我想这种事情在很多领域都很常见。
编辑:
这是一些示例数据。共有4支球队,A,B,C和D,每支球队一次参加其他球队,共有10支独特的比赛。数据加倍,以便每个团队的四个游戏被列为他们自己的行,列#34; a.win"指的是if" 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,或基于获胜概率,或损失数量等),然后如何最好地重新分配每个等级球队不仅仅基于胜负的数量,而且取决于他们击败的对手的等级。
答案 0 :(得分: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
我认为不会为您想要做的事情提供量身定制的解决方案,因为您对评级的评估将取决于您的方案的具体情况。