第3章ではggplot2を使ったグラフの作り方を紹介しています。


【3-1】ExcelにはないRでグラフを作るメリットと特徴

【3-2】ggplot2でグラフを作る流れを説明します

【3-3】Rのggplot2で散布図を作るgeom_point関数

【3-4】Rのggplot2でヒストグラムを作るgeom_histogram関数

【3-5】Rのggplot2で密度曲線を作るgeom_density関数

今回は箱ひげ図(boxplot)を紹介します。

箱ひげ図は正規分布でないデータやマンホイットニーのU検定などノンパラメトリックの検定で使われます。RコマンダーやEZRでも検定と一緒に箱ひげ図が出てきますが、変数名が日本語だと□□と文字化けしてしまいます。Rstudioでggplot関数を使えば文字化け対策やグループ毎に色を付けるなどきれいなグラフが作れます。

1.データの読み込み

今回もggplotパッケージが含まれているtidyverseパッケージを読み込みます。
#tidyverseパッケージをインストールしていなければインストール。していれば次へ

install.packages("tidyverse")

#既にtidyverseパッケージをインストールしている方は以下でもOK

library(tidyverse)

#データ取り込みます。今回はdatという変数にデータを入れます

url <- "https://github.com/mitti1210/myblog/blob/master/heights.csv?raw=true"
dat <- read.csv(url)

このデータはヒストグラムを作る時に作ったデータと同じものを使用しています。



2.箱ひげ図(boxplot)とは?


箱ひげ図は以下のようなグラフです。

スクリーンショット 2019-07-21 23.28.32


棒グラフは「平均値」だけですが、箱ひげ図は「最小値, 第一四分位数, 中央値, 第三四分位数, 最大値」を示します。
また「ひげ」の外にあるデータは「外れ値」として点で表示され、大まかな分布を知ることができます。



3.四分位とは

四分位範囲も含め箱ひげ図で表示されるデータは全て「順位」で決められています。スクリーンショット 2019-07-22 1.00.16

これらはqantile関数で直接求めることができます。



4.箱ひげ図の特徴

(平均ではなく)中央値を比較するのに向いている

箱ひげ図は平均ではなく中央値を表示します。
そのため正規分布でないデータやノンパラメトリックの検定でよく使われます。

スクリーンショット 2019-07-22 1.18.14


簡易的な分布がわかる

棒グラフ±標準偏差ではある程度の分布は示してくれますが、実際今回のデータの最大値・最小値がどうだったのか等は教えてくれません。それに比べ箱ひげ図はある程度の分布を表してくれます。

ただ注意したいのが、データに二峰性の分布があると箱ひげ図でも分布がうまく反映できません。


スクリーンショット 2019-07-22 1.10.06



グラフを使って何を示したいのか?が大切になってきます。


5.箱ひげ図の基本的な作り方

ggplot2でヒストグラムを作る時にはgeom_boxplot関数を使います。
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_boxplot(aes(x = 性別, y = 身長), data = dat)
スクリーンショット 2019-07-17 1.12.03

6.線の色を変える

線の色を変える時はcolor = ○○を使います。

ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_boxplot(aes(x = 性別, y = 身長), color = "red", data = dat)


スクリーンショット 2019-07-17 1.12.10


7.中に色をぬる

中の色はfill = ○○を使います。
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_boxplot(aes(x = 性別, y = 身長), fill = "red", data = dat)

スクリーンショット 2019-07-17 1.12.19


色を薄くする時はalpha = ○○を使います。
alphaは0〜1の値を選択します。

ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_boxplot(aes(x = 性別, y = 身長), fill = "red", alpha = 0.5, data = dat)


スクリーンショット 2019-07-17 1.12.26


8.グループ毎に色を変える

グループ毎に色を指定するにはaes関数の中にcolorやfillを入れます。
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_boxplot(aes(x = 性別, y = 身長, fill = 性別), alpha = 0.5, data = dat)


スクリーンショット 2019-07-17 1.12.32

9.応用編:グラフを横にする

グラフの向きを横にするにはcoord_flip()を使います。()の中は何も入れません。

ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_boxplot(aes(x = 性別, y = 身長, fill = 性別), alpha = 0.5, data = dat)+
  coord_flip()



スクリーンショット 2019-07-17 1.12.38




10.応用編:ひげ(wisker)の求め方


箱ひげ図は「最小値, 第一四分位数, 中央値, 第三四分位数, 最大値」を示します。
ただ上記のグラフのようにひげは外れ値がなければひげの上端・下端が最大・最小値になるのですが、男性のように外れ値があると髭の長さは上記のどれにも当てはまりません。

もしひげの上端(下端)の値が実際何なんなのか?をこちらの記事で紹介しています。



ひげの上端・下端を求める関数を自作しました。もう少し勉強してみたい方はこちらもご参照ください。


11.まとめ

今回は箱ひげ図を紹介しました。

RコマンダーやEZRで納得の行く箱ひげ図にならなかった場合に是非試してみてください。