elo Paket / fehlende Wahrscheinlichkeiten berechnen

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
Schlumpinator
Beiträge: 7
Registriert: So Mai 03, 2020 1:20 pm

elo Paket / fehlende Wahrscheinlichkeiten berechnen

Beitrag von Schlumpinator »

Hallo liebes Forum,

mit Hilfe des Pakets "elo" gelingt es mir, Elo-Werte und Match-Up Siegwahrscheinlichkeiten zu berechnen. Das mache ich mit dem folgenden Skript:

Code: Alles auswählen

library(tidyverse)

matches <- read.csv2("Ergebnisse1920.csv")

#Sieg Heim/Sieg Auswärts/Unentschieden in 1/0/0.5
matches <- matches %>% 
  mutate(result = ifelse(result == "A",0,
                         ifelse(result =="H",1,0.5)))
# Teams umformen
matches <- matches %>%
  mutate(hometeam = as.character(hometeam)) %>%
  mutate(awayteam = as.character(awayteam)) 


# Liste aller Teams erstellen
teams <- data.frame(team = unique(c(matches$hometeam, matches$awayteam)))

# Startelo 1500 zuweisen
teams <- teams %>%
  mutate(elo = 1500)


library(elo)

for (i in seq_len(nrow(matches))) {
  match <- matches[i, ]
  
  # Elo-Punkte vor dem Spiel
  teamA_elo <- subset(teams, team == match$hometeam)$elo
  teamB_elo <- subset(teams, team == match$awayteam)$elo
  
  # Elo Update
  new_elo <- elo.calc(wins.A = match$result,
                      elo.A = teamA_elo,
                      elo.B = teamB_elo,
                      k = 30)
  
  # Data.Frame mit 
  # Elo von Team A in Reihe 1 Zeile 1
  # Elo von Team B in Reihe 1 Zeile 2
  teamA_new_elo <- new_elo[1, 1]
  teamB_new_elo <- new_elo[1, 2]
  
  # Elo-Update für Team A und Team B
  # Alle anderen Teams bleiben gleich
  teams <- teams %>%
    mutate(elo = if_else(team == match$hometeam, teamA_new_elo,
                         if_else(team == match$awayteam, teamB_new_elo, elo)))
}

# Nach Elo absteigend sortieren
teams <- teams %>%
  arrange(-elo)
Um die Siegwahrscheinlichkeit in einem Match-Up zu bestimmen verwende ich:

Code: Alles auswählen

TeamA <- subset(teams, team == "Dortmund")$elo
TeamB <- subset(teams, team == "Freiburg")$elo
elo.prob(TeamA, TeamB)

Wie ihr seht, benutze ich dafür die drei Situationen Sieg Heim / Sieg Auswärts / Unentschieden mit 1/0/0.5
Nun möchte ich aber gerne von vornherein mit Match-Up Wahrscheinlichkeiten rechnen, um dann fehlende Match-Up Wahrscheinlichkeiten zu berechnen und nicht mit den drei Zuständen. Beispielsweise würde dann das matches$result den Wert 0.75 annehmen. Hoffentlich konnte ich mich verständlich ausdrücken.

Habt ihr eine Idee, wie das möglich ist? Und auch wichtig: Denkt ihr, das ergibt Sinn?
Im Anhang habe ich die Ergebnisse1920.csv.csv hochgeladen.

Liebe Grüße
Dateianhänge
Ergebnisse1920.CSV
(6.44 KiB) 68-mal heruntergeladen
Antworten