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

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

賃金構造基本調査のデータ分析 5 - tidymodels パッケージを使って全体のデータをトレーニング用とテスト用に分割する。

 

www.crosshyou.info

の続きです。前回は給与額を他の変数で重回帰分析しました。計量経済学っぽいことをしました。今回からはそれらの変数で給与額を予測するモデルを作るというデータサイエンスっぽいことをしていこうと思います。まだまだ勉強の途中ですが、tidymodels パッケージの作業フローでやっていこうと思います。

参考にしたウェブサイトは、

Tidy Modeling with R

です。こういう本が無料で読める便利な世の中になりました。

早速、tidymodels パッケージを読み込みます。

tidymodels_prefer() という関数を実行すると、同じ名前の関数が複数のパッケージで使われている場合、tidymodels のほうを優先するそうです。

予測モデルを作成するには、トレーニング用のデータフレーム、テスト用のデータフレームを作成して、トレーニング用のデータフレームでモデルを作成して、テスト用のデータフレームでそのモデルの性能を評価する、という方法をとります。

トレーニング用のデータフレーム、テスト用のデータフレームを作成するのが、initial_split() という関数です。

早速実行します。

prop = 0.80 と指定して、トレーニング用に80%, テスト用に20%を使う、と指定しています。strata = saraly でsaraly の分布がトレーニング用とテスト用で似たような分布になるように、としています。いま気が付きましたが、saraly でなくて、salary にしないといけなかったですね。でも、このまま saraly で続けます。

df_split は Tarining/Testing/Total が 600/152/752 となっていて、トレーニング用に600個の観測データ、テスト用に152個の観測データ、全体で752個の観測データがあるということを示しています。

この df_split からトレーニング用、テスト用のデータフレームを生成するのは、training() 関数と testing() 関数を使います。

dim() 関数でデータフレームの行数と列数を表示しています。600行、152行と確認できます。

strata = saraly として効果が発揮されているか、密度分布グラフで確認してみます。

トレーニング用とテスト用で、だいたい同じような密度分布ですね。

今回は以上です。

次回は、

www.crosshyou.info

です。

 

はじめから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。
#
# tidymodels パッケージを読み込む
library(tidymodels)
tidymodels_prefer()
#
# トレーニング用、テスト用のデータフレームを作成
# step 1: 元のデータフレームを分割
set.seed(225)
df_split <- initial_split(df_lm, prop = 0.80, strata = saraly)
df_split
#
# トレーニング用、テスト用のデータフレームを作成
# step 2: データフレームを生成
df_training <- training(df_split)
df_test <- testing(df_split)
dim(df_training)
dim(df_test)
#
# strata = saraly の効果の確認
df_training |> 
  mutate(category = "training") |> 
  bind_rows(df_test |> mutate(category = "test")) |> 
  ggplot(aes(x = saraly, fill = category)) +
  geom_density(alpha = 0.5)
#

 

(冒頭の画像は、Bing Image Creator で生成しました。プロンプトは、"Beautiful landscape photograph, wide and long grass fields full of flowers, under the blue sky. Photo" です。)