Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

ラグビー リーグワン のデータの分析4 - データフレームを作り直す。

www.crosshyou.info

の続きです。前回は、GAM(Generalized Additive Model)で予測モデルを作成しました。あまり良いモデルではありませんでした。そもそもとして、個人の成績からチームの予測をするモデルは難しそうです。最下位のチームに一番活躍した選手がいる、というケースもありますからね。

そこで、今回は、チームごとに個々の選手の成績をまとめて、平均値を算出して、そのデータフレームで予測モデルを作ってみます。

このように、新しくデータフレームを作りました。targetがチームの順位ですからtargetごとの平均値をとれば、それがチームごとの平均値になりますね。

このデータフレームを使って予測モデルを作ります。

まず、lm()関数で線形モデルをつくります。

Multiple R-squared: 0.9183, p-value: 0.0457 となりましたので、かなり当てはまりが良いモデルになりました。

実際の値と予測値の散布図を描いてみます。

前々回、前回の散布図より当てはまりがよくなったことがわかります。

lm_mod_df2から不要な変数を取り除いて、より単純なモデルを作ります。

update()関数でp値の高い変数を一つずつ外していきます。

goalとnが残りました。成績上位50人に入る人数が多いほど(nが大きいほど)、ゴールの点数の平均値が高いほど(goalが大きいほど)、targetは小さくなる(順位が良くなる)ということですね。

全部の変数を使ったモデルはMultiple R-squared:  0.9183で、Adjusted R-squared: 0.7754、p-value: 0.0457でした。

簡素化したモデルはMultiple R-squared: 0.6404で、Adjusted R-squared: 0.5604で全部の変数を使ったモデルよりは悪い値ですが、p-value: 0.01003 でp値は改善しました。

最後に実際の値と予測値のサンプルを作成します。

こちらの散布図のほうが予測はうまくできていないです。

今回は以上です。

次回は、

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

#
# targetごとの平均値のデータフレームにする
df2 <- df |> 
  group_by(target) |> 
  summarize(
    across(rank:pg, mean),
    n = n()
  ) |> 
  ungroup()
df2
#
# このtargetを被説明変数にする
# 線形モデル
lm_mod_df2 <- lm(target ~ ., data = df2)
summary(lm_mod_df2)
#
# 予測値の実際の値の散布図
tibble(
  actual = df2$target,
  estimate = predict(lm_mod_df2)
) |> 
  ggplot(aes(x = actual, y = estimate)) + 
  geom_point() +
  labs(title = "線形モデル") +
  geom_abline(color = "red") +
  theme_minimal()
#
# より単純なモデル
lm_mod_df2_simple <- update(lm_mod_df2, . ~ . - game)
summary(lm_mod_df2_simple)
#
lm_mod_df2_simple <- update(lm_mod_df2_simple, . ~ . - rank)
summary(lm_mod_df2_simple)
#
lm_mod_df2_simple <- update(lm_mod_df2_simple, . ~ . - point)
summary(lm_mod_df2_simple)
#
lm_mod_df2_simple <- update(lm_mod_df2_simple, . ~ . - try)
summary(lm_mod_df2_simple)
#
lm_mod_df2_simple <- update(lm_mod_df2_simple, . ~ . - pg)
summary(lm_mod_df2_simple)
#
# 予測値の実際の値の散布図
tibble(
  actual = df2$target,
  estimate = predict(lm_mod_df2_simple)
) |> 
  ggplot(aes(x = actual, y = estimate)) + 
  geom_point() +
  labs(title = "簡素化線形モデル") +
  geom_abline(color = "red") +
  theme_minimal()
#

 

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは、Landscape of natural vast grass field, full of many AJISAI flowers, close up of one red and blue marble AJISAI flower, photo です。)