Rの 4つのダミー変数化パッケージを使ったときの欠損値の扱いについて比較してみたよ 【4月14日改定】

makedummies関数がNAに対応してので,内容の改定を行いました

最近SPSS, Stata に加えてRを使い始めたんですが、makedummies関数でカテゴリカル変数をダミー変数に変換した際に、もともとNAだったケースにすべて0が入っていたことに腰を抜かしました。

 

そこで各パッケージのNAの処理を確認してみました。

ほぼ自分のためのメモですが、興味がある方がいらっしゃれば、どうぞ

R初心者なので、間違っている点やもっとシンプルなコードの書き方とかあれば教えてください。

 

今回検討するのは以下のパッケージに含まれるダミー変数化関数 

(パッケージ名/関数名)

makedummies / mekedummies 

fastDummies / dummy_cols

dummies / dummy

caret / dummyVars

他にも有名なダミー化変数があればご指摘ください(追記していきます)

caret以外はダミー変数作成のためのパッケージですね

  

 

今回は以下のような架空のデータセットを使います

9・10行目が欠損しています

f:id:fuminorikawami:20181027153616p:plain

 

 

Rのへの読み込み

data <- read.table("Book1.csv", header = T)

str(data)

f:id:fuminorikawami:20181027151844p:plain

V1が3水準のFactor型として読み込まれています

 

makedummies パッケージの makedummies

data.makedummies<- data  #このパッケージ用のデータセット作成

install.packages("makedummies", dependencies = TRUE)

library("makedummies")
makedummies(data.makedummies, basal_level = T, col= data.makedummies$V1)

#basal_level=T で3水準すべてのダミーを作成を指定

 detach("package:makedummies", unload=TRUE)

 

f:id:fuminorikawami:20181027152740p:plain

 

NAの8,9,行目はすべて0がはいっている

現在は,NAケースについては,各ダミーに欠損(NA)が入るように更新されました.

 

 

 

fastDummies パッケージの dummy_cols
data.fastDummies <- data #このパッケージ用のデータセット作成
install.packages("fastDummies", dependencies = TRUE)
library("fastDummies")
dummy_cols(data.fastDummies, remove_first_dummy = F, remove_most_frequent_dummy = F)

 detach("package:data.fastDummies ", unload=TRUE)

f:id:fuminorikawami:20181027153746p:plain

 

ずれていて見にくいですが一番右の変数名の注目ですね

fasrDummyでは V1_NAが作成され、欠損値のダミーが作られるようです

 

dummies  パッケージの dummy

data.dummies <- data #このパッケージ用のデータセット作成
install.packages("dummies", dependencies = TRUE)

library("dummies")

dummy.data.frame(data.dummies)

detach("dummies", unload=TRUE)

f:id:fuminorikawami:20181027163910p:plain

 

 fastDummiesと同様に V1NAが作成されています

 

caret パッケージの  dummyVars

install.packages("caret", dependencies = TRUE)

library("caret")


data.caret<- data #このパッケージ用のデータセット作成
temp <- dummyVars(~.,data=data.caret)
data.caret2 <- as.data.frame(predict(temp,data.caret)) #データフレームとして代入

f:id:fuminorikawami:20181027165054p:plain

 

NAだった8,9行目にはきちんとNAが入っていますね

SPSS, Stataユーザーだとこのダミー変換がもっとも慣れ親しんだものだと思うので、元SPSS, StataユーザーはcaretのdummyVarsを使うのが無難かもしれません

 

もちろん他の関数でも後からNAを代入すればもちろん問題ないです

私は今後はcaretを使うことにします。

 

まとめ

・mekedummies / mekedummies ⇒ 各ダミーにNAが入力されている【改定】

・fastDummies / dummy_cols ⇒ NAのダミー変数が作られる

・dummies / dummy ⇒ NAのダミー変数が作られる

・caret / dummyVars ⇒ 各ダミーにNAが入力されている