Eu estou tentando fazer um histograma de valores de densidade e sobrepor isso com a curva de uma function de densidade (não a estimativa de densidade).
Usando um exemplo normal padrão simples, aqui estão alguns dados:
x <- rnorm(1000)
Eu posso fazer:
q <- qplot( x, geom="histogram") q + stat_function( fun = dnorm )
mas isso dá a escala do histograma em freqüências e não em densidades. com ..density..
Eu posso obter a escala adequada no histograma:
q <- qplot( x,..density.., geom="histogram") q
Mas agora isso dá um erro:
q + stat_function( fun = dnorm )
Existe algo que não estou vendo?
Outra questão, existe uma maneira de traçar a curva de uma function, como curve()
, mas não como layer?
Aqui está!
# create some data to work with x = rnorm(1000); # overlay histogram, empirical density and normal density p0 = qplot(x, geom = 'blank') + geom_line(aes(y = ..density.., colour = 'Empirical'), stat = 'density') + stat_function(fun = dnorm, aes(colour = 'Normal')) + geom_histogram(aes(y = ..density..), alpha = 0.4) + scale_colour_manual(name = 'Density', values = c('red', 'blue')) + theme(legend.position = c(0.85, 0.85)) print(p0)
Uma alternativa mais básica à resposta de Ramnath, passando a média e o desvio padrão observados e usando ggplot
vez de qplot
:
df <- data.frame(x = rnorm(1000, 2, 2)) # overlay histogram and normal density ggplot(df, aes(x)) + geom_histogram(aes(y = stat(density))) + stat_function( fun = dnorm, args = list(mean = mean(df$x), sd = sd(df$x)), lwd = 2, col = 'red' )