This chapter illustrates graphing the famous runs expectancy matrix.
First load some required packages.
library(readr)
library(knitr)
library(ggplot2)
To obtain the runs expectancy matrix, one needs the Retrosheet play-by-play data for a particular season. I have computed the runs expectancies using 2015 season data. I have stored the data into a csv file that we read into R and store in the variable RR.
RR <- read_csv("https://bayesball.github.io/VB/data/runs2015.csv")
Use the kable function to display the data frame containing the runs expectancies.
kable(RR)
| X1 | STATE | Mean | Outs | Bases | O |
|---|---|---|---|---|---|
| 1 | 000 0 | 0.4738828 | OUTS = 0 | 000 | 0 |
| 2 | 000 1 | 0.2514400 | OUTS = 1 | 000 | 1 |
| 3 | 000 2 | 0.0988068 | OUTS = 2 | 000 | 2 |
| 4 | 001 0 | 1.4011407 | OUTS = 0 | 003 | 0 |
| 5 | 001 1 | 0.9643617 | OUTS = 1 | 003 | 1 |
| 6 | 001 2 | 0.3630464 | OUTS = 2 | 003 | 2 |
| 7 | 010 0 | 1.1109418 | OUTS = 0 | 020 | 0 |
| 8 | 010 1 | 0.6637977 | OUTS = 1 | 020 | 1 |
| 9 | 010 2 | 0.3036562 | OUTS = 2 | 020 | 2 |
| 10 | 011 0 | 2.0450000 | OUTS = 0 | 023 | 0 |
| 11 | 011 1 | 1.3655761 | OUTS = 1 | 023 | 1 |
| 12 | 011 2 | 0.5598688 | OUTS = 2 | 023 | 2 |
| 13 | 100 0 | 0.8577522 | OUTS = 0 | 100 | 0 |
| 14 | 100 1 | 0.5046115 | OUTS = 1 | 100 | 1 |
| 15 | 100 2 | 0.2266157 | OUTS = 2 | 100 | 2 |
| 16 | 101 0 | 1.7113951 | OUTS = 0 | 103 | 0 |
| 17 | 101 1 | 1.1209412 | OUTS = 1 | 103 | 1 |
| 18 | 101 2 | 0.4528302 | OUTS = 2 | 103 | 2 |
| 19 | 110 0 | 1.4727344 | OUTS = 0 | 120 | 0 |
| 20 | 110 1 | 0.8881782 | OUTS = 1 | 120 | 1 |
| 21 | 110 2 | 0.4296086 | OUTS = 2 | 120 | 2 |
| 22 | 111 0 | 2.2865412 | OUTS = 0 | 123 | 0 |
| 23 | 111 1 | 1.5900901 | OUTS = 1 | 123 | 1 |
| 24 | 111 2 | 0.7925729 | OUTS = 2 | 123 | 2 |
Here I am constructing a scatterplot of the Bases variable against the mean runs variable Mean where the plotting symbol is the O variable (number of outs).
ggplot(RR, aes(Bases, Mean, label=O)) +
geom_point(size=3) +
geom_label(color="black", size=4,
fontface="bold") +
ylab("Runs Scored in \n Remainder of Inning") +
xlab("Runners on Base") +
theme(axis.text = element_text(size=16),
axis.title = element_text(size=16))