Rによるデータ分析

Rによる欠損値の前処理

外れ値や欠損値のあるデータの解析 のページには、 欠損値 のあるデータの扱い方がありますが、このページはRを使う場合の、もっと具体的な話になります。

データの読み込み

まず、欠損値がどのような形でデータの中にあって、それをRの中ではどのように扱っているのかです。

下のように、欠損値が文字通り、欠損していて空白になっている場合と、欠損値が「NA」という文字列になっている場合があります。
NAdata

いずれも、Rに読み込むと「NA」になります。 summaryで見ると「NA's :1」となっていて、欠損値(NA)として認識されていることがわかります。
NAdata

Rでの欠損値が含まれている量的変数への処理

例外があるかもしれませんが、Rの場合、欠損値が含まれている量的変数に対して、何か処理をしようとすると特別な扱いになります。

例えば、相関行列を求めると、欠損値が含まれている量的変数との相関係数は「NA」となり、求まりません。 このため、欠損値以外の数値を使うと、相関が高くてもわからないです。 ちなみに、他のソフトだと、欠損値以外の数値を使った相関係数が求まるようになっていることもあります。
NAdata

欠損値の処理

欠損値をどのように変換するかで、分析できることが変わります。

欠損値のある行を削除

欠損値がある行は除いてしまう場合です。

欠損していることに特に意味がない場合は、手軽な方法です。 ただし、この方法で予測モデルを作った場合、予測したい段階のデータの欠損値が含まれていると、予測ができないです。

Data <- na.omit(Data)
とすると、下記になります。
NAdata

特定の数値に変換

欠損値ができた背景や、欠損値の扱い方の方針によりますが、例えば、欠損値を「0」として扱いたい場合です。

Data[is.na(Data)] <- 0
とすると、下記になります。
NAdata

各変数の欠損値を、その変数の、欠損値以外の数値の平均値にしたい場合は、下記になります。

for (i in 1:ncol(Data)) {
Data[,i][is.na(Data[,i])] <- mean(Data[,i], na.rm = TRUE)
}
とすると、下記になります。
NAdata

質的変数に変換

Rによる変数の変換 のページに 1次元クラスタリング を紹介していますが、この方法を使うと、「NA」は「NA」という名前のカテゴリになり、それ以外の数値に対して、1次元クラスタリングの処理がされます。

例えば、
Data[,3] <- droplevels(cut(Data[,3], breaks = 3,include.lowest = TRUE))
とすると、下記になります。
NAdata

欠損値になっている理由の分析用に変換

欠損値になっている理由を、他の変数から推測するための変換です。

Data[,3][!is.na(Data[,3])] <- 0
Data[,3][is.na(Data[,3])] <- 1
とすると、下記になります。
こうなっていると、欠損値のある変数を ラベル分類 の手法の目的変数にして、欠損しているかどうかと、他の変数の関係を調べることができます。
NAdata

ラベル分類 によっては、目的変数が数値ではできないことがありますが、その場合、例えば、上記の「0」・「1」を、「A」・「B」とします。

欠損値の出方の分析用に変換

データの中に、欠損値がどこにどのように入っているのかを調べたい時の方法です。 全部の変数について、欠損値ならば1、欠損値以外は0にします。

Data[!is.na(Data)] <- 0
Data[is.na(Data)] <- 1
とすると、下記になります。
NAdata



参考文献

biostatistics
置換や削除について、上記以外のコードも紹介しています。
https://stats.biopapyrus.jp/r/basic/nan.html




Rによるデータ分析

データサイエンス教室