gl
の続きです。今回はセリーグ・パリーグを分類するということをやってみます。
まず、分類用のデータフレームを作成しましょう。
最初にtidymodelsパッケージの読み込みをしておきます。

tidymodels_prefer()関数でtidymodelsパッケージの関数を優先するようにしておきました。
使用するデータフレームは、team、est_win_rate, spreadはいらないので、削除します。そのあと、initial_split()関数、testing()関数、training()関数でトレーニング用のデータフレームとテスト用のデータフレームを作成します。

train_dataがトレーニング用のデータフレーム、test_dataがテスト用のデータフレームです。
それぞれのleagueの比率を確認しておきます。

両方のデータフレームともに、セリーグ・パリーグの球団数は 1:1 で同じ比率ですね。
まず、分類方法の基本としてロジスティクス回帰でやってみます。
まずはモデルを設定します。

次に、レシピを設定します。

文字列のデータ、今回はyearだけですが、それはstep_dummy()関数でダミー変数にしておきます。
数値型のデータは、step_normalize()関数で標準化(平均値0、標準偏差1)しておきます。
次にワークフローを作ります。

fit()関数でモデルをフィットします。

predict()関数でtest_dataのデータを使って予測します。

正解率をみてみます。

正解率は 72.2%です。
AUCを計算します。

AUCは0.824でした。
ROC曲線を描いてみます。


最後にモデルの係数を確認します。

three_base: 三塁打のp値が一番小さいですね。
セリーグ・パリーグの三塁打を比較してみます。


パリーグのほうが三塁打が多いことがわかります。
今回は以上です。
次回は
です。
はじめから読むには、
です。
今回のコードは以下になります。
#
# tidymodelパッケージの読み込み
library(tidymodels)
tidymodels_prefer()
#
# セリーグ・パリーグ分類用のデータフレームを作る
set.seed(7)
baseball_split <- df |>
select(-team, -est_win_rate, -spread) |>
initial_split(prop = 0.8, strata = league)
train_data <- training(baseball_split)
test_data <- testing(baseball_split)
#
# leagueの比率
train_data |>
group_by(league) |>
summarize(n = n())
#
test_data |>
group_by(league) |>
summarize(n = n())
#
# glmでロジスティクス回帰
# モデルの設定
glm_model <- logistic_reg(mode = "classification") |>
set_engine("glm")
glm_model
#
# glmでロジスティクス回帰
# レシピの設定
glm_recipe <- recipe(league ~ ., data = train_data) |>
step_dummy(all_nominal_predictors()) |>
step_normalize(all_numeric_predictors())
glm_recipe
#
# glmでロジスティクス回帰
# ワークフローの構築
glm_wf <- workflow() |>
add_model(glm_model) |>
add_recipe(glm_recipe)
glm_wf
#
# glmでロジスティクス回帰
# モデルをフィット
glm_fit <- fit(glm_wf, train_data)
#
# glmでロジスティクス回帰
# test_dataで予測
glm_preds <- predict(glm_fit, new_data = test_data, type = "prob") |>
bind_cols(predict(glm_fit, new_data = test_data)) |>
bind_cols(test_data |> select(league))
glm_preds
#
# glmでロジスティクス回帰
# 正解率
accuracy(glm_preds, truth = league, estimate = .pred_class)
#
# glmでロジスティクス回帰
# AUC
roc_auc(glm_preds, truth = league, .pred_C)
#
# glmでロジスティクス回帰
# ROC曲線
roc_curve(glm_preds, truth = league, .pred_C) |>
autoplot()
#
# glmでロジスティクス回帰
# モデルの係数の確認
glm_fit |>
extract_fit_parsnip() |>
tidy() |>
arrange(p.value)
#
# glmでロジスティクス回帰
# セリーグ・パリーグの三塁打の比較
df |>
ggplot(aes(x = three_base, y = league)) +
geom_boxplot(aes(group = league))
#
(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは photograph of close up of violet morning glory flowers, flowering on a large lake side, under the blue sky. です。)