Функция R для взвешивания команд по силе противника?

Я анализирую некоторые спортивные данные, и у меня есть набор записей о победах / поражениях примерно для 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, или на основе вероятности победы, или количества проигрышей и т. Д.), А затем как лучше всего повторно взвесить каждую команду не только на основе количество побед / поражений, но от ранга оппонента они побеждены.


person user3037237    schedule 09.02.2015    source источник
comment
В нынешнем виде это довольно широкий вопрос. Я бы посоветовал вам добавить какой-то код и / или данные, иначе это, скорее всего, будет закрыто.   -  person nrussell    schedule 09.02.2015
comment
Я не уверен, почему это так широко. Я просто ищу базовую систему ранжирования команд, которая взвешивается по силе оппонента / расписанию, но которая итеративно вычисляет силу на основе ранжирования предыдущей итерации. Это обычное дело в спорте, я просто не могу найти встроенную функцию R, которая могла бы это сделать.   -  person user3037237    schedule 09.02.2015
comment
@ user3037237 Прочтите о SO: включите подробную информацию о том, что вы пробовали; Не спрашивайте ... [q] вопросов, на которые вы не пытались найти ответ (покажите свою работу!). Также прочтите Какие темы я могу задать здесь?: Вопросы, требующие от нас порекомендовать или найти [..] инструмент, программная библиотека, [...] не по теме.   -  person Henrik    schedule 09.02.2015
comment
Я не думал, что это относится к вопросу о конкретных функциях, но это полезно знать в будущем. Где же тогда уместно спросить о конкретных функциях R?   -  person user3037237    schedule 09.02.2015
comment
@ user3037237: Я вижу, вы удалили свой недавний вопрос после того, как я посоветовал вам конкретизировать свой вопрос, добавив данные и код. Похоже, здесь вам дали совет, аналогичный тому, что я давал, и в прошлом вы использовали возможности редактирования, чтобы улучшить свой вопрос. Вам также следует подумать о том, чтобы публиковать общие вопросы о методах на CrossValidated.com, где они будут по теме, если вы запрашиваете только описание методов и не настаиваете на том, чтобы ответы доставлялись в коде R или были ограничены пакетами R.   -  person IRTFM    schedule 19.07.2017
comment
Причина, по которой я закрыл другой свой пост, заключается в том, что у меня было ощущение, что у вас слишком много свободного времени, и вы любите прятаться вокруг stackoverflow, исправлять и наказывать людей, так что мой другой вопрос теперь был бессмысленным для вас, участвовавшего в этой ветке. Думаю, вы доказали мою правоту.   -  person user3037237    schedule 20.07.2017


Ответы (1)


Попробуйте пакет PlayerRatings.

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

В нем реализованы рейтинги Эло и Глико, используемые в шахматах, но его можно распространить и на другие виды спорта. Пакет также содержит функции обновления рейтингов игроков на основе предыдущего рейтинга и результатов игры. Это основная отправная точка, на которую вам придется опираться в зависимости от вашей ситуации.

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

Я не думаю, что будет индивидуальное решение для того, что вы хотите сделать, поскольку то, как вы оцениваете, будет зависеть от специфики вашего сценария.

person dwcoder    schedule 09.02.2015
comment
Это именно то, что я искал. Спасибо! - person user3037237; 09.02.2015
comment
Конечно. Пожалуйста, примите мой ответ как правильный, если он помог. - person dwcoder; 09.02.2015