Sus datos no parecen discretos para mí. Esperar una probabilidad cuando se trabaja con datos continuos es completamente erróneo. density()
le da una función de densidad empírica, que se aproxima a la función de densidad real. Para demostrar que es una densidad correcta, se calcula el área bajo la curva:
energy <- rnorm(100)
dens <- density(energy)
sum(dens$y)*diff(dens$x[1:2])
[1] 1.000952
Teniendo en cuenta algunos errores de redondeo. el área bajo la curva resume hasta uno, y por lo tanto el resultado de density()
cumple con los requisitos de un PDF.
Utilice la opción probability=TRUE
de hist
o la función density()
(o ambos)
por ejemplo:
hist(energy,probability=TRUE)
lines(density(energy),col="red")
da

Si realmente necesita una probabilidad para una discreta variable, usted usa:
x <- sample(letters[1:4],1000,replace=TRUE)
prop.table(table(x))
x
a b c d
0.244 0.262 0.275 0.219
Editar: Ilustración por qué los ingenuos count(x)/sum(count(x))
No es una solución. De hecho, no es porque los valores de los contenedores sean iguales a uno, sino por el área bajo la curva. Para eso, tienes que multiplicar con el ancho de los 'bins'. Tome la distribución normal, para lo cual podemos calcular el PDF usando dnorm()
. Siguiendo código construye una distribución normal, calcula la densidad, y la compara con la solución ingenua:
x <- sort(rnorm(100,0,0.5))
h <- hist(x,plot=FALSE)
dens1 <- h$counts/sum(h$counts)
dens2 <- dnorm(x,0,0.5)
hist(x,probability=TRUE,breaks="fd",ylim=c(0,1))
lines(h$mids,dens1,col="red")
lines(x,dens2,col="darkgreen")
Da:

La función de distribución acumulativa
En case @Iterator tenía razón, es bastante fácil construir el dist acumulado función de distribución de la densidad. La CDF es la integral del PDF. En el caso de los valores discretos, simplemente la suma de las probabilidades.Para los valores continuos, podemos utilizar el hecho de que los intervalos para la estimación de la densidad empírica son iguales, y calcular:
cdf <- cumsum(dens$y * diff(dens$x[1:2]))
cdf <- cdf/max(cdf) # to correct for the rounding errors
plot(dens$x,cdf,type="l")
Da:

No "la función de densidad de probabilidad" haría solo sea una probabilidad con datos discretos que no es lo que asumen las funciones de densidad. –
Entonces, ¿quieres la CDF empírica? – Iterator