A linha Mendoza | R-bloggers

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

[ad_1]

o Linha Mendoza é um termo do beisebol. Nomeado após Mario Mendoza, refere-se ao limite da rebatida incompetente. Freqüentemente é considerada uma média de rebatidas de 0,200, embora todas as fontes que consultei se certificassem de que a média da carreira de Mendoza era na verdade um pouco melhor: 0,215.

Esta postagem explora algumas questões relacionadas à linha Mendoza:

  • Mario Mendoza era realmente tão mau a ponto de justificar a expressão ser nomeada em sua homenagem?
  • Quantos jogadores caíram abaixo da linha de Mendoza a cada ano?
  • Como seria a linha Mendoza se permitíssemos que ela mudasse dinamicamente?

Todo o código para esta postagem pode ser encontrado aqui.

(Embargo: Não conheço beisebol bem, então algumas das suposições ou conclusões que faço a seguir podem não ser boas. Se eu cometer um erro, me avise!)

Os dados

o Lahman pacote no CRAN contém todas as estatísticas de beisebol de 1871 a 2019. Usaremos o Batting quadro de dados para estatísticas e o People quadro de dados para nomes de jogadores.

library(Lahman)
library(tidyverse)
data(Batting)
data(People)

# add AVG to Batting
Batting$AVG 

First, let’s look for Mario Mendoza and verify that his batting average is indeed .215:

 
# find Mario Mendoza in People
People %>% filter(nameFirst == "Mario" & nameLast == "Mendoza")
# his ID is mendoma01

Batting %>% filter(playerID == "mendoma01") %>%
  summarize(career_avg = sum(H) / sum(AB))
#   career_avg
# 1  0.2146597

Mario Mendoza era realmente tão mau a ponto de justificar a expressão ser nomeada em sua homenagem?

Vamos calcular as médias de rebatidas da carreira dos jogadores e limitar nosso conjunto de dados apenas aos jogadores com pelo menos 1.000 rebatidas em suas carreiras:

 
# Batting average for players with >= 1000 AB
avg_df % group_by(playerID) %>%
  summarize(tot_AB = sum(AB), career_avg = sum(H) / sum(AB)) %>%
  filter(tot_AB >= 1000) %>%
  left_join(People, by = "playerID") %>%
  select(playerID, tot_AB, career_avg, nameFirst, nameLast) %>%
  arrange(desc(career_avg))

Vejamos os 10 melhores jogadores por média de rebatidas: devemos ver alguns nomes famosos lá! (Se não, talvez 1000 ABs não seja um critério rigoroso o suficiente para descartar o tamanho pequeno da amostra?)

 
# top 10
head(avg_df, n = 10)
# # A tibble: 10 x 5
#    playerID  tot_AB career_avg nameFirst    nameLast 
#                             
#  1 cobbty01   11436      0.366 Ty           Cobb     
#  2 barnero01   2391      0.360 Ross         Barnes   
#  3 hornsro01   8173      0.358 Rogers       Hornsby  
#  4 jacksjo01   4981      0.356 Shoeless Joe Jackson  
#  5 meyerle01   1443      0.356 Levi         Meyerle  
#  6 odoulle01   3264      0.349 Lefty        O'Doul   
#  7 delahed01   7510      0.346 Ed           Delahanty
#  8 mcveyca01   2513      0.346 Cal          McVey    
#  9 speaktr01  10195      0.345 Tris         Speaker  
# 10 hamilbi01   6283      0.344 Billy        Hamilton 

A seguir, vamos olhar para os 10 últimos jogadores por média de acertos:

 
# bottom 10
tail(avg_df, n = 10)
# # A tibble: 10 x 5
#    playerID  tot_AB career_avg nameFirst nameLast
#                         
#  1 seaveto01   1315      0.154 Tom       Seaver  
#  2 donahre01   1150      0.152 Red       Donahue 
#  3 fellebo01   1282      0.151 Bob       Feller  
#  4 grovele01   1369      0.148 Lefty     Grove   
#  5 suttodo01   1354      0.144 Don       Sutton  
#  6 amesre01    1014      0.141 Red       Ames    
#  7 faberre01   1269      0.134 Red       Faber   
#  8 perryga01   1076      0.131 Gaylord   Perry   
#  9 pappami01   1073      0.123 Milt      Pappas  
# 10 frienbo01   1137      0.121 Bob       Friend  

