※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

#--- 例示用のサンプルデータ作成 ---#
set.seed(2801)
x <- rep(seq(5), rep(6, 5))
y <- 10 * x + 5 + rnorm(length(x), mean=0, sd=3)

#--- X, Y の平均、標準偏差 ---#

.mean <- tapply(y, x, mean)
.sd <- tapply(y, x, sd)

#--- データフレームにまとめる ---#
.mean.sd <- data.frame(
  x=as.numeric(names(.mean)),
  mean=.mean,
  msd=.mean-.sd, # 平均 - 標準偏差
  psd=.mean+.sd  # 平均 + 標準偏差
)

#--- 生値プロット ---#
plot(x, y)

#--- 平均±標準偏差のプロット ---#
plot.mean.sd <- function(
  data, # 名前付きベクトル
  x.diff=0, # 平均値を X 軸方向にずらして表示させる際の差分
  length=0.1, # エラーバーの上下の横線の幅
  cex=1.2 # 平均値シンボルのサイズ
) {
  x <- data["x"] + x.diff
  points(x, data["mean"], pch=19, cex=cex) # 平均値を●で
  arrows(
    x, data["msd"], x, data["psd"], angle=90, length=length, code=3
  ) # エラーバー
  return(invisible())
}

#--- 行単位で処理 ---#
apply(.mean.sd, 1, FUN=plot.mean.sd, x.diff=0.1)

参照

R