参考になるサイト
データの中央値(メディアン)を中央の太線で、第3四分位数(75パーセンタイル)を箱の上辺で、第1四分位数(25パーセンタイル)を下辺で、上下のエラーバー端は(第1四分位数-1.5*(第3四分位数-第1四分位数)) 以上 (第3四分位数+1.5*(第3四分位数-第1四分位数)) 以下の範囲で、それぞれ最も大きいデータ点および最も小さいデータ点を指す。丸は外れ値であるとのこと。
関数はデフォルトで入っている、
boxplot()
を使い、データは、matrix型を用います。
まず適当にデータを作ってみます。
a <- matrix(rnorm(30),nrow=6,ncol=3)
正規乱数を30個発生させ、6行3列の行列を作りました。
colnames(a) <- c("box1","box2","box3") > a box1 box2 box3 [1,] 0.08841506 0.1425491 0.2715243 [2,] 1.69399158 -0.6992151 -0.3714461 ..
box1~3について箱ひげ図が作られます。こんな感じ。
実験では、群a、bで異なる被験者数の場合もあるでしょう。
それら被験者ごとに、複数の条件で実験し、条件間のデータの比較をしたいとします。
group <- c("a","b") a <- matrix(rnorm(30),nrow=6,ncol=5) b <- matrix(rnorm(25),nrow=5,ncol=5) x <- rbind(a,b) y <- x xn <- c(rep("a",1,length(a[,1])), rep("b",1,length(b[,1]))) cond <- matrix(1,length(xn)) cond[,1] <- xn x <- cbind(cond,x)
11行(a群 n=6 + b群 n=5)×6列(文字列ラベル行1 + 条件数5)の行列で、例えば以下の様なデータになります。
> x [,1] [,2] [,3] [,4] [,5] [,6] [1,] "a" "0.173859622254333" "0.725228539697822" "-1.73026570829788" "-0.463794123205335" "1.78706372667295" [2,] "a" "1.29801909407995" "-1.67058514039805" "-0.503542904882835" "-0.70823641708232" "-0.416860435942581" .. [6,] "a" "0.647190513131625" "-0.757675322221295" "0.0795963058638695" "0.013484618365249" "0.611849912096694" [7,] "b" "-0.81783442526267" "-1.34854405012222" "0.514496326110571" "-2.45878952533466" "-0.754799480813443" [8,] "b" "-0.996345092679456" "0.977489063246152" "0.662600889521466" "-2.8116663254168" "-0.671809025840538" ..
行列xには、一列目に2種類のカテゴリを、2~6列目にはランダムな値が含まれます。
#png("boxplot1.png", width = 800, height = 400, bg = "transparent") # 描画の保存用デバイスを開く。(オプション) cols <- c("red","blue") par(mar=c(5,5,1,1)) plot(0,0,type="n",xlim=range(1:(ncol(y)*3)) ,ylim = c(-3,3),xlab="Xaxis",ylab="Yaxis", axes = FALSE, las=1, cex.lab=1.5, cex.axis=1.5) for(i in 1:length(group)){ boxplot(y[x[,1]==group[i],],at=c(1:ncol(y))*3-i+0.5,col=cols[i],xaxt="n",add=TRUE, las=1, lwd=3, cex.axis=1.3) } abline(h=0, lwd=3, lty="dotted") axis(1, at=1:ncol(y)*3-1, labels=c("Cond1", "Cond2", "Cond3", "Cond4", "Cond5"), tick=TRUE, cex.axis=1.3) #dev.off() #描画デバイスを閉じる。(オプション)
こんな感じになります。