【问题标题】:R function for weighting teams by strength of opponent?R函数根据对手的实力加权球队?
【发布时间】: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


【解决方案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

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

【讨论】:

  • 这正是我想要的。谢谢!
  • 当然可以。如果有帮助,请接受我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多