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
= "Hermantown"
team_1 = "Mahtomedi"
team_2 = "Orono"
team_3 = "Alexandria"
team_4
# Set up empty vector to store winner in
= rep(NA, 10000)
champion
for(i in 1:10000){
### SIMULATE THE SEMIFINALS
# Predict Game 1 winner: team_1 vs. team_4
= predict(elo_reg_season, data.frame(home = team_1, visitor = team_4))
p_game_1 = ifelse(runif(1, min = 0, max = 1) <= p_game_1, team_1, team_4)
w_game_1
# Predict Game 2 winner: team_2 vs. team_3
= predict(elo_reg_season, data.frame(home = team_2, visitor = team_3))
p_game_2 = ifelse(runif(1, min = 0, max = 1) <= p_game_2, team_2, team_3)
w_game_2
### SIMULATE THE FINALS
# Predict Game 3 winner: winner Game 1 vs. winner Game 2
= predict(elo_reg_season, data.frame(home = w_game_1, visitor = w_game_2))
p_game_3 = ifelse(runif(1, min = 0, max = 1) <= p_game_3, w_game_1, w_game_2)
w_game_3
= w_game_3
champion[i]
}
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
= "Minnetonka"
team_1 = "Edina"
team_2 = "Duluth East"
team_3 = "Centennial"
team_4
# Set up empty vector to store winner in
= rep(NA, 10000)
champion
for(i in 1:10000){
### SIMULATE THE SEMIFINALS
# Predict Game 1 winner: team_1 vs. team_4
= predict(elo_reg_season, data.frame(home = team_1, visitor = team_4))
p_game_1 = ifelse(runif(1, min = 0, max = 1) <= p_game_1, team_1, team_4)
w_game_1
# Predict Game 2 winner: team_2 vs. team_3
= predict(elo_reg_season, data.frame(home = team_2, visitor = team_3))
p_game_2 = ifelse(runif(1, min = 0, max = 1) <= p_game_2, team_2, team_3)
w_game_2
### SIMULATE THE FINALS
# Predict Game 3 winner: winner Game 1 vs. winner Game 2
= predict(elo_reg_season, data.frame(home = w_game_1, visitor = w_game_2))
p_game_3 = ifelse(runif(1, min = 0, max = 1) <= p_game_3, w_game_1, w_game_2)
w_game_3
= w_game_3
champion[i]
}
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.