生データから誤差線付きの折れ線グラフ

2020年04月08日 18:34

生データから折れ線グラフを作成します。


こんな図を作る手順です。




今回も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ではこんな感じで簡単にできます。

サイト内検索

お問い合わせ先

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