带状图显示均值 + 标准差 [r]

Stripplot showing mean+sd [r]

您好,我想绘制一个显示均值+标准差的条带图。我无法显示箱线图,因为我的值少于 5 个,所以我想使用均值和 sd。我的问题是我无法计算组内的均值和 sd,而是我得到两个均值,这两个均值在两个组中都表示并且与段相同。

require(lattice)

stripplot(l ~ Medium, parameters,

       ylab=list(expression("lag phase - h"),cex=1.5),
       xlab=list("Medium", cex=1.5),
       auto.key=list(columns=2, rectangles=T, points=F, pch=16, at=NULL ),
       ylim=c(-2,15),
       up=parameters$l+parameters$sd.l,
       lo=parameters$l-parameters$sd.l,
       panel=function(x,y,up,lo,...){
         xj=jitter(as.numeric(x), factor=0.5)
         panel.stripplot(xj,y,pch=16 , alpha=0.5 , factor=0.2,
                         cex=1.2 , ...)
         panel.abline(h=0,col="black",...)
         panel.arrows(x0=xj, y0=lo,
                      x1=xj, y1=up,code=3,
                      angle=90, length=0.05
                      ,alpha=0.5)
         panel.dotplot(x=x, y=tapply(y,x,mean), col="red")
         panel.segments(x0=x,x1=x,y0=mean(y)-sd(y),y1=mean(y)+sd(y),col="red")
       }


)

如果您以 Medium 为条件,即 ~l|Medium 而不是 l~Medium,您可以计算面板函数中每个水平的均值和标准差。

例如

stripplot(~Sepal.Length|Species,iris,
  panel=function(x,y,...) {
     m=mean(x)
     panel.stripplot(x,y,...)
     panel.stripplot(m,y,pch="|",cex=2,col=2)
  }
)

否则,您可以使用 byaggregate 或类似方法为 stripplot 之外的每个水平计算平均值和标准差,然后将它们添加到图中。