Rでの欠損値処理


欠損値

RにはNAとNULLの2種類が存在するが、この2種類は異なる挙動を示します。
データで「-」「99」などによって空白が表現される。

NA

NA( not available )の略で、計測値不明を意味する。
NAはvectorの要素として使われる。
is.naでvectorの各要素が欠損しているかを確認できる。

R
z<-c(1,2,NA,8,3,NA,3)
z
[1]  1  2 NA  8  3 NA  3

is.na(z)
[1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE

#欠損(NA)を除く
z1<-na.omit(z)
z1
[1] 1 2 8 3 3
attr(,"na.action")
[1] 3 6
attr(,"class")
[1] "omit"

#zの平均値は計算できない
Error: unexpected input in "z\"

mean(z)
[1] NA

#na.rmがTRUEの場合、meanは欠落しているデータを削除してから、平均を計算する
mean(z, na.rm=TRUE)
[1] 3.4

#sum,min,max,var,sdでも同様

sum(z, na.rm=TRUE)
[1] 17

var(z, na.rm=TRUE)
[1] 7.3

sd(z, na.rm=TRUE)
[1] 2.701851

sd(z, na.rm=TRUE)**2
[1] 7.3

ちなみに、NAの平均値を計算できないのは、NAは計測値が不明であることを意味しているので、
-∞から∞の値をとる可能性があるので、

1 + NA → 1 とするのは妥当でないことがわかります。

欠損値をどうするかは統計分析的には非常に重要なテーマで、よく使われるのは多重代入法である
Rでは、mi,mice,Ameliaパッケージで実装されている

NULL

NULLとは何もないことを意味します。(ドイツ語のNullが語源?)
欠損とは厳密に異なり、何もない、空白であることをあらわします。

NAとNULLの重要な違いは、NULLはvectorの中に存在できません。
もしNULLをvectorに使用しても、消えてしまう。

R
z<-c(1,NULL,3)
z
[1] 1 3

d<- NULL
is.null(d)
[1] TRUE

is.null(7)
[1] FALSE

空白となった場合の、取り扱いは調査中です。。。