2要因の箱ひげ図
Rは箱ひげ図を描くのにとても便利です。
ここでは2要因の箱ひげ図を描く場合をとりあげます。
まずは1要因の箱ひげ図から。
Rに予め用意されているデータセット(InsectSprays)を使ってみます。
データセットはsprayの種類ごとにカウントデータが12個ずつあります。
データ数は以下のコマンドで確認できます。
> summary(InsectSprays)
count spray
Min. : 0.00 A:12
1st Qu.: 3.00 B:12
Median : 7.00 C:12
Mean : 9.50 D:12
3rd Qu.:14.25 E:12
Max. :26.00 F:12
早速箱ひげ図を描いてみます。
> boxplot(count ~ spray, data = InsectSprays)
とても簡単です。これが一要因(この場合はspray)の箱ひげ図。
本題はここから。
今度はRに入っている別のデータセット(ToothGrowth)を使ってみます。
> boxplot(len~supp+dose, data=ToothGrowth)
ちなみに以下でも同じ図になります
> boxplot(len~supp*dose, data=ToothGrowth)
色をつけてみます。
> boxplot(len~supp+dose, data=ToothGrowth, col=c("red"," yellow"))
今度は赤と黄色の距離を縮めて、2要因であることがわかりやすくなるようにします。データが6つあるので、x軸の目盛の位置は1~6になっています。これを0.1ずつずらします。
また、x軸の目盛もsupp(OJとVC)だけにして、その下にもう一つの要因(dose)を表示します。手順は、まず最初の行でx軸の目盛とラベルを消去し、3行目で目盛とラベルを指定して作り直しています。グラフの下側(x軸)はside=1で指定します。要因doseはテキスト追加(mtextはグラフ外に追加)で表示します。この命令文の中にあるline=2.5は、グラフのx軸から2.5行分離して表示、という意味で、atは表示する位置を指定します。
> boxplot(len~supp+dose, data=ToothGrowth, col=c("red","yellow"), xaxt="n",
+ at=c(1.1, 1.9, 3.1, 3.9, 5.1, 5.9))
> axis(side=1, at=c(1.1, 1.9, 3.1, 3.9, 5.1, 5.9), labels=rep(c("OJ", "VC"), 3))
> mtext("0.5", side=1, line=2.5, at=1.5)
> mtext("1", side=1, line=2.5, at=3.5)
> mtext("2", side=1, line=2.5, at=5.5)
完成です!
2要因の順序を逆にすることもできます。
> boxplot(len~dose+supp, data=ToothGrowth, col=rep(c("red","yellow"), each = 3), xaxt="n")
> axis(side=1, at=c(1:6), labels=rep(c("0.5", "1", "2"), 2))
> mtext("OJ", side=1, line=2.5, at=2)
> mtext("VC", side=1, line=2.5, at=5)
できました!
ところで、1.1と1.9と3.1と3.9と5.1と5.9を入力するのはスマートではありません。いい方法がありそうなものですが、今のところは不明。
以下のコマンドでできましたが、これなら直接入力した方が早い・・・
> c(1,1,3,3,5,5)+c(0.1, 0.9)
[1] 1.1 1.9 3.1 3.9 5.1 5.9
> rep(c(1,3,5), each=2)+c(0.1,0.9)
[1] 1.1 1.9 3.1 3.9 5.1 5.9
お問い合わせ先
〒739-8528 東広島市鏡山1-4-4 広島大学 統合生命科学研究科
082-424-7941 (直通)
tomiyama(at)hiroshima-u.ac.jp