2010-11-17 34 views
15

我們有一些數據表示許多模型在不同情況下運行。對於單個場景,我們希望顯示平滑均值,其中填充區域代表特定時間點的標準偏差,而不是適合平滑的質量。使用geom_smooth和ggplot顯示標準偏差

例如:

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增加,平滑的酒吧停留在相同的尺寸。我想在給定的時間步使周圍的平滑代表標準偏差。

鑑於許多不同的運行和輸出變量,是否有一種非勞動密集型的方式?

回答

15

嗨,我不知道如果我理解正確你想要什麼,但例如,

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的下一個版本。

+0

太棒了,謝謝! – 2010-11-17 15:11:08