ReLoad the saved data from the NB model run, which took 2.9 hours
load("~/DFS/kaggle/slow.RData")
# `WFinalFour` is the teams / ID table
# `nb_model` is the `mvglmmRank` model
Attach libraries
library(dplyr)
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
library(tibble)
library(mvglmmRank)
Loading required package: Matrix
library(knitr)
Utility function for parsing a row of mvglmmRank::game.pred output
.get_number <- function(text)
as.numeric(sub(pattern = "^.*: ", replacement = "", text))
Make a tibble of the six possible games
predictions <- tibble()
for (irow in 1:3) {
for (jrow in (irow + 1):4) {
team1_id <- as.character(WFinalFour$TeamID[irow])
team2_id <- as.character(WFinalFour$TeamID[jrow])
game_prediction <- capture.output(game.pred(
nb_model, team1_id, team2_id, neutral.site = TRUE))
pred_score_1 <- .get_number(game_prediction[2])
pred_score_2 <- .get_number(game_prediction[3])
spread_1 <- pred_score_2 - pred_score_1
spread_2 <- pred_score_1 - pred_score_2
over_under <- pred_score_1 + pred_score_2
win_prob_1 <- .get_number(game_prediction[9])
win_prob_2 <- 1 - win_prob_1
predictions <- predictions %>%
bind_rows(tibble(
team_1 = WFinalFour$TeamName[irow],
team_2 = WFinalFour$TeamName[jrow],
pred_score_1,
pred_score_2,
spread_1,
spread_2,
over_under,
win_prob_1,
win_prob_2
))
}
}
kable(predictions)
| Baylor |
Connecticut |
70.41 |
68.85 |
-1.56 |
1.56 |
139.26 |
0.561 |
0.439 |
| Baylor |
Notre Dame |
74.77 |
74.77 |
0.00 |
0.00 |
149.54 |
0.509 |
0.491 |
| Baylor |
Oregon |
75.61 |
71.40 |
-4.21 |
4.21 |
147.01 |
0.660 |
0.340 |
| Connecticut |
Notre Dame |
76.48 |
78.04 |
1.56 |
-1.56 |
154.52 |
0.448 |
0.552 |
| Connecticut |
Oregon |
77.32 |
74.68 |
-2.64 |
2.64 |
152.00 |
0.602 |
0.398 |
| Notre Dame |
Oregon |
83.24 |
79.03 |
-4.21 |
4.21 |
162.27 |
0.652 |
0.348 |
Session info
sessionInfo()
R version 3.5.3 (2019-03-11)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: ArcoLinuxD
Matrix products: default
BLAS: /usr/lib/libopenblasp-r0.3.5.so
LAPACK: /usr/lib/liblapack.so.3.8.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] knitr_1.22 mvglmmRank_1.2-2 Matrix_1.2-17 tibble_2.1.1
[5] dplyr_0.8.0.1
loaded via a namespace (and not attached):
[1] Rcpp_1.0.1 rstudioapi_0.10 magrittr_1.5 MASS_7.3-51.1
[5] tidyselect_0.2.5 lattice_0.20-38 R6_2.4.0 rlang_0.3.3
[9] highr_0.8 tools_3.5.3 grid_3.5.3 packrat_0.5.0
[13] xfun_0.5 htmltools_0.3.6 assertthat_0.2.1 digest_0.6.18
[17] numDeriv_2016.8-1 crayon_1.3.4 purrr_0.3.2 glue_1.3.1
[21] evaluate_0.13 rmarkdown_1.12 compiler_3.5.3 pillar_1.3.1
[25] pkgconfig_2.0.2
LS0tCnRpdGxlOiAiR29vZ2xlIENsb3VkICYgTkNBQcKuIE1MIENvbXBldGl0aW9uIDIwMTktV29tZW4ncyBGaW5hbCBGb3VyIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIyBSZUxvYWQgdGhlIHNhdmVkIGRhdGEgZnJvbSB0aGUgYE5CYCBtb2RlbCBydW4sIHdoaWNoIHRvb2sgMi45IGhvdXJzCmBgYHtyfQpsb2FkKCJ+L0RGUy9rYWdnbGUvc2xvdy5SRGF0YSIpCiMgYFdGaW5hbEZvdXJgIGlzIHRoZSB0ZWFtcyAvIElEIHRhYmxlCiMgYG5iX21vZGVsYCBpcyB0aGUgYG12Z2xtbVJhbmtgIG1vZGVsCmBgYAoKIyMgQXR0YWNoIGxpYnJhcmllcwpgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWJibGUpCmxpYnJhcnkobXZnbG1tUmFuaykKbGlicmFyeShrbml0cikKYGBgCiMjIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHBhcnNpbmcgYSByb3cgb2YgYG12Z2xtbVJhbms6OmdhbWUucHJlZGAgb3V0cHV0CmBgYHtyfQouZ2V0X251bWJlciA8LSBmdW5jdGlvbih0ZXh0KQogIGFzLm51bWVyaWMoc3ViKHBhdHRlcm4gPSAiXi4qOiAiLCByZXBsYWNlbWVudCA9ICIiLCB0ZXh0KSkKYGBgCgojIyBNYWtlIGEgdGliYmxlIG9mIHRoZSBzaXggcG9zc2libGUgZ2FtZXMKYGBge3J9CnByZWRpY3Rpb25zIDwtIHRpYmJsZSgpCmZvciAoaXJvdyBpbiAxOjMpIHsKICBmb3IgKGpyb3cgaW4gKGlyb3cgKyAxKTo0KSB7CiAgICB0ZWFtMV9pZCA8LSBhcy5jaGFyYWN0ZXIoV0ZpbmFsRm91ciRUZWFtSURbaXJvd10pCiAgICB0ZWFtMl9pZCA8LSBhcy5jaGFyYWN0ZXIoV0ZpbmFsRm91ciRUZWFtSURbanJvd10pCiAgICBnYW1lX3ByZWRpY3Rpb24gPC0gY2FwdHVyZS5vdXRwdXQoZ2FtZS5wcmVkKAogICAgICBuYl9tb2RlbCwgdGVhbTFfaWQsIHRlYW0yX2lkLCBuZXV0cmFsLnNpdGUgPSBUUlVFKSkKICAgIHByZWRfc2NvcmVfMSA8LSAuZ2V0X251bWJlcihnYW1lX3ByZWRpY3Rpb25bMl0pCiAgICBwcmVkX3Njb3JlXzIgPC0gLmdldF9udW1iZXIoZ2FtZV9wcmVkaWN0aW9uWzNdKQogICAgc3ByZWFkXzEgPC0gcHJlZF9zY29yZV8yIC0gcHJlZF9zY29yZV8xCiAgICBzcHJlYWRfMiA8LSBwcmVkX3Njb3JlXzEgLSBwcmVkX3Njb3JlXzIKICAgIG92ZXJfdW5kZXIgPC0gcHJlZF9zY29yZV8xICsgcHJlZF9zY29yZV8yCiAgICB3aW5fcHJvYl8xIDwtIC5nZXRfbnVtYmVyKGdhbWVfcHJlZGljdGlvbls5XSkKICAgIHdpbl9wcm9iXzIgPC0gMSAtIHdpbl9wcm9iXzEKICAgIAogICAgcHJlZGljdGlvbnMgPC0gcHJlZGljdGlvbnMgJT4lIAogICAgICBiaW5kX3Jvd3ModGliYmxlKAogICAgICAgIHRlYW1fMSA9IFdGaW5hbEZvdXIkVGVhbU5hbWVbaXJvd10sCiAgICAgICAgdGVhbV8yID0gV0ZpbmFsRm91ciRUZWFtTmFtZVtqcm93XSwKICAgICAgICBwcmVkX3Njb3JlXzEsCiAgICAgICAgcHJlZF9zY29yZV8yLAogICAgICAgIHNwcmVhZF8xLAogICAgICAgIHNwcmVhZF8yLAogICAgICAgIG92ZXJfdW5kZXIsCiAgICAgICAgd2luX3Byb2JfMSwKICAgICAgICB3aW5fcHJvYl8yCiAgICAgICkpCiAgfQp9CgprYWJsZShwcmVkaWN0aW9ucykKYGBgCgojIyBTZXNzaW9uIGluZm8KYGBge3J9CnNlc3Npb25JbmZvKCkKYGBgCg==