crosshyou

主にクロス表(分割表)分析をしようかなと思いはじめましたが、あまりクロス表の分析はできず。R言語の練習ブログになっています。

短時間労働者の給与のデータの分析5 - R言語でクラシフィケーション。男性か女性かをlm関数で予測するモデルを作る。

 

www.crosshyou.info

 の続きです。前回の分析で、女性の給与は男性よりも確かに低いことがわかりました。

今回は、R言語のlm関数で男性か女性かを分類するモデルを作ってみます。

まず、mutate関数とifelse関数でgendarをm, f ではなくて1, 0という2つの数値をとるデータフレームを作成します。

f:id:cross_hyou:20210409212201p:plain

次に、このdf_classificationをモデル作成用のデータフレームとモデル評価用のデータフレームに分割します。

 set.seed関数で乱数のセットを決めます。

f:id:cross_hyou:20210410094243p:plain

str_classificationは134行ありますので、そのうちの100個の観測をモデル作成用にして、残りの34個の観測をモデル評価用にしましょう。

f:id:cross_hyou:20210410094537p:plain

sample関数で1から134の数字のうちランダムに100個の数字を選択しました。

f:id:cross_hyou:20210410094820p:plain

df_trainとdf_testの男女比率があんまり違っていたらよくないので、t.test関数で確認してみます。

f:id:cross_hyou:20210410095041p:plain

p-valueが0.696なので違いは無いといっていいです。

mena of x がdf_trainのほうで、0.49なので、男性49%, 女性51%ですね。

mean of y がdf_testのほうで、0.53なので、男性53%、女性47%ですね。

lm関数でgendarを被説明変数にしたモデルを作成します。

f:id:cross_hyou:20210410100645p:plain

summary関数でモデルの概要を表示します。

f:id:cross_hyou:20210410100950p:plain

f:id:cross_hyou:20210410101008p:plain

p-valueが4.652e-12なので有意な統計モデルです。

wageのt値が一番高いですから、やはり給与は男女間で違いますね。

predict関数でこのモデルをつかってdf_testデータからgendarを予測します。

f:id:cross_hyou:20210410101603p:plain

table関数で結果を見てみましょう

f:id:cross_hyou:20210410101759p:plain

lm_modelが女性だと予測して実際にも女性だったのが16個、本当は男性だったのが4個。

lm_modelが男性だと予測して実際に男性だったのが14個、本当は女性だったのが0個です。

正解率は、(16+14)/34=88%でした。

f:id:cross_hyou:20210410102149p:plain

今回は以上です。

次回は

 

www.crosshyou.info

 です。

はじめから読むには、

 

www.crosshyou.info

 です。