の続きです。前回は tidymodels の initial_split() 関数でデータをトレーニング用とテスト用に分けました。今回は線形モデルを一つ作って簡単な予測をしてみます。
線形モデルは、linear_reg() で定義します。
そして、set_engine() でどの計算エンジンを使うかを指定します。
一番簡単な、lm を使います。
まあ、もともと linear_reg() の初期設定の計算エンジンは lm なので、set_engine() で指定しなくても大丈夫です。
translate() 関数を使うと、このモデルがどうなっているかわかります。
stats パッケージの lm() 関数を使っていて、フォーミュラ、データ、ウェイトは未定だとわかります。
それでは、線形モデルで saraly を予測してみます。まずはモデルを作成します。
fit() 関数でモデルの係数を推計します。
extract_fit_engine() 関数を使うと、推計結果がわかります。
さらに、vcov() 関数を使うと、
分散共分散マトリックスがわかります。
また、tidy() 関数でモデルの推計結果をデータフレームで表示します。
statistics の列の値が t値です。切片以外の変数の t値はみな絶対値で 2 よりも大きいですから、有意な変数だとわかります。
この lm_fit をつかって、df_test の saraly を予測してみます。predict() 関数を使います。
tidymodels のパッケージでの predict() はデータフレームで結果が返りますので、
元のデータフレームに合体できます。
データフレームになっているので、グラフも簡単にできます。
モデルの予測が実際の saraly と一致していたら、黒点は赤い直線の上にプロットされます。これを見ると、saraly 600 よりも大きいところは上手く予測できていない感じです。
最後に RMSE(Root Mean Square Error)を計算しましょう。
RMSEは57.4でした。予測の誤差の平均が5万7400円ということですね。
次回以降の予測モデルでは、この 57.4 よりも小さい値を目指していきたいと思います。
今回は以上です。
次回は、
です。
はじめから読むには、
です。
今回のコードは、
#
# 線形モデル
linear_reg()
#
# 計算エンジンを指定
linear_reg() |> set_engine("lm")
#
# translate()
linear_reg() |> set_engine("lm") |>
translate()
#
# 線形モデルを作成
lm_model <- linear_reg() |>
set_engine("lm")
#
# fit() で係数を推定
lm_fit <- lm_model |>
fit(saraly ~ ., data = df_training)
lm_fit
#
# extract_fit_engine()
lm_fit |> extract_fit_engine()
#
# |> vcov()
lm_fit |> extract_fit_engine() |> vcov()
#
# tidy()
lm_fit |> tidy()
#
# df_test の saraly を予測
predict(lm_fit, new_data = df_test)
#
# df_test の saraly と結合
df_test |> select(saraly) |>
bind_cols(predict(lm_fit, new_data = df_test)) |>
bind_cols(predict(lm_fit, new_data = df_test, type = "pred_int"))
#
# グラフ
df_test |> select(saraly) |>
bind_cols(predict(lm_fit, new_data = df_test)) |>
ggplot(aes(x = saraly, y = .pred)) +
geom_point() +
geom_abline(intercept = 0, slope = 1, color = "red") +
coord_cartesian(xlim = c(100, 800), ylim = c(100, 800))
#
#
# RMSEの計算
df_test |> select(saraly) |>
bind_cols(predict(lm_fit, new_data = df_test)) |>
summarize(RMSE = sqrt(mean((saraly - .pred)^2)))
#
(冒頭の画像は Bing Image Creator で生成しました。プロンプトは "Landscape, light tone, blue sky, red flowers, photo" です。)