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

例如:

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()


会产生一个图形,该图形具有两个表示的游程以及一个平滑的均值,但是即使游程之间的SD不断增加,平滑器的条也保持相同的大小。我想使平滑的周围代表给定时间步的标准偏差。

给定许多不同的运行和输出变量,是否有一种非劳动密集型的方法来执行此操作?

最佳答案

您好,我不确定我是否正确理解您的需求,但是例如,

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)


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

关于r - 在ggplot中使用geom_smooth显示标准偏差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4205428/

10-12 19:23