箱ひげ図は四分位数の定義で異なる: geom_boxplot と boxplot
井口豊(生物科学研究所,長野県岡谷市)
最終更新: 2022 年 9 月 4 日
1. はじめに
四分位数(quartile)には複数定義があることは,既に,別ページで解説した。
箱ひげ図(boxplot)を描く時に四分位数を利用するので,当然だが,箱ひげ図は四分位数の定義によって異なる場合がある。
統計ソフト R には,四分位数を描く関数が複数ある。しかしながら,ネットや書籍を見ても,箱ひげ図が関数によって異なる場合かどうか,ほとんど触れられていない(知られていない?)。
実は,パッケージ ggplot2 の geom_boxplot オンラインマニュアル の Summary statistics には,以下のような注意書きがある。
This differs slightly from the method used by the boxplot() function, and may be apparent with small samples.
実際に, geom_boxplot と boxplot の違いを調べてみよう。
2. geom_boxplot と boxplot による箱ひげ図の例
ポアソン乱数の 1 例を使って,上記の関数の要約統計量(箱ひげ下端,第 1 四分位数,第 2 四分位数(中央値),第 3 四分位数,箱ひげ上端)算出と箱ひげ図の描画を実行してみる。
# ポアソン乱数データ
set.seed(50)
x<- rpois(10, lambda = 2)
# geom_boxplot による箱ひげ図作成
library(ggplot2)
df<- data.frame(x)
g<- ggplot(df, aes(x = "", y = x)) +
geom_boxplot(
col = "black", fill = "lightgray",
) +
ggtitle("geom_boxplot") +
theme_classic()
# ggplot2 の要約統計量
gps<- as.numeric(
ggplot_build(g)$data[[1]][1:5]
)
# boxplot の要約統計量
bps<- as.numeric(
boxplot(x, plot = F)$stats
)
# 要約統計量の表
library(gt)
df<- data.frame(
関数 = c("geom_boxplot", "boxplot"),
ヒゲ下端 = c(gps[1], bps[1]),
第1四分位数 = c(gps[2], bps[2]),
中央値 = c(gps[3], bps[3]),
第3四分位数 = c(gps[4], bps[4]),
ヒゲ上端 = c(gps[5], bps[5])
)
df
gt(df)
# geom_boxplot による箱ひげ図描画
g
# boxplot による箱ひげ図描画
dev.new()
boxplot(x)
title("boxplot")
dev.off()
##############
まず, geom_boxplot と boxplot の要約統計量の結果は以下の表 1 のようになった。
次に, geom_boxplot と boxplot 箱ひげ図は以下の図 1 のようになった。
四分位数の定義の違い由来する箱ひげ図の違いが明らかである。前述のサイト四分位数と四分位群:複数定義と用語の区別,その歴史
で挙げた四分位数のタイプのうち,どうやら geom_boxplot は Type 7 で, boxplot は Type 2 らしい。
要約統計量の視覚表現として,ざっと見るだけならば,どちらでもそれほど差がないが,外れ値を取り出すのに箱ひげ図を利用するとなると,利用する関数が影響する場合があるので,注意が必要である。