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))