R Box Plot

この記事では、Rプログラミングでウィスカーとボックスプロットを作成することを学習します。

Rでは、ボックスプロット(およびヒゲプロット)はboxplot()関数を使って作成します。

関数は任意の数の数値ベクトルを受け取り、各ベクトルについてボックスプロットを描きます。 ここでは、”Daily air quality measurements in New York, May to September 1973.”-R documentation-を持つ組み込みデータセットairqualityを使ってみましょう。

> str(airquality)'data.frame':153 obs. of 6 variables:$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...$ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...$ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...$ Temp : int 67 72 74 62 56 66 65 59 61 69 ...$ Month : int 5 5 5 5 5 5 5 5 5 5 ...$ Day : int 1 2 3 4 5 6 7 8 9 10 ...

オゾン測定値に対してボックスプロットを作成してみましょう。

boxplot(airquality$Ozone)

Default box plot in R Programming

中央値以上のデータは分散性が高いことが分かります。 また、高い方の極値には2つの外れ値があることがわかります。

プロットの見え方をコントロールするために、追加のパラメータを渡すことができます。 それらについてはヘルプ ?boxplot を参照してください。

よく使われるものとしては、main はタイトル、 xlabylab は軸のラベル、 col は色などを定義するもの、などがあります。

さらに、引数horizontal = TRUEで水平にプロットでき、notch = TRUEでボックスにノッチを追加できます。

boxplot(airquality$Ozone,main = "Mean ozone in parts per billion at Roosevelt Island",xlab = "Parts Per Billion",ylab = "Ozone",col = "orange",border = "brown",horizontal = TRUE,notch = TRUE)

Horizontal box plot in R

boxplot()の戻り値

関数は以下の6要素で示すリストを返します。

> b <- boxplot(airquality$Ozone)> b$stats 1.0 18.0 31.5 63.5 122.0attr(,"class")1 "integer" $n 116$conf 24.82518 38.17482$out 135 168$group 1 1$names "1"

上で見たように、stats-中央値、

  • n-箱ひげ図が描かれた観測回数(NAは考慮されない)
  • conf-ノッチの上端・下端を持つリストが返されます。 out外れ値の値
  • group outと同じ長さのベクトルで、その要素は外れ値がどのグループに属するかを示し、
  • namesはグループの名前を表すベクトルである。

複数の箱ひげ図

リスト、データフレーム、複数のベクトルを渡すことで、1つのプロットに複数の箱ひげ図を描くことができます。

ここでは、airqualityデータセットのOzoneTempフィールドを考えてみましょう。 また、同じ平均と標準偏差を持つ正規分布を生成し、比較のために並べてプロットしてみましょう。

# prepare the dataozone <- airquality$Ozonetemp <- airquality$Temp# gererate normal distribution with same mean and sdozone_norm <- rnorm(200,mean=mean(ozone, na.rm=TRUE), sd=sd(ozone, na.rm=TRUE))temp_norm <- rnorm(200,mean=mean(temp, na.rm=TRUE), sd=sd(temp, na.rm=TRUE))

さて、このデータで4つの箱ひげ図を作ってみましょう。

boxplot(ozone, ozone_norm, temp, temp_norm,main = "Multiple boxplots for comparision",at = c(1,2,4,5),names = c("ozone", "normal", "temp", "normal"),las = 2,col = c("orange","red"),border = "brown",horizontal = TRUE,notch = TRUE)

r-multiple-boxplot

Boxplot form Formula

関数 boxplot()y~x 形式の式も取り込むことができ、yx の値に従ってグループ化される数値ベクトルである。

例えば、データセットairqualityでは、Tempは数値ベクトルであることができる。 月がグループ化変数となり、各月の箱ひげ図を個別に得ることができます。

boxplot(Temp~Month,data=airquality,main="Different boxplots for each month",xlab="Month Number",ylab="Degree Fahrenheit",col="orange",border="brown")

Multiple box plots in a single plot

上の図から、月番号7(7月)が他よりも比較的暑いことが明らかであろう。