ggplot2を使って、データ分布を要約する-5
R グラフィックス クックブック 19回目
ggplot2パッケージを利用して、データ分布を可視化していきます。
利用するデータ
このデータセットを使います。
R: Old Faithful Geyser Data
間欠泉の噴出時間(eruptions)と次に噴出までの間隔(waiting)です。
> str(faithful) 'data.frame': 272 obs. of 2 variables: $ eruptions: num 3.6 1.8 3.33 2.28 4.53 ... $ waiting : num 79 54 74 62 85 55 88 85 51 85 ... > head(faithful) eruptions waiting 1 3.600 79 2 1.800 54 3 3.333 74 4 2.283 62 5 4.533 85 6 2.883 55
2次元データの密度推定
前回の記事まで計4回は、1個の要素について、観測値や推定値をプロットしてきました。
ここでは、2個の要素をまとめます。
x軸にeruptions、y軸にwaitingをマッピングした散布図と、
カーネル密度推定の曲線*1をプロットします。
2次元のカーネル密度推定は、stat_density2d()を使います。
ggplot(faithful, aes(x=eruptions, y=waiting)) + geom_point() + geom_density2d()
この密度曲線ですが、高さを色にマッピングすることができます。
ggplot(faithful, aes(x=eruptions, y=waiting)) + geom_point() + geom_density2d(aes(colour=..level..))
(なんかわかりづらいですね。)
可視化には、塗りつぶしたり、透過して表示したりできます。
ggplot(faithful, aes(x=eruptions, y=waiting)) + stat_density2d(aes(fill=..density..), geom = "raster",contour = FALSE)
ggplot(faithful, aes(x=eruptions, y=waiting)) + geom_point() + stat_density2d(aes(alpha=..density..), geom = "tile",contour = FALSE)
1次元の密度推定と同じように、平滑化の帯域幅を指定できます。
2次元なので、x軸とy軸に対する帯域幅ベクトルを指定します。
ggplot(faithful, aes(x=eruptions, y=waiting)) + stat_density2d(aes(fill=..density..), geom = "raster",contour = FALSE, h=c(.5,5))
…う~ん、なんだかなぁという感じです。。。
データ分布のまとめ
今回含め、全5回、データ分布を可視化することをしてきました。
観測値系
データの観測値を可視化するグラフは、この3つです。
- ヒストグラム:geom_histogram()
- 箱ひげ図:geom_boxplot()
- ドットプロット:geom_dotplot
ヒストグラムとドットプロットは、ビン詰め系です。
ビン詰め系は、binwidth引数で、ビンの幅を指定できます。
ヒストグラムは、x軸に連続値を取りますが、
箱ひげ図とドットプロットは、x軸に離散値を取りました。