使用geom_smooth和ggplot显示标准偏差

mo-*_*eph 15 statistics r ggplot2

我们有一些数据表示在不同情况下的许多模型运行.对于单个场景,我们希望显示平滑的平均值,其中填充区域表示特定时间点的标准偏差,而不是平滑拟合的质量.

例如:

d <- as.data.frame( rbind( cbind( 1:20, 1:20,1 ), cbind(1:20, -1:-20,2 ) ) )
names(d)<-c("Time","Value","Run")
ggplot( d, aes(x=Time,y=Value) ) + geom_line( aes(group=Run) ) + geom_smooth()
Run Code Online (Sandbox Code Playgroud)

生成一个图表,其中表示两次运行,平滑均值,但即使运行之间的SD增加,平滑的条形也保持相同的大小.我想让更平滑的环绕代表给定时间步长的标准偏差.

考虑到许多不同的运行和输出变量,是否存在非劳动密集型的方法?

koh*_*ske 16

嗨,我不确定我是否正确理解你想要的东西,但是,例如,

d <- data.frame(Time=rep(1:20, 4), 
                Value=rnorm(80, rep(1:20, 4)+rep(1:4*2, each=20)),
                Run=gl(4,20))

mean_se <- function(x, mult = 1) {  
  x <- na.omit(x)
  se <- mult * sqrt(var(x) / length(x))
  mean <- mean(x)
  data.frame(y = mean, ymin = mean - se, ymax = mean + se)
}

ggplot( d, aes(x=Time,y=Value) ) + geom_line( aes(group=Run) ) + 
  geom_smooth(se=FALSE) + 
  stat_summary(fun.data=mean_se, geom="ribbon", alpha=0.25)
Run Code Online (Sandbox Code Playgroud)

请注意,mean_se将出现在下一版本的ggplot2中.