usando stat_function e facet_wrap juntos em ggplot2 em R
Estou tentando plotar dados do tipo de rede com ggplot2 e, em seguida, sobrepondo uma distribuição normal sobre os dados de amostra para ilustrar o quão fora do normal os dados subjacentes estão. Eu gostaria de ter a dist normal no topo para ter a mesma média e stdev que o painel.
aqui está um exemplo:
library(ggplot2)
#make some example data
dd<-data.frame(matrix(rnorm(144, mean=2, sd=2),72,2),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("x_value", "Predicted_value", "State_CD")
#This works
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) + facet_wrap(~State_CD)
print(pg)
Isso tudo funciona muito bem e produz um bom gráfico de três painéis dos dados. Como adiciono a dist normal no topo? Parece que eu usaria stat_function, mas isso falha:
#this fails
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) + stat_function(fun=dnorm) + facet_wrap(~State_CD)
print(pg)
Parece que a função stat não está se dando bem com o recurso facet_wrap. Como obtenho esses dois para jogar bem?
------------EDITAR---------
Tentei integrar idéias de duas das respostas abaixo e ainda não estou lá:
usando uma combinação de ambas as respostas eu posso hackear isso:
library(ggplot)
library(plyr)
#make some example data
dd<-data.frame(matrix(rnorm(108, mean=2, sd=2),36,2),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("x_value", "Predicted_value", "State_CD")
DevMeanSt <- ddply(dd, c("State_CD"), function(df)mean(df$Predicted_value))
colnames(DevMeanSt) <- c("State_CD", "mean")
DevSdSt <- ddply(dd, c("State_CD"), function(df)sd(df$Predicted_value) )
colnames(DevSdSt) <- c("State_CD", "sd")
DevStatsSt <- merge(DevMeanSt, DevSdSt)
pg <- ggplot(dd, aes(x=Predicted_value))
pg <- pg + geom_density()
pg <- pg + stat_function(fun=dnorm, colour='red', args=list(mean=DevStatsSt$mean, sd=DevStatsSt$sd))
pg <- pg + facet_wrap(~State_CD)
print(pg)
o que é realmente próximo ... exceto que algo está errado com a representação geográfica normal:
O que eu estou fazendo errado aqui?