ggplot で標準偏差付きプロット

一般に実験データはさまざまなノイズが入っていて,生データ(Raw Data)のままではデータを正確に読み解くことは難しくなっています.そのため,ノイズを除くためにさまざまなフィルタ処理が必要となってきます.さらに,周期的な現象や (e.g. 振り子の運動,歩行),同じ条件で繰り返し実験を行う場合 (e.g. 材料の引っ張り試験),1周期あるいは1試行ごとにデータを切り分けて,位相あるいは実験における独立な数ごとに平均と分散を取ることがあります.

今回はこのような場合におけるグラフをRのggplotを使って作っていきます.プログラムはこちらです
今回のプログラムでは,ホワイトノイズ付きの正弦波をサンプルデータとして作成します (18行–21行).このデータでは,1周期に対するサンプリング数が100で,20周期分の波形となっています.

23行–29行 では, 1周期のサンプリングごとにデータを折り返していき,各位相に対して処理を行っています.
24行,27行で行っている処理は次のようなものです.

x1 = [1, 2, 3, ..., 100, 101, 102, ..., 200, 201,... ]
x1Mat <- matrix(x1,100)
x1Mat = [1, 101, 202, ...
2, 201, 202, ...
3, 301, 301, ...]

つまり,時間などに対して並んでいたベクトルデータを周期ごとに別の列に移動し,行列に変換しています.この行列の場合,m列目がm周期目, n行めが位相:n/100 [rad]目となります.行列に変換しておくことで,apply関数が使えるようになります.今回はapply関数で,mean, sdを適用し,各位相での平均と標準偏差を求めています.

31行–38行では,ggplotの準備としてデータフレームを作成します.前半は以前のサンプルプロットと同じ要領で,位相と平均のデータをデータフレームを格納し,gatherでggplotで使いやすい形に変形します.このとき,標準偏差も同時にデータフレームに入れると,平均との関係が切れてしまうため (valueにまとめて入ってしまう),別のデータフレームを作成し,最後に結合します.

40行–61行ではplot用の関数myplotを定義しています.標準偏差のレイヤーは,44行ー50行で作成しています.
最後に実際にplotするとこちらのようなグラフが出来上がります.

今回は標準偏差の帯付きのグラフを作成しました.標準偏差を見せることで,値が信頼できるが判断することも多いので,実験データにはなるべく標準偏差をつけましょう.このプログラムはMatthijs van Eedeさんの説明を参考にしています.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です