2010-11-17 17 views
15

Nous avons des données qui représentent de nombreuses exécutions de modèles sous différents scénarios. Pour un scénario unique, nous aimerions afficher la moyenne lissée, avec les zones remplies représentant l'écart type à un moment donné, plutôt que la qualité de l'ajustement.Afficher la déviation standard à l'aide de geom_smooth et ggplot

Par exemple:

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

produit un graphique avec deux points représentés, et une moyenne lissée, mais même si le SD entre les pistes augmente, les barres de plus lisses restent la même taille. J'aimerais que les entourages du lisseur représentent l'écart-type à un certain moment.

Existe-t-il un moyen non laborieux de le faire, compte tenu de nombreuses variables d'exécution et de sortie?

Répondre

15

Salut, je ne suis pas sûr si je comprends bien ce que vous voulez, mais par exemple,

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) 

noter que mean_se va apparaître dans la prochaine version de ggplot2.

+0

C'est merveilleux, merci! –