
今回は、勝率と関係のある変数を線形回帰分析で確認してみます。
lm() 関数で線形モデルを推定します。
基点となら線形モデルということで、lm_base という名前で保存します。

summary()関数で結果をみてみます。

p値が0.05以下の変数は、dasu, tokuten, saves, kanpu, inningsでした。
dasu: 打数、tokuten: 得点、saves: セーブ数、kanpu: 完封勝数は納得ですが、innings: 投球回というのは謎ですね。投球回が1増えると、勝率が0.25も上がるという推定結果です。
このモデルをよく見ると、batting_rate: 打率 の係数が -5.24 と打率が高ければ勝率が下がる、という常識の感覚とは正反対の推計結果です。
ちょっと、前提条件のモデルが悪い気がします。
よく考えて、変数を選びましょう。例えば、saves: セーブ数や kanpu: 完封勝数は勝利したときにしか記録されませんから、これを説明変数に入れるのは適切ではないかもしれません。innings: 投球回もよくわからないのではずします。
lm_base2という名前で線形モデルを推計してみます。

summary()関数で結果を見てみます。

p値が 0.05 以下なのは、bougyo: 防御率と sanshin: 三振の2つだけです。
batting_rate: 打率の係数は 9.1 とプラスになったので、打率が高いほど勝率が上がる、という常識の感覚と一致しました。
この lm_base2 を step() 関数を使って、有意でない変数を削除してみます。
lm_simple という名前で保存しました。

有意な変数は、batting_rate: 打率、tokuten: 得点、hit: 安打数、bougyo: 防御率、sanshin: 三振数です。hit: 安打の係数の符号がマイナスなのがちょっと不思議ですが、他の係数の符号のプラス・マイナスは納得です。
batting_rate: 打率の係数が7.02 ということは、打率が 0.01 上がると、勝率が7.02 * 0.01 = 0.07 上がるということですね。
bougyo: 防御率の係数は、 -0.078 ということは、防御率を 1 下げると、勝率が 0.078上がるということですね。
勝率、打率、防御率のサマリーを確認します。

勝率0.5、打率0.2516の平均チームが打率を0.01上げると勝率が0.57になります。0.57は3rd Qu. よりも良い成績になりますね。そして打率も0.2616になって3rd Qu. よりも良い成績になります。
勝率0.5、防御率3.522の平均チームが防御率を1下げると、勝率は0.578になります。これも3rd Qu. よりも良い成績になりますね。そして防御率も2.522になって1st Qu. よりも良い成績になります。
さらに、勝率0.5, 打率0.2516, 防御率3.522の平均チームが打率を0.01上げて、防御率を1下げると、勝率は 0.5 + 0.073 + 0.078 = 0.651 になります。

優勝チームの平均勝率が 0.5955, 3rd Qu. は 0.6292, 最高は 0.6670 ですから、0.651 の勝率だと優勝の可能性がかなり高いですね。
ということで今回は、やっぱり打率、防御率は勝率に直結するんだな、ということを確認できたところで終わりにしたいと思います。
次回は、
です。
はじめから読むには、
です。
今回のコードは以下になります。
#
# team, league, year を除いた線形モデル
lm_base <- lm(win_rate ~ batting_rate + dasu + tokuten + hit + two_base +
three_base + hr + daten + steal + bougyo + saves + kanto +
kanpu + innings + sanshin + shitten, data = df)
#
# summary()
summary(lm_base)
#
# team, league, year, save, kanpu, innings を除外したモデル
lm_base2 <- lm(win_rate ~ batting_rate + dasu + tokuten + hit + two_base +
three_base + hr + daten + steal + bougyo + kanto + sanshin +
shitten, data = df)
#
# summary()
summary(lm_base2)
#
# 有意でない変数を除外
lm_simple <- step(lm_base2, trace = FALSE)
summary(lm_simple)
#
# 勝率と打率と防御率のサマリー
df |> select(win_rate, batting_rate, bougyo) |>
summary()
#
# 優勝チームの勝率のサマリー
df_raw |>
filter(game_sa == -1) |>
select(win_rate) |>
summary()
#
(冒頭の画像は Bing Image Creator で生成しました。プロンプトは Close up of nature red Erythria flowers, on the vast green grass fields along a large river, under the blue shiny sky, photo です。)