Ajustar una curva de densidad a un histogtwig en R

¿Hay una función en R que ajuste una curva a un histogtwig?

Supongamos que tiene el siguiente histogtwig

hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))) 

Parece normal, pero está sesgado. Quiero ajustar una curva normal sesgada para envolver este histogtwig.

Esta pregunta es bastante básica, pero parece que no puedo encontrar la respuesta para R en Internet.

Si entiendo tu pregunta correctamente, entonces probablemente quieras una estimación de densidad junto con el histogtwig:

 X <- c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)) hist(X, prob=TRUE) # prob=TRUE for probabilities not counts lines(density(X)) # add a density estimate with defaults lines(density(X, adjust=2), lty="dotted") # add another "smoother" density 

Edita mucho tiempo después:

Aquí hay una versión un poco más disfrazada:

 X <- c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)) hist(X, prob=TRUE, col="grey")# prob=TRUE for probabilities not counts lines(density(X), col="blue", lwd=2) # add a density estimate with defaults lines(density(X, adjust=2), lty="dotted", col="darkgreen", lwd=2) 

junto con el gráfico que produce:

enter image description here

Tal cosa es fácil con ggplot2

 library(ggplot2) dataset <- data.frame(X = c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))) ggplot(dataset, aes(x = X)) + geom_histogram(aes(y = ..density..)) + geom_density() 

o imitar el resultado de la solución de Dirk

 ggplot(dataset, aes(x = X)) + geom_histogram(aes(y = ..density..), binwidth = 5) + geom_density() 

Así es como lo hago:

 foo <- rnorm(100, mean=1, sd=2) hist(foo, prob=TRUE) curve(dnorm(x, mean=mean(foo), sd=sd(foo)), add=TRUE) 

Un ejercicio adicional es hacer esto con el paquete ggplot2 ...

Dirk explicó cómo trazar la función de densidad sobre el histogtwig. Pero a veces puede querer asumir la suposición más fuerte de una distribución normal sesgada y trazar eso en lugar de densidad. Puede estimar los parámetros de la distribución y trazarlos usando el paquete sn :

 > sn.mle(y=c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))) $call sn.mle(y = c(rep(65, times = 5), rep(25, times = 5), rep(35, times = 10), rep(45, times = 4))) $cp mean sd skewness 41.46228 12.47892 0.99527 

Diagrama de datos distribuidos asimétricos

Esto probablemente funciona mejor en datos que son más oblicuos:

Otra trama oblicua

Tuve el mismo problema, pero la solución de Dirk no pareció funcionar. Estaba recibiendo este mensaje de advertencia cada vez

 "prob" is not a graphical parameter 

Leí a través de? Hist y encontré sobre freq : un vector lógico establecido como TRUE por defecto.

el código que funcionó para mí es

 hist(x,freq=FALSE) lines(density(x),na.rm=TRUE) 
Intereting Posts