logo
生物科学研究所 井口研究室
Laboratory of Biology, Okaya, Nagano, Japan
Home

箱ひげ図は四分位数の定義で異なる: 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 のようになった。

表 1. geom_boxplot と boxplot 箱ひげ図の要約統計量 箱ひげ図の要約統計量

次に, geom_boxplot と boxplot 箱ひげ図は以下の図 1 のようになった。

geom_boxplot と boxplot 箱ひげ図

図 1. geom_boxplot と boxplot 箱ひげ図

四分位数の定義の違い由来する箱ひげ図の違いが明らかである。前述のサイト四分位数と四分位群:複数定義と用語の区別,その歴史で挙げた四分位数のタイプのうち,どうやら geom_boxplot は Type 7 で, boxplot は Type 2 らしい。

要約統計量の視覚表現として,ざっと見るだけならば,どちらでもそれほど差がないが,外れ値を取り出すのに箱ひげ図を利用するとなると,利用する関数が影響する場合があるので,注意が必要である。

関連サイト

Home