2要因の箱ひげ図

2019年02月28日 14:22

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

サイト内検索

お問い合わせ先

冨山 毅 Takeshi Tomiyama 〒739-8528 東広島市鏡山1-4-4 広島大学 統合生命科学研究科 082-424-7941 (直通)