セイバーメトリクス

Rによるセイバーメトリクス入門 をじっくり学ぶ 選手の成績推移を求めてみる③

今回は、ピーク年齢について、色々な視点で

解析してみます。

 

ちなみに前回は、複数の選手のピークについて着目して

分析してみました。

参考は例によって偉大なる著書

Rによるセイバーメトリクス入門です。

事前準備

2000打席以上の選手から

その選手が活躍した年と通算打席数を

midcareersとして求めます

midcareers <- batting_2000%>%
 group_by(playerID)%>%
 summarize(Midyear = (min(yearID)+max(yearID))/2,
 AB.total = first(Career.AB))

そして、もとのデータと結合します。

 batting_2000%>%
 inner_join(midcareers, by = "playerID")->batting_2000

 

続いてmap関数を用います。

選手それぞれの成績についてlm関数を実行できます。

models<- batting_2000%>%
 split(pull(., playerID))%>%
 map(~lm(OPS ~ I(Age-30)+I((Age-30)^2), data = .))%>%
 map_df(tidy,.id="playerID")

 そうすると以下のような結果が帰ってきます。

1選手につき、モデルの係数が1行毎に算出されます。

なので、これをまとめます。

 models%>%
+
 group_by(playerID)%>%
 summarize(A = estimate[1],
 B = estimate[2],
 C = estimate[3])%>%
 mutate(Peak.age = 30 -B/2/C)%>%
 inner_join(midcareers , by = "playerID")->beta_coefs

そうすると、係数を利用して

選手のピークが計算できます。

ピーク時の年齢の変化

以上で求めた値を使ってグラフ化します。

横軸をMidyearとして、縦軸をピーク年齢とします。

age_plot<- ggplot(beta_coefs, aes(Midyear, Peak.age))+
 geom_point(alpha = 0.5)+
 geom_smooth(color = crcblue, method = "loess")+
 ylim(20,40)+
 xlab("Mid Career")+ylab("Peak Age")

はい、そうしますと、

しばらくずっと、ピーク年齢が27.5歳ちょっとのところで

推移しているのがわかります。

 

最近減少傾向なのは、

まだ現役の選手が含まれているかもしれないです。

 

続いて、横軸を打席数の対数とします。

 age_plot+
 aes(x = log2(AB.total))+
 xlab("Log2 of Career AB")

そうしますと、右肩上がりで

ピーク年齢が上昇していることがわかりましたね、

 

ポジションと成績推移

成績のピークについて、ポジションが関係するのか

調べて見たいと思います!

 

まずは、1990年以降の選手を抽出します。

batting_2000a <- batting_2000%>%
 filter(Midyear >= 1990)

 

先程と同様にmap関数を用いて、

選手のモデル化を行い、

ピーク年齢を算出します。

models<- batting_2000a%>%
 split(pull(., playerID))%>%
 map(~lm(OPS ~ I(Age-30)+I((Age-30)^2), data = .))%>%
 map_df(tidy,.id="playerID")

models%>%
 group_by(playerID)%>%
 summarize(A = estimate[1],
 B = estimate[2],
 C = estimate[3])%>%
 mutate(Peak.age = 30 -B/2/C)%>%
 nner_join(midcareers)%>%
 inner_join(Positions)%>%
 rename(Position = POS)->beta_estimate

 

そうしたら、ポジションとして

投手と指名打者を除きます。

beta_estimate%>%
 filter(Position %in%
 c("1B","2B","3B","SS","C","OF"))%>%
 inner_join(People)->beta_fielders

そして、グラフ化します!

そうすると、すべてのポジションで

大体30代前をピークとしている様子がわかりました。

 

そして、ずば抜けている選手に関しては

圧倒的に外野が多いですね!

 

ただ、これはあくまでピーク年齢ということです。

その時の成績がどうかわからないです。

 

知らない選手が多いかも・・・

参考

偉大なる著書「Rによるセイバーメトリクス入門」

-セイバーメトリクス