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行目が欠損しています
Rのへの読み込み
data <- read.table("Book1.csv", header = T)
str(data)
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)
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)
ずれていて見にくいですが一番右の変数名の注目ですね
fasrDummyでは V1_NAが作成され、欠損値のダミーが作られるようです
dummies パッケージの dummy
data.dummies <- data #このパッケージ用のデータセット作成
install.packages("dummies", dependencies = TRUE)
library("dummies")
dummy.data.frame(data.dummies)
detach("dummies", unload=TRUE)
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)) #データフレームとして代入
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が入力されている