Cómo encontrar / estimar la función de densidad de probabilidad de la función de densidad en R

17

Supongamos que tengo una variable como Xcon distribución desconocida. En Mathematica, al usar la SmoothKernelDensityfunción podemos tener una función de densidad estimada. Esta función de densidad estimada se puede usar junto con la PDFfunción para calcular la función de densidad de probabilidad de un valor como Xen la forma de PDF[density,X]asumir que "densidad" es el resultado de SmoothKernelDensity. Sería bueno si existe tal característica en R. Así es como funciona en Mathematica

http://reference.wolfram.com/mathematica/ref/SmoothKernelDistribution.html

Como ejemplo (basado en las funciones de Mathematica):

data = RandomVariate[NormalDistribution[], 100]; #generates 100 values from N(0,1)

density= SmoothKernelDistribution[data]; #estimated density

PDF[density, 2.345] returns 0.0588784 

Aquí puede encontrar más información sobre PDF:

http://reference.wolfram.com/mathematica/ref/PDF.html

Sé que puedo trazar su función de densidad usando density(X)R y al usar ecdf(X)puedo obtener su función de distribución acumulativa empírica. ¿Es posible hacer lo mismo en R con base en lo que describí sobre Mathematica?

Cualquier ayuda e idea es apreciada.

Amin
fuente
density(x)da una estimación del pdf, como ya señaló, pero su idoneidad depende del propósito para el que desea tener la densidad. Tenga en cuenta, por ejemplo, que la varianza está sesgada (al realizar convolución, agrega la varianza del núcleo a la varianza de los datos, en sí misma una estimación imparcial), tales compensaciones de varianza de sesgo son ubicuas. Hay otras alternativas, como la estimación de densidad de spline de registro, por ejemplo, pero una vez más, su idoneidad depende en parte de lo que desee hacer con ella.
Glen_b -Reinstate Monica
@Glen_b Quiero usar la densidad estimada para encontrar la probabilidad de otros valores en la distribución. Por ejemplo, tengo un vector de datos que va de 0 a 10. Este conjunto de datos contiene solo 70 valores únicos entre 0 y 10. Puedo trazar la densidad. Ahora suponga que estoy interesado en encontrar la probabilidad de tener X = 7.5, que no está en los datos observados, en un muestreo aleatorio. ¿Cómo puedo obtenerlo? Sé que eso ecdf(X)me da el percentil equivalente de 7.5 pero no es lo que estoy buscando.
Amin
" Encontrar la probabilidad de tener X = 7.5 " - ¡ahí está tu problema! O tiene una distribución continua (en cuyo caso la respuesta real es "0") o no (en cuyo caso no debería estar usando la estimación de densidad, porque no tiene una densidad).
Glen_b: reinstala a Mónica el
1
ecdf(b)-ecdf(a)PAG(un<Xsi)<X PAG(X=7.5)
1
Lo siento, eso fue un error. Me refiero a la proporción muestral de valores que son 7.5; mi hijo me distrajo mientras escribía las últimas palabras. Su estimación de muestra de la probabilidad de un evento no observado es cero. ¿Querías solicitar un previo? ¿Deseaba un intervalo de confianza para la proporción en lugar de una estimación puntual? Su problema real aún no es un problema de R, su problema es explicar correctamente qué es lo que realmente quiere. Probablemente debería editar su pregunta o publicar una nueva.
Glen_b -Reinstale a Monica el

Respuestas:

35

?densityseñala que ya approxhace interpolación lineal; ?approxseñala que approxfungenera una función adecuada:

x <- log(rgamma(150,5))
df <- approxfun(density(x))
plot(density(x))
xnew <- c(0.45,1.84,2.3)
points(xnew,df(xnew),col=2)

ingrese la descripción de la imagen aquí

Por uso de integrate comenzar desde una distancia apropiada por debajo del mínimo en la muestra (un múltiplo, digamos 4 o 5, tal vez, del ancho de banda utilizado dfgeneralmente lo haría para una distancia apropiada), se puede obtener una buena aproximación del cdf correspondiente a df.

Glen_b -Reinstate a Monica
fuente
esto es interesante. Parece que df(2.3)da el valor de la función de densidad estimada en, x=2.3pero lo que PDFhace en Mathematica es dar el área bajo la curva de arriba x=2.3. No estoy muy seguro de esto. Esto es solo mi suposición. ¿Puedes volver a producir lo que hice en Mathematica?
Amin
Mi función anterior muestra una estimación basada en el núcleo de una "función de densidad de probabilidad" ... "evaluada en x". O quieres eso o no. Si no lo hace, usted tiene que explicar lo que no quiere - en términos estadísticos, no sólo como 'reproducir este comportamiento'.
Glen_b -Reinstate Monica
Creo que, por error y sin intención, he promovido que la densidad es la probabilidad, que no lo es. No quise ser engañoso. Si cree que PDFen Mathematica hace lo que describió en su respuesta (es decir, encontrar el valor de la función de densidad para el valor X dado), entonces creo que obtuve mi respuesta. ¡Solo hay mucha confusión al usar palabras!
Amin
2
Por lo que la PDFpágina dice que hace, devuelve el mismo tipo de cosas que yo hago, pero los métodos que utiliza en su cálculo en este caso probablemente sean algo más precisos (sin embargo, para tal propósito, la precisión adicional tiene poco valor). Para una discusión sobre la distinción probabilidad / densidad, vea aquí y aquí .
Glen_b -Reinstalar Monica