読者です 読者をやめる 読者になる 読者になる

Mukku John Blog

取り組んでいること を つらつら と

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()

f:id:MukkuJohn:20160920201807p:plain

この密度曲線ですが、高さを色にマッピングすることができます。

ggplot(faithful, aes(x=eruptions, y=waiting)) +
  geom_point() +
  geom_density2d(aes(colour=..level..))

f:id:MukkuJohn:20160920202003p:plain
(なんかわかりづらいですね。)


可視化には、塗りつぶしたり、透過して表示したりできます。

ggplot(faithful, aes(x=eruptions, y=waiting)) +
  stat_density2d(aes(fill=..density..),
                 geom = "raster",contour = FALSE)

f:id:MukkuJohn:20160920203137p:plain

ggplot(faithful, aes(x=eruptions, y=waiting)) +
  geom_point() +
  stat_density2d(aes(alpha=..density..),
                 geom = "tile",contour = FALSE)

f:id:MukkuJohn:20160920203145p:plain


1次元の密度推定と同じように、平滑化の帯域幅を指定できます。
2次元なので、x軸とy軸に対する帯域幅ベクトルを指定します。

ggplot(faithful, aes(x=eruptions, y=waiting)) +
  stat_density2d(aes(fill=..density..),
                 geom = "raster",contour = FALSE,
                 h=c(.5,5))

f:id:MukkuJohn:20160920203339p:plain

…う~ん、なんだかなぁという感じです。。。

データ分布のまとめ

今回含め、全5回、データ分布を可視化することをしてきました。

観測値系

データの観測値を可視化するグラフは、この3つです。

  • ヒストグラムgeom_histogram()
  • 箱ひげ図:geom_boxplot()
  • ドットプロット:geom_dotplot

ヒストグラムとドットプロットは、ビン詰め系です。
ビン詰め系は、binwidth引数で、ビンの幅を指定できます。

ヒストグラムは、x軸に連続値を取りますが、
箱ひげ図とドットプロットは、x軸に離散値を取りました。

推定値系

推定値の曲線は、この2つです。

  • 密度曲線:geom_density() / geom_line(stat="density")
  • バイオリンプロット:geom_violin()

グラフは分かれていますが、密度曲線を左右対称 = バイオリンプロット です。
どちらも、adjust引数で、平滑化の帯域幅を指定できます。

観測値 + 推定値の組み合わせ

x軸に連続値を取るグラフか否かで分かれます。

ヒストグラムと密度曲線を、重ねてプロットする時は、
y軸のスケールを、密度曲線側に合わせる必要があります。

どのグラフもグループ化はできますが、x軸が連続値のモノは、
色分けよりも、ファセットグリッドを使った方が見やすいです。


次回からは、グラフ内に注釈を入れる方法を扱っていきます。