生データから誤差線付きの折れ線グラフ
生データから折れ線グラフを作成します。
こんな図を作る手順です。
今回もRに予め用意されているデータセット「ToothGrowth」を使ってやってみます。
Rを立ち上げて「ToothGrowth」と入力すると、以下のデータが出てきます。
len supp dose
1 4.2 VC 0.5
2 11.5 VC 0.5
3 7.3 VC 0.5
4 5.8 VC 0.5
5 6.4 VC 0.5
6 10.0 VC 0.5
7 11.2 VC 0.5
8 11.2 VC 0.5
9 5.2 VC 0.5
10 7.0 VC 0.5
(以下省略、データ数は60)
どんなデータなのか、を知りたいときは、help関数で聞いてみましょう。
> help(ToothGrowth)
すると、説明が出てきます。訳すると「モルモットの象牙芽細胞(歯の成長に関与する細胞)の長さについて、オレンジジュース(OJ)またはビタミンC(VC)を、3つの用量(1日あたり0.5、1、2mg)で投与してどう変化するか調べた」というものです。lenが細胞の長さ、suppが投与したもの、doseが用量です。つまり、3つの変数があり、lenを応答変数とした場合、2要因の実験ということになります。
まず、平均と標準偏差を集計します。
Lmean<-tapply(ToothGrowth$len,ToothGrowth[, c("dose","supp")], mean)
Lsd<-tapply(ToothGrowth$len, ToothGrowth[, c("dose","supp")], sd)
ここで注意しなければならないのは、x軸に用いる変数(この場合は"dose")を先にするということです。
試しに「Lmean」と入力してみると以下のように表示されます。
supp
dose OJ VC
0.5 13.23 7.98
1 22.70 16.77
2 26.06 26.14
ではグラフにしていきましょう。今回は余白を少なくするため、予め「par(mar=c(5,5,1,1))」を入力しています。
まず、x軸の数値を先に指定しておきます。こうすると後でラクです。この場合は用量が3段階で0.5、1、2なので、以下のようにしておきます。
xdose<-c(0.5, 1, 2)
matplot(xdose, Lmean, type="b", pch=c(1,2), lty=c(2,3), xlab="Dose", ylab="Length",
ylim=range(c(Lmean-Lsd, Lmean+Lsd)), col=c(1,2))
平均値の変化が表示されました。
解説:matplotは複数の行列をまとめて図示するのに便利です。最初にx軸の値、次にデータ(まずは平均値ということでLmean)、typeは折れ線グラフの種類、pchは記号の種類、ltyは線の種類(破線と点線にしています)、x軸とy軸のタイトル、y軸の範囲(これを指定しないと、誤差線が図からはみ出てしまうこともあります)、colは色の指定です。
続いて誤差線を表示します。
arrows(xdose, Lmean+Lsd, xdose, Lmean-Lsd, col=rep(c(1,2),each=3),
length=0.1, angle=90, code=3)
解説:arrowsで誤差線を追加します。x軸の値を指定して、正の方向、同様に負の方向の長さを指定します。色は、rep(繰り返し)を指定しておかないといけません。3段階の用量なので繰り返し3回です。あとは誤差線の通常指定です。正のみ、負のみの場合は省略します(参考)。
最後に凡例を表示します。
legend("bottomright", legend=colnames(Lmean), pch=c(1,2), col=c(1,2), lty=c(2,3))
完成です!
Excelではピボットテーブルで集計して作図、という手順で作成していましたが、Rではこんな感じで簡単にできます。
お問い合わせ先
〒739-8528 東広島市鏡山1-4-4 広島大学 統合生命科学研究科
082-424-7941 (直通)
tomiyama(at)hiroshima-u.ac.jp