simulate_playoffs <- function (probability, sim) {
# Match 1
u1 <- runif (1 )
match1_winner <- ifelse (u1 < probability[1 ,8 ], 1 , 8 )
match1_loser <- ifelse (u1 < probability[1 ,8 ], 8 , 1 )
# Match 2
u2 <- runif (1 )
match2_winner <- ifelse (u2 < probability[4 ,5 ], 4 , 5 )
match2_loser <- ifelse (u2 < probability[4 ,5 ], 5 , 4 )
# Match 3
u3 <- runif (1 )
match3_winner <- ifelse (u3 < probability[2 ,7 ], 2 , 7 )
match3_loser <- ifelse (u3 < probability[2 ,7 ], 7 , 2 )
# Match 4
u4 <- runif (1 )
match4_winner <- ifelse (u4 < probability[3 ,6 ], 3 , 6 )
match4_loser <- ifelse (u4 < probability[3 ,6 ], 6 , 3 )
# Match 5
u5 <- runif (1 )
match5_winner <- ifelse (u5 < probability[match1_loser, match2_loser], match1_loser, match2_loser)
exit_round <- data.frame (
number = ifelse (u5 < probability[match1_loser, match2_loser], match2_loser, match1_loser),
round = 2
)
# Match 6
u6 <- runif (1 )
match6_winner <- ifelse (u6 < probability[match3_loser, match4_loser], match3_loser, match4_loser)
exit_round <- exit_round |>
rbind (data.frame (
number = ifelse (u6 < probability[match3_loser, match4_loser], match4_loser, match3_loser),
round = 2
))
# Match 7
u7 <- runif (1 )
match7_winner <- ifelse (u7 < probability[match1_winner, match2_winner], match1_winner, match2_winner)
match7_loser <- ifelse (u7 < probability[match1_winner, match2_winner], match2_winner, match1_winner)
# Match 8
u8 <- runif (1 )
match8_winner <- ifelse (u8 < probability[match3_winner, match4_winner], match3_winner, match4_winner)
match8_loser <- ifelse (u8 < probability[match3_winner, match4_winner], match4_winner, match3_winner)
# Match 9
u9 <- runif (1 )
match9_winner <- ifelse (u9 < probability[match6_winner, match7_loser], match6_winner, match7_loser)
exit_round <- exit_round |>
rbind (data.frame (
number = ifelse (u9 < probability[match6_winner, match7_loser], match7_loser, match6_winner),
round = 3
))
# Match 10
u10 <- runif (1 )
match10_winner <- ifelse (u10 < probability[match5_winner, match8_loser], match5_winner, match8_loser)
exit_round <- exit_round |>
rbind (data.frame (
number = ifelse (u10 < probability[match5_winner, match8_loser], match8_loser, match5_winner),
round = 3
))
# Match 11
u11 <- runif (1 )
match11_winner <- ifelse (u11 < probability[match7_winner, match8_winner], match7_winner, match8_winner)
match11_loser <- ifelse (u11 < probability[match7_winner, match8_winner], match8_winner, match7_winner)
# Match 12
u12 <- runif (1 )
match12_winner <- ifelse (u12 < probability[match10_winner, match9_winner], match10_winner, match9_winner)
exit_round <- exit_round |>
rbind (data.frame (
number = ifelse (u12 < probability[match10_winner, match9_winner], match9_winner, match10_winner),
round = 4
))
# Match 13
u13 <- runif (1 )
match13_winner <- ifelse (u13 < probability[match12_winner, match11_loser], match12_winner, match11_loser)
exit_round <- exit_round |>
rbind (data.frame (
number = ifelse (u13 < probability[match12_winner, match11_loser], match11_loser, match12_winner),
round = 5
))
# Finals
uf_1 <- runif (1 )
final_game1_w <- ifelse (uf_1 < probability[match11_winner, match13_winner], match11_winner, match13_winner)
uf_2 <- runif (1 )
final_game2_w <- ifelse (uf_2 < probability[match11_winner, match13_winner], match11_winner, match13_winner)
if (! (final_game1_w == final_game2_w)) {
uf_3 <- runif (1 )
final_game3_w <- ifelse (uf_3 < probability[match11_winner, match13_winner], match11_winner, match13_winner)
}
winner <- ifelse (! exists ("final_game3_w" ), final_game2_w, final_game3_w)
runnerup <- setdiff (c (match11_winner, match13_winner), winner)
exit_round <- exit_round |>
rbind (data.frame (
number = c (runnerup, winner),
round = c (6 ,7 )
))
exit_round$ sim = sim
return (exit_round)
}
# Large number of simulations
n_sims <- 1000
exit_round <- list ()
for (i in 1 : n_sims) {
exit_round[[i]] <- simulate_playoffs (probability, i)
}
exits <- bind_rows (exit_round) |>
select (sim, round, number) |>
arrange (sim, round, number)