source("fast3PRanking.R") source("fastELO.R") source("eigenvalueRanking.R") source("formattedOutput.R") db_games <- readRDS("db_data.Rda") # Seasons s201516_start <- as.Date("2015-08-24") s201516_end <- as.Date("2016-05-14") s201617_start <- as.Date("2016-08-26") s201617_end <- as.Date("2017-05-20") s201718_start <- as.Date("2017-08-18") s201718_end <- as.Date("2018-05-12") s201819_start <- as.Date("2018-08-24") s201819_end <- as.Date("2019-05-18") s201920_start <- as.Date("2019-08-16") s201920_1half <- as.Date("2019-12-22") db_201516 <- subset(db_games, Date >= s201516_start & Date <= s201516_end & League == "Bundesliga") db_201617 <- subset(db_games, Date >= s201617_start & Date <= s201617_end & League == "Bundesliga") db_201718 <- subset(db_games, Date >= s201718_start & Date <= s201718_end & League == "Bundesliga") db_201819 <- subset(db_games, Date >= s201819_start & Date <= s201819_end & League == "Bundesliga") db_201920_1half <- subset(db_games, Date >= s201920_start & Date <= s201920_1half & League == "Bundesliga") training_games <- db_201516 threeP <- fast3PRanking(training_games)[[2]] cat("\n Three Point Ranking:\n") printStandings(threeP) elo5k <- fastELO(training_games, 5) cat("\n ELO (k=5):\n") printStandings(elo5k) elo10k <- fastELO(training_games, 10) cat("\n ELO (k=10):\n") printStandings(elo10k) elo30k <- fastELO(training_games, 30) cat("\n ELO (k=30):\n") printStandings(elo30k) elo50k <- fastELO(training_games, 50) cat("\n ELO (k=50):\n") printStandings(elo50k) elo100k <- fastELO(training_games, 100) cat("\n ELO (k=100):\n") printStandings(elo100k) elo500k <- fastELO(training_games, 500) cat("\n ELO (k=500):\n") printStandings(elo500k) direct_method <- directMethod(training_games) cat("\n Direct method:\n") printStandings(direct_method) inverse_power <- invPowerMethod(training_games) cat("\n Inverse power method:\n") printStandings(inverse_power) games <- subset(db_games, Date >= s201617_start & Date <= s201920_1half & League == "Bundesliga") games <- na.omit(games) games <- games[order(games$Date),] points3P <- 0 pointsELO5k <- 0 pointsELO10k <- 0 pointsELO30k <- 0 pointsELO50k <- 0 pointsELO100k <- 0 pointsELO500k <- 0 pointsDM <- 0 pointsIPM <- 0 games_evaluated <- 0 all_games <- training_games for (i in 1:nrow(games)) # loop over all rows (games) { date <- games$Date homeTeam <- games$HomeTeam[i] awayTeam <- games$AwayTeam[i] if ((homeTeam %in% names(threeP)) && (awayTeam %in% names(threeP))) { # forecast points res <- sign(games$FTHG[i] - games$FTAG[i]) if (res != 0) { games_evaluated <- games_evaluated + 1 if (res == sign(threeP[homeTeam]-threeP[awayTeam])) { points3P <- points3P + 1 } if (res == sign(elo5k[homeTeam]-elo5k[awayTeam])) { pointsELO5k <- pointsELO5k + 1 } if (res == sign(elo10k[homeTeam]-elo10k[awayTeam])) { pointsELO10k <- pointsELO10k + 1 } if (res == sign(elo30k[homeTeam]-elo30k[awayTeam])) { pointsELO30k <- pointsELO30k + 1 } if (res == sign(elo50k[homeTeam]-elo50k[awayTeam])) { pointsELO50k <- pointsELO50k + 1 } if (res == sign(elo100k[homeTeam]-elo100k[awayTeam])) { pointsELO100k <- pointsELO100k + 1 } if (res == sign(elo500k[homeTeam]-elo500k[awayTeam])) { pointsELO500k <- pointsELO500k + 1 } if (res == sign(direct_method[homeTeam]-direct_method[awayTeam])) { pointsDM <- pointsDM + 1 } if (res == sign(inverse_power[homeTeam]-inverse_power[awayTeam])) { pointsIPM <- pointsIPM + 1 } } # update rankings threeP <- update3PRanking(games[i,], threeP) elo5k <- fastELO(games[i,], 5, elos = elo5k) elo10k <- fastELO(games[i,], 10, elos = elo10k) elo30k <- fastELO(games[i,], 30, elos = elo30k) elo50k <- fastELO(games[i,], 50, elos = elo50k) elo100k <- fastELO(games[i,], 100, elos = elo100k) elo500k <- fastELO(games[i,], 500, elos = elo500k) all_games <- rbind(all_games, games[i,]) direct_method <- directMethod(all_games) inverse_power <- invPowerMethod(all_games) print(i) } } cat("\n Three Point Ranking:\n") printStandings(threeP) cat("\n ELO (k=5):\n") printStandings(elo5k) cat("\n ELO (k=10):\n") printStandings(elo10k) cat("\n ELO (k=30):\n") printStandings(elo30k) cat("\n ELO (k=50):\n") printStandings(elo50k) cat("\n ELO (k=100):\n") printStandings(elo100k) cat("\n ELO (k=500):\n") printStandings(elo500k) cat("\n Direct method:\n") printStandings(direct_method) cat("\n Inverse power method:\n") printStandings(inverse_power) cat("\n") print(paste0("Games evaluated: ", games_evaluated)) print(paste0("Points 3P-Ranking: ", points3P, "(", round(points3P/games_evaluated*100, 2), "%)")) print(paste0("Points ELO (k=5): ", pointsELO5k, "(", round(pointsELO5k/games_evaluated*100, 2), "%)")) print(paste0("Points ELO (k=10): ", pointsELO10k, "(", round(pointsELO10k/games_evaluated*100, 2), "%)")) print(paste0("Points ELO (k=30): ", pointsELO30k, "(", round(pointsELO30k/games_evaluated*100, 2), "%)")) print(paste0("Points ELO (k=50): ", pointsELO50k, "(", round(pointsELO50k/games_evaluated*100, 2), "%)")) print(paste0("Points ELO (k=100): ", pointsELO100k, "(", round(pointsELO100k/games_evaluated*100, 2), "%)")) print(paste0("Points ELO (k=500): ", pointsELO500k, "(", round(pointsELO500k/games_evaluated*100, 2), "%)")) print(paste0("Points direct method: ", pointsDM, "(", round(pointsDM/games_evaluated*100, 2), "%)")) print(paste0("Points inverse power method: ", pointsIPM, "(", round(pointsIPM/games_evaluated*100, 2), "%)"))