Volume 1 Stuff+

pitch_map <- c(
  "1"  = "Fastball",
  "2"  = "Fastball",
  "3"  = "Slider",
  "4"  = "Slider",
  "5"  = "Changeup",
  "6"  = "Changeup",
  "7"  = "Fastball",
  "8"  = "Fastball",
  "9"  = "Slider",
  "10" = "Slider",
  "11" = "Changeup",
  "12" = "Changeup",
  "13" = "Fastball"
)

Stuff+ Weights

bullpen <- bullpen %>%
  mutate(
    stuff_score = case_when(
      Pitch_Type == "Fastball" ~ (0.4*velo_z + 0.4*spin_z + 0.1*vbreak_z - 0.1*abs(hbreak_z)),
      Pitch_Type == "Slider"   ~ (0.2*velo_z + 0.2*spin_z + 0.3*vbreak_z - 0.2*abs(hbreak_z)),
      Pitch_Type == "Changeup" ~ (0.2*velo_z + 0.2*spin_z + 0.3*vbreak_z - 0.2*abs(hbreak_z)),
      TRUE ~ (velo_z + spin_z + vbreak_z - abs(hbreak_z))/4
    )
  )

Top 10 Pitches Ranked by Stuff+

## # A tibble: 10 × 6
##    Pitch_Type Pitch_Speed_mph Total_Spin_rpm IVB_in HB_in stuff_plus
##    <chr>                <dbl>          <int>  <dbl> <dbl>      <dbl>
##  1 Slider                77.8           2358   -5.4 -21.6      113. 
##  2 Fastball              87.7           2230   16.8  11.1      113. 
##  3 Slider                77.5           2309   -0.4 -17.9      112. 
##  4 Changeup              84.3           1770   15    10.4      111. 
##  5 Changeup              83.8           1919    8.1  16.9      110. 
##  6 Fastball              86.8           2182   18.3  10.4      107. 
##  7 Fastball              87.7           2053   20.3   9.6      106. 
##  8 Changeup              82.2           1785   18.1   7.8      101. 
##  9 Fastball              87.2           1994   20.3   7.3       99.0
## 10 Slider                77.5           2291   -8.5 -21.5       90.6
## # A tibble: 3 × 2
##   Pitch_Type avg_stuff_plus
##   <chr>               <dbl>
## 1 Fastball            101. 
## 2 Changeup             99.2
## 3 Slider               99.0

The density plot shows where the most pitches land for Stuff+ scores, big peaks mean lots of pitches bunched at that score. You can compare these to see where each pitch varies overall, compare, and see where pitches could be lacking