
の続きです。
前回の分析で、勝率 = 0.25 + 0.04 * 安打数 + 0.09 + 本塁打数 + 0.06 * 盗塁数 + 0.01 * 奪三振数 - 0.07 * 失点数 というモデルを推計しました。
今回はこのモデルで推定した勝率と実際の勝率を比較して、モデルの推定値よりも実際の勝率が良いチーム、その反対に悪いチームはどこかを調べてみましょう。

est_win_rateがモデルで予測した勝率で、spreadが実際の勝率と予測の勝率の差です。
spreadの値がプラスということは、実際の勝率がモデルの予測よりもよい、ということです。
では、一番、spreadが大きなチーム・年はどれかみてみます。

2011年の東京ヤクルトスワローズが一番ですね。予測では勝率は 0.414しかないのに、実際は0.543と勝ち越ししています。
その反対に、spreadが一番小さいチーム・年はどこでしょうか?

2010年の広島東洋カープが一番spreadが小さいです。モデルの予測では0.556なのに、実際の勝率は0.408しかありませんでした。上位陣は2010年のセリーグのチームですね。
中日ドラゴンズ以外の5チームが顔を出しています。
今度は、チームごとの平均値で比べてみます。

いま、気がつきましたが、ベイスターズは、横浜DeNAベイスターズと横浜ベイスターズという2つの名前があったのですね。
千葉ロッテマリーンズがspreadの平均値が一番大きいですね。
千葉ロッテマリーンズは、安打数、本塁打数、盗塁数、奪三振数、失点数のわりには勝率が高く、試合巧者といえるかもしれません。
今回は以上です。
次回は
です。
はじめから読むには、
です。
今回のコードは以下になります。
#
# 実際の勝率とモデル予測の勝率を合わせる
df <- df |>
mutate(est_win_rate = predict(lm_r,newdata = df)) |>
mutate(spread = win_rate - est_win_rate) |>
relocate(team, win_rate, est_win_rate, spread)
df
#
# spreadが一番大きなチーム・年
df |>
arrange(desc(spread))
#
# spreadが一番小さなチーム・年
df |>
arrange(spread)
#
# チームごとの平均値
df |>
group_by(team) |>
summarize(
avg = mean(spread),
med = median(spread),
min = min(spread),
max = max(spread),
std = sd(spread),
n = n()
) |>
arrange(desc(avg))
#
(冒頭の画像は Bing Image Creator で生成しました。プロンプトは Close up of yellow Jasmine flowers, flowering all over the ground, under the blue sky. Photo です。)