| Team | Original Elo | Updated Elo |
|---|---|---|
| Hermantown | 1639.196 | 1657.756 |
| Orono | 1624.538 | 1624.505 |
| Mahtomedi | 1609.513 | 1619.517 |
| Alexandria | 1587.179 | 1571.723 |
| Monticello | 1571.198 | 1569.096 |
| Thief River Falls | 1562.803 | 1568.797 |
| Mankato East | 1551.141 | 1549.453 |
| Litchfield/Dassel-Cokato | 1530.773 | 1515.494 |
./assets/body-header.qmd
In a previous post, I used Monte Carlo simulation to predict the winner of the 2018 Minnesota State High School Boys Hockey tournament. Now that the quarterfinal games have been played, I thought I would update my predictions. The process for this is to:
- Update the Elo ratings based on the quarterfinal games;
- Re-simulate the tournament
I simulated the Class A state tournament 10,000 times using the same process as described in my previous post.
Class A Tournament
# Enter teams in rank order
team_1 = "Hermantown"
team_2 = "Mahtomedi"
team_3 = "Orono"
team_4 = "Alexandria"
# Set up empty vector to store winner in
champion = rep(NA, 10000)
for(i in 1:10000){
### SIMULATE THE SEMIFINALS
# Predict Game 1 winner: team_1 vs. team_4
p_game_1 = predict(elo_reg_season, data.frame(home = team_1, visitor = team_4))
w_game_1 = ifelse(runif(1, min = 0, max = 1) <= p_game_1, team_1, team_4)
# Predict Game 2 winner: team_2 vs. team_3
p_game_2 = predict(elo_reg_season, data.frame(home = team_2, visitor = team_3))
w_game_2 = ifelse(runif(1, min = 0, max = 1) <= p_game_2, team_2, team_3)
### SIMULATE THE FINALS
# Predict Game 3 winner: winner Game 1 vs. winner Game 2
p_game_3 = predict(elo_reg_season, data.frame(home = w_game_1, visitor = w_game_2))
w_game_3 = ifelse(runif(1, min = 0, max = 1) <= p_game_3, w_game_1, w_game_2)
champion[i] = w_game_3
}| Team | Original Probability | Updated Probability |
|---|---|---|
| Hermantown | 0.1987 | 0.3214 |
| Orono | 0.1802 | 0.2671 |
| Mahtomedi | 0.1127 | 0.2415 |
| Alexandria | 0.1086 | 0.1700 |
| Monticello | 0.1127 | 0.0000 |
| Thief River Falls | 0.0939 | 0.0000 |
| Mankato East | 0.0812 | 0.0000 |
| Litchfield/Dassel-Cokato | 0.0635 | 0.0000 |
Based on these simulations, Hermantown is still the favorite, and Mahtomedi and Orono also have a chance of winning the Class A tournament.
Class AA Tournament
| Team | Original Elo | Updated Elo |
|---|---|---|
| Edina | 1718.589 | 1741.221 |
| Minnetonka | 1716.570 | 1711.781 |
| St. Thomas Academy | 1691.315 | 1710.036 |
| Duluth East | 1693.757 | 1692.917 |
| STMA | 1655.561 | 1643.501 |
| Centennial | 1625.291 | 1618.199 |
| Lakeville North | 1578.414 | 1569.408 |
| Hill-Murray | 1557.501 | 1549.936 |
# Enter teams in rank order
team_1 = "Minnetonka"
team_2 = "Edina"
team_3 = "Duluth East"
team_4 = "Centennial"
# Set up empty vector to store winner in
champion = rep(NA, 10000)
for(i in 1:10000){
### SIMULATE THE SEMIFINALS
# Predict Game 1 winner: team_1 vs. team_4
p_game_1 = predict(elo_reg_season, data.frame(home = team_1, visitor = team_4))
w_game_1 = ifelse(runif(1, min = 0, max = 1) <= p_game_1, team_1, team_4)
# Predict Game 2 winner: team_2 vs. team_3
p_game_2 = predict(elo_reg_season, data.frame(home = team_2, visitor = team_3))
w_game_2 = ifelse(runif(1, min = 0, max = 1) <= p_game_2, team_2, team_3)
### SIMULATE THE FINALS
# Predict Game 3 winner: winner Game 1 vs. winner Game 2
p_game_3 = predict(elo_reg_season, data.frame(home = w_game_1, visitor = w_game_2))
w_game_3 = ifelse(runif(1, min = 0, max = 1) <= p_game_3, w_game_1, w_game_2)
champion[i] = w_game_3
}| Team | Original Probability | Updated Probability |
|---|---|---|
| Edina | 0.2083 | 0.3113 |
| Minnetonka | 0.1852 | 0.2901 |
| St. Thomas Academy | 0.1495 | 0.2487 |
| Duluth East | 0.0701 | 0.1499 |
| STMA | 0.2098 | 0.0000 |
| Centennial | 0.1016 | 0.0000 |
| Lakeville North | 0.0416 | 0.0000 |
| Hill-Murray | 0.0339 | 0.0000 |
St. Thomas Academy’s loss to Centennial really shook things up. Edina and Minnetonka are now the favorites in the Class AA tournament, with Duluth East a not so distant third.