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
