Usaremos una librería llamada nflfastR. En esta librería, hay un play by play de todos los partidos que han habido esta temporada. En este momento, es la semana 10, por lo tanto, la información tendrá una fecha máxima de la semana 9.
Este RMD será usado para comprobar si mis teorías de la NFL son correctas o incorrectas.
#Primero vamos a limpiar la entrada de B. Robinson, ya que uno es Bijan Robinson y el otro es Brian Robinson.
pbp <- pbp %>%
mutate(receiver_player_name = ifelse(receiver_id == "00-0038542", "Bijan Robinson", receiver_player_name)) %>%
mutate(rusher_player_name = ifelse(rusher_id == "00-0038542", "Bijan Robinson", rusher_player_name)) %>%
mutate(receiver_player_name = ifelse(receiver_id == "00-0037746", "Brian Robinson", receiver_player_name)) %>%
mutate(rusher_player_name = ifelse(rusher_id == "00-0037746", "Brian Robinson", rusher_player_name))
EPA es Expected Points Added. Esta estadística tiene el propósito de medir el impacto de un juego, jugador o una jugada en términos de puntos esperados. El EPA se calcula comparando la situación antes y después de una jugada en términos de la probabilidad de anotar puntos. Por ejemplo, si un equipo logra un avance exitoso, un pase largo o una conversión de tercer down, se calcula cuánto aumentan las probabilidades de ese equipo para anotar puntos en función de la situación del juego, la distancia al touchdown, el tiempo restante, entre otros factores. Básicamente, mide la eficacia de un equipo, jugador, juego o jugada para avanzar el campo de manera éxitosa con la finalidad de obtener puntos.
#Aquí quiero ver quienes son los QBs con mayor EPA promedio en el juego terrestre
#Lo quiero filtrar por un mínimo de intentos, entonces estoy viendo como hacerlo.
rush_avg_epa <- group_by(pbp, rusher_player_name) %>% summarise(avg_epa = mean(epa), plays=n()) %>% filter(plays > 50) %>% arrange(desc(avg_epa))
rush_avg_epa
## # A tibble: 47 × 3
## rusher_player_name avg_epa plays
## <chr> <dbl> <int>
## 1 R.Mostert 0.133 109
## 2 K.Williams 0.100 97
## 3 D.Swift 0.0578 135
## 4 G.Edwards 0.0533 111
## 5 K.Hunt 0.0398 60
## 6 J.Hurts 0.0372 60
## 7 K.Herbert 0.0364 52
## 8 J.Hill 0.0268 58
## 9 D.Foreman 0.0256 86
## 10 J.Conner 0.00797 70
## # ℹ 37 more rows
write.csv(rush_avg_epa, file = "rush_avg_epa.csv", row.names = FALSE)
A día de hoy, 9 de noviembre del 2023, Bijan Robinson es el corredor #28 (-0.1013) en cuanto a Rushing EPA mientras que Christian McCaffrey es el corredor #18 (-0.0352) en esta métrica. En las últimas semanas de la temporada, estas siendo desde la semana 5, Bijan Robinson ha lidiado con una enfermedad, por lo tanto, su uso dentro del campo y su eficacia ha sido minimizada. Probablemente, sería apropiado que la muestra sea desde semana 1 a semana 5. Sin embargo, creo que es un sample size demasiado chico contra oponentes relativamente débiles en cuanto a su defensiva terrestre. Reconsiderando esto, tomaremos todas las jugadas posibles.
wrs_best_yac_epa <-
group_by(pbp, receiver_player_name, ) %>%
summarise(avg_yac_epa = mean(yac_epa, na.rm = TRUE), plays=n()) %>%
filter(plays > 10) %>%
arrange(desc(avg_yac_epa))
wrs_best_yac_epa
## # A tibble: 234 × 3
## receiver_player_name avg_yac_epa plays
## <chr> <dbl> <int>
## 1 D.Henry 1.34 21
## 2 J.McLaughlin 1.26 14
## 3 R.White 1.23 34
## 4 I.Pacheco 1.21 28
## 5 D.Achane 1.19 11
## 6 T.Etienne 1.17 35
## 7 Brian Robinson 1.17 19
## 8 A.Jones 1.12 22
## 9 L.Murray 1.11 12
## 10 Z.Moss 1.08 21
## # ℹ 224 more rows
write.csv(wrs_best_yac_epa, file = "wrs_best_yac_epa.csv", row.names = FALSE)
En este caso podemos ver como Bijan Robinson #49 (0.3764) ha sido menos eficiente que Christian McCaffrey #18 (0.9637) en cuanto a yardas después de la recepción. Sin embargo, esto puede ser sesgado por el volumen de recepciones que ellos tienen o la cantidad de recepciones detrás de la línea de golpeo. Vamos a analizar si en realidad es esto.
library(dplyr)
bijan_yac_epa <- pbp %>%
filter(receiver_player_name == "Bijan Robinson") %>%
summarise(mean_yac_epa = mean(yac_epa, na.rm = TRUE)) %>%
pull(mean_yac_epa)
bijan_yac_epa
## [1] 0.3764714
#Aquí quiero ver quienes son los QBs con mayor EPA promedio.
#Lo quiero filtrar por un mínimo de intentos, entonces estoy viendo como hacerlo.
qbs_avg_epa <- group_by(pbp, passer_player_name) %>% summarise(avg = mean(epa), plays=n()) %>% filter(plays > 50) %>% arrange(desc(avg))
qbs_avg_epa
## # A tibble: 41 × 3
## passer_player_name avg plays
## <chr> <dbl> <int>
## 1 B.Purdy 0.262 238
## 2 T.Tagovailoa 0.233 323
## 3 J.Allen 0.169 340
## 4 C.Stroud 0.142 300
## 5 J.Hurts 0.121 327
## 6 P.Mahomes 0.118 346
## 7 D.Prescott 0.108 287
## 8 J.Herbert 0.0941 303
## 9 T.Heinicke 0.0747 61
## 10 A.Dalton 0.0746 61
## # ℹ 31 more rows