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)
中央値以上のデータは分散性が高いことが分かります。 また、高い方の極値には2つの外れ値があることがわかります。
プロットの見え方をコントロールするために、追加のパラメータを渡すことができます。 それらについてはヘルプ ?boxplot
を参照してください。
よく使われるものとしては、main
はタイトル、 xlab
と ylab
は軸のラベル、 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)
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
データセットのOzone
とTemp
フィールドを考えてみましょう。 また、同じ平均と標準偏差を持つ正規分布を生成し、比較のために並べてプロットしてみましょう。
# 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)
Boxplot form Formula
関数 boxplot()
は y~x
形式の式も取り込むことができ、y
は x
の値に従ってグループ化される数値ベクトルである。
例えば、データセットairquality
では、Temp
は数値ベクトルであることができる。 月がグループ化変数となり、各月の箱ひげ図を個別に得ることができます。
boxplot(Temp~Month,data=airquality,main="Different boxplots for each month",xlab="Month Number",ylab="Degree Fahrenheit",col="orange",border="brown")
上の図から、月番号7(7月)が他よりも比較的暑いことが明らかであろう。