4.8 How Many Runs for a Win?

“ten-runs-equal-one-win” rule of thumb

Earlier:

\[\widehat{W_{\text{pct}}} = 0.5 + 0.0006*RD\]

  • \(RD = 0 \rightarrow W_{\text{pct}} = 0.5\)
    • Over 162 games: 81 wins
  • \(RD = +10 \rightarrow W_{\text{pct}} = 0.506\)
    • Over 162 games: 82 wins

4.8.1 Calculus

Ralph Caola derived the number of extra runs needed to get an extra win in a more rigorous way using calculus

\[W = \frac{G \cdot R^{2}}{R^{2} + RA^{2}}\]

$$ \[\begin{array}{rcl} \frac{\partial W}{\partial R} & = & \frac{\partial}{\partial R}\frac{G \cdot R^{2}}{R^{2} + RA^{2}} \\ ~ & = & \frac{2 \cdot G \cdot R \cdot RA^{2}}{(R^{2} + RA^{2})^{2}} \\ \end{array}\]

$$

calculus in R!
D(expression(G * R ^ 2 / (R ^ 2 + RA ^ 2)), "R")
## G * (2 * R)/(R^2 + RA^2) - G * R^2 * (2 * R)/(R^2 + RA^2)^2

4.8.2 Incremental Runs per Win

\[IR/W = \frac{(R^{2} + RA^{2})^{2}}{2 \cdot G \cdot R \cdot RA^{2}}\]

We can make a user-defined function (and assuming rate statistics “runs per game” and “runs allowed per game” to remove \(G\)):

IR <- function(RS = 5, RA = 5) {
  (RS ^ 2 + RA ^ 2)^2 / (2 * RS * RA ^ 2)
}

With two inputs, we will use a grid search to express different numbers of runs scored and runs allowed.

ir_table <- tidyr::expand_grid(RS = 1:7, RA = 1:7) |>
  mutate(IRW = IR(RS, RA)) |>
  pivot_wider(names_from = RA, values_from = "IRW",
              names_prefix = "RA=")
Incremental runs per win
as posed by Ralph Caola
RS RA=1 RA=2 RA=3 RA=4 RA=5 RA=6 RA=7
1 2.0 3.1 5.6 9.0 13.5 19.0 25.5
2 6.2 4.0 4.7 6.2 8.4 11.1 14.3
3 16.7 7.0 6.0 6.5 7.7 9.4 11.4
4 36.1 12.5 8.7 8.0 8.4 9.4 10.8
5 67.6 21.0 12.8 10.5 10.0 10.3 11.2
6 114.1 33.3 18.8 14.1 12.4 12.0 12.3
7 178.6 50.2 26.7 18.9 15.6 14.3 14.0
table code
ir_table |>
  gt() |>
  cols_align(align = "center") |>
  data_color(columns = -RS,
             palette = "viridis") |>
  fmt_number(columns = -RS,
             decimals = 1) |>
  tab_header(title = "Incremental runs per win",
             subtitle = "as posed by Ralph Caola")