Esses números parecem bem menores do que os de Mendoza! Observe também que todos eles têm ABs um pouco acima de 1000, meu limite para este conjunto de dados. Talvez 1000 ABs seja uma condição muito frouxa ... Mas Mendoza tinha apenas 1337 ABs, então se tornarmos a condição mais rigorosa (por exemplo, considerando apenas jogadores com> = 2.000 ABs), não é justo criticá-lo ...

Entre jogadores com> = 1000 ABs, quão ruim foi o desempenho de Mendoza?

 
# How far down was Mario Mendoza?
which(avg_df$playerID == "mendoma01") / nrow(avg_df)
# [1] 0.9630212

Ele está aproximadamente no quinto quantil de todos os jogadores para a média de acertos.

Quantos jogadores caíram abaixo da linha de Mendoza a cada ano?

Para esta questão, em cada temporada, consideramos apenas os jogadores que tiveram pelo menos 100 ABs naquela temporada.

 
# Look at player-seasons with at least 100 ABs
batting_df % filter(AB >= 100)

O bom do tidyverse é que podemos responder à pergunta acima com uma série de tubos terminando em um enredo:

 
batting_df %>% group_by(yearID) %>%
  summarize(below200 = mean(AVG %
  ggplot(aes(yearID, below200)) +
  geom_line() +
  labs(title = "Proportion of players below Mendoza line by year",
       x = "Year", y = "Prop. below .200") +
  theme_bw()

A flutuação é razoável, com a proporção de jogadores sob a linha de Mendoza chegando a 24% e a 1%. Se eu tivesse que adivinhar, nos últimos 50 anos ou mais, a proporção parece flutuar em torno de 5%.

Como seria a linha Mendoza se permitíssemos que ela mudasse dinamicamente?

Em vez de definir a linha de Mendoza como tendo uma média de rebatidas abaixo de .200, o que acontece se definirmos a linha de Mendoza para uma determinada temporada como a média de rebatidas do jogador no quinto quantil?

Podemos responder a isso facilmente resumindo os dados usando o quantile função (dplyr v1.0.0 torna isso fácil):

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
 
batting_df %>% group_by(yearID) %>%
  summarize(bottom5 = quantile(AVG, 0.05)) %>%
  ggplot(aes(yearID, bottom5)) +
  geom_line() +
  geom_hline(yintercept = c(0.2), color = "red", linetype = "dashed") +
  labs(title = "Batting average of 5th quantile by year",
       x = "Year", y = "5th quantile batting average") +
  theme_bw()

Isso parece muita flutuação, mas se você olhar atentamente para o eixo y, verá que os valores oscilam entre 0,14 e 0,24. Aqui está o mesmo gráfico de linha, mas com zero incluído no eixo y e uma curva de suavização de loess:

 
batting_df %>% group_by(yearID) %>%
  summarize(bottom5 = quantile(AVG, 0.05)) %>%
  ggplot(aes(yearID, bottom5)) +
  geom_line() +
  geom_smooth(se = FALSE) +
  geom_hline(yintercept = c(0.2), color = "red", linetype = "dashed") +
  scale_y_continuous(limits = c(0, 0.24)) +
  labs(title = "Batting average of 5th quantile by year",
       x = "Year", y = "5th quantile batting average") +
  theme_bw()

Não tenho certeza do quanto devo confiar naquele mais suave, mas chega muito perto da linha Mendoza!

Para completar, aqui estão as linhas que representam as médias de rebatidas para jogadores em vários quantis ao longo do tempo:

 
batting_df %>% group_by(yearID) %>%
  summarize(AVG = quantile(AVG, c(0.05, 1:4 / 5, 0.95)),
            quantile = c(0.05, 1:4 / 5, 0.95)) %>%
  mutate(quantile = factor(quantile, levels = c(0.95, 4:1 / 5, 0.05))) %>%
  ggplot(aes(x = yearID, y = AVG, col = quantile)) +
  geom_line() +
  geom_hline(yintercept = c(0.2), color = "red", linetype = "dashed") +
  labs(title = "Batting average for various quantiles by year",
       x = "Year", y = "Quantile batting average") +
  theme_bw()

À primeira vista, as linhas de quantis superiores parecem traduções verticais da 5ª linha de quantis, sugerindo que, ao longo dos anos, toda a distribuição das médias de rebatidas muda para cima ou para baixo (não apenas partes da distribuição).



[ad_2]

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Leia Também  March Networks anuncia plataforma NVR híbrida de alto desempenho da série 6700 e codificador Edge 4e