web-dev-qa-db-fra.com

Barres d'erreur standard à l'aide de stat_summary

Le code suivant produit des graphiques à barres avec des barres d'erreur standard à l'aide de Hmisc, ddply et ggplot:

means_se <- ddply(mtcars,.(cyl),
                  function(df) smean.sdl(df$qsec,mult=sqrt(length(df$qsec))^-1))
colnames(means_se) <- c("cyl","mean","lower","upper")
ggplot(means_se,aes(cyl,mean,ymax=upper,ymin=lower,group=1)) + 
  geom_bar(stat="identity") +  
  geom_errorbar()

Cependant, l'implémentation de ce qui précède en utilisant des fonctions d'assistance telles que mean_sdl semble beaucoup mieux. Par exemple, le code suivant produit un tracé avec des barres d'erreur IC à 95%:

ggplot(mtcars, aes(cyl, qsec)) + 
  stat_summary(fun.y = mean, geom = "bar") + 
  stat_summary(fun.data = mean_sdl, geom = "errorbar")

Ma question est de savoir comment utiliser l'implémentation stat_summary pour les barres d'erreur standard. Le problème est que pour calculer SE, vous avez besoin du nombre d'observations par condition et vous devez y accéder dans le multiplicateur de mean_sdl.

Comment accéder à ces informations dans ggplot? Existe-t-il une solution soignée et non hacky pour cela?

22
aleph4

Eh bien, je ne peux pas vous dire comment obtenir un multiplicateur par groupe dans stat_summary.

Cependant, il semble que votre objectif soit de tracer les moyennes et les barres d'erreur qui représentent une erreur standard à partir de la moyenne dans ggplot sans résumer l'ensemble de données avant de tracer.

Il y a un mean_se fonction dans ggplot2 que nous pouvons utiliser à la place de mean_cl_normal de Hmisc. Le mean_se la fonction a un multiplicateur de 1 par défaut, nous n'avons donc pas besoin de passer d'arguments supplémentaires si nous voulons des barres d'erreur standard.

ggplot(mtcars, aes(cyl, qsec)) + 
    stat_summary(fun.y = mean, geom = "bar") + 
    stat_summary(fun.data = mean_se, geom = "errorbar")

Si vous souhaitez utiliser le mean_cl_normal fonction de Hmisc, vous devez changer le multiplicateur à 1 pour obtenir une erreur standard à partir de la moyenne. L'argument mult est un argument pour mean_cl_normal. Les arguments que vous devez transmettre à la fonction récapitulative que vous utilisez doivent être fournis sous forme de liste à fun.args argument:

ggplot(mtcars, aes(cyl, qsec)) + 
    stat_summary(fun.y = mean, geom = "bar") + 
    stat_summary(fun.data = mean_cl_normal, geom = "errorbar", fun.args = list(mult = 1))

Dans les versions pré-2.0 de ggplot2, l'argument pouvait être passé directement:

ggplot(mtcars, aes(cyl, qsec)) + 
  stat_summary(fun.y = mean, geom = "bar") + 
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", mult = 1) 
50
aosmith