2015-02-09 8 views
0

Я анализирую некоторые спортивные данные, и у меня есть набор записей о победе/потере для 40 команд. Я хотел бы получить рейтинг, где каждая победа взвешивается силой противника. Это должно быть несколько итеративных/рекурсивных вещей, где веса и ряды обновляются на каждой итерации до конвергенции. Кто-нибудь знает, существует ли существующая функция или пакет для такого рода вещей? Я предполагаю, что это будет не спорт-специфический пакет, но я думаю, что это нечто общее для многих областей.Функция R для взвешивания команд силой противника?

EDIT:

Вот несколько примеров данных. Есть 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)) 

Из этих данных команда А выиграла 3/4, B выиграл 1/4, С, D и Е каждый выиграл 2/4. Но команда D била A, тогда как C и E все проиграли A. Таким образом, интуитивно D следует оценивать чуть выше C и E, так как одна из его побед пришла к самому высокому рейтингующемуся сопернику. Точно так же команда C проиграла команде B (единственная команда с выигрышем только выиграла), поэтому интуитивно она должна быть ранжирована ниже D и E.

Я пытаюсь выяснить, как лучше всего присвоить ранги (например, от - 1 к 1, или на основе вероятности выигрыша, или количества потерь и т. Д.), А затем как лучше всего перегрузить каждую команду не только на основе количества побед/потерь, но и в ранге противника, которого они победили.

+2

Как бы то ни было, это довольно широкий вопрос. Я бы предположил, что вы добавляете какой-то код и/или данные, или это, вероятно, будет закрыто. – nrussell

+0

Я не уверен, почему это так широко. Я просто ищу базовую систему ранжирования команд, которая весит силой противника/расписания, но которая итеративно вычисляет силу, основанную на ранжировании предыдущей итерации. Это распространено во всех видах спорта, я просто не могу найти встроенную функцию R, которая может это сделать. – user3037237

+1

@ user3037237 Пожалуйста, прочитайте [** о SO **] (http://stackoverflow.com/tour): «Включите сведения о том, что вы пробовали»; «Не спрашивайте ... [q] uestions, на которые вы не пытались найти ответ (покажите свою работу!)». Также читайте [** Какие темы я могу задать здесь? **] (http://stackoverflow.com/help/on-topic): «Вопросы, предлагающие нам рекомендовать или найти инструмент [..], библиотеку программного обеспечения, [...] находятся вне темы ». – Henrik

ответ

1

Попробуйте PlayerRatings package.

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

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

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

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

+1

Это именно то, что я искал. Благодаря! – user3037237

+1

Несомненно. Примите мой ответ как правильный, если это поможет. – dwcoder