
この記事では、EDAの「目的」と「Rによる実例」を紹介します!

EDAってなに?
EDA(Exploratory Data Analysis, 探索的データ解析)とは、データの特徴を捉えるための手法の総称です。
統計モデリング過程において、EDAはモデリングの補助的に用いるものです。

EDAの目的には、以下のようなものがあります。
- 目的変数の特徴を探る
- 個々の特徴量の特徴を探る
- 特徴量同士の関係を探る
- 特徴量と目的変数の関係を探る
上記の目的のためにEDAで行うことは、データの要約といえます。
要約の方法は、「数値化による要約」と「可視化による要約」に分類できます。
以下では単純なデータに対して、Rを使用したEDAの実例を紹介します。
データは、RにあらかじめインストールされているBostonデータセットを使用します。
まずは、データを準備します。
#Bostonデータセットをデータフレームxyに格納 xy <- Boston #目的変数名をyに変更 colnames(xy)[ncol(xy)] <- "y"
数値化による要約
数値化によって、データの特性値を探っていきます。
特性値の例には、平均値、分散、相関係数があります。
要約統計量
summary関数は、入力されるオブジェクトに応じて適切な要約を出力してくれます。
#10~14列目のデータの要約統計量 summary(xy[10:14])

この場合、上から順に最小値、第1四分位点、中央値、平均、第3四分位点、最大値が表示されています。
要約統計量を個別に出力する関数も用意されており、例えばvar(標本不偏分散)、sd(標準偏差)などがあります。
#標本不偏分散 var(xy$y) #標準偏差 sd(xy$y)
相関係数
相関係数は、2つの確率変数の間にある線形な関係の強弱を測る指標であり、−1以上1以下の実数に値をとります。
相関係数が正のとき確率変数には正の相関が、負のとき確率変数には負の相関があるといいます。
関数corは、変数間の相関係数を返してくれます。
引数methodにて、以下の手法を設定することができます。
pearson:ピアソンの積率相関係数
kendall:ケンドールの順位相関係数
spearman:スピアマンの順位相関関係数
引数methodに何も指定しない場合は、ピアソンの積率相関係数が適用されます。
#相関係数 cor(xy[10:14], method = "pearson") cor(xy[10:14])

可視化による要約
データを可視化することによって、データの特性をつかむ方法を紹介します。
各変数の要約
目的変数、特徴量のヒストグラムを見ることは、データ分析において基本的かつ重要な作業です。
目的変数のヒストグラムを出力するためのコードは次のとおりです。
hist(xy$y)

ピーク値より右側は値が段々下がっているのに、50で少し増えているのが気になります。
もしかすると、50で値が打ち切られている可能性があります。
ヒストグラムの分割数を増やして確認してみます。
#ヒストグラムの分割数=50 hist(xy$y,breaks=50)

このデータは、50以上の値は打ち切られていることが確信できます。
次に、各特徴量のヒストグラムを一覧表示する方法を紹介します。
ヒストグラムを一覧表示するコードは次のとおりです。
oldpar <- par(no.readonly = TRUE) par(mfrow = c(3, 5)) for (i in 1:(ncol(xy) - 1)) { xname <- colnames(xy)[i] hist(xy[, i], main = paste("Histogram of", xname), xlab = xname) } par(oldpar)

変数同士の相関
相関関係を図で出力をする方法を紹介します。
1.psych
各変数に対してヒストグラムとカーネル平滑化を、変数ペアの官官係数、散布図、相関楕円、lowess回帰を一括で描画してくれます。
#install.packages("psych") #psychのインストール library(psych) pairs.panels(xy[10:14])

lstatとyに負の相関があることが読み取れます。
2.corrplot
corrplotを使うと相関係数の大きさを円と色で表わす相関図を作成できます。
ここでは、ケンドールの順位相関係数を使用しています。
#install.packages("corrplot") #corrplotのインストール library(corrplot) corrplot( cor(xy, method = "kendall"), #ケンドールの順位相関係数 type = "upper", order = "hclust", addCoef.col = "gray10", number.cex = 0.5 )

図の中の数値は、列方向と行方向で重なり合う2変数の相関係数を表しています。
corrplotが便利なのは、order = “hclust”と指定することで、 相関係数の類似度の高い変数が近くに並ぶようにしてくれる点です。
類似度は階層型クラスタリングという手法を用いて計算されています。
目的変数と各特徴量の相関
モデリングの目的からすれば、目的変数の説明力が強い特徴量をつかむことは大切な作業です。
各特徴量と目的変数の散布図を一覧で出力するコードは次のとおりです。
oldpar <- par(no.readonly = TRUE) par(mfrow = c(3, 5)) for (i in 1:(ncol(xy) - 1)) { xname <- colnames(xy)[i] plot(xy[, i], xy$y, pch = ".", xlab = xname) } par(oldpar)

説明力がありそうな特徴量については、散布図上にlowess曲線を引き、それを回帰曲線と見立てて描画することがモデリングの参考になる場合があります。
i <- 13 xname <- colnames(xy)[i] plot(xy[, i], xy$y, xlab = xname) lines(lowess(xy[, i], xy$y),col="red")

参考書籍
実務上のデータの解析を行うために知っておくべき基本事項が丁寧に解説されている良本です。
コメント