Método de muestreo simple para un estimador de densidad de kernel

10

Desarrollé un estimador de densidad de kernel simple en Java, basado en unas pocas docenas de puntos (tal vez hasta cien) y una función de kernel gaussiana. La implementación me da el PDF y el CDF de mi distribución de probabilidad en cualquier momento.

Ahora me gustaría implementar un método de muestreo simple para este KDE. Por supuesto, una opción obvia sería dibujar desde el conjunto de puntos que componen el KDE, pero me gustaría poder recuperar puntos que son ligeramente diferentes de los del KDE.

Hasta ahora no he encontrado una técnica de muestreo que pueda implementar fácilmente para resolver este problema (sin depender de bibliotecas externas para la integración numérica o cálculos complejos). ¿Algún consejo? No tengo requisitos especialmente estrictos en cuanto a precisión o eficiencia, mi principal preocupación es tener una función de muestreo que funcione y se pueda implementar fácilmente. ¡Gracias!

Pierre Lison
fuente
44
Esto se detalla en la página 5 de este documento .
gracias, eso fue útil! Y más simple de lo que pensaba ;-)
Pierre Lison
@ user10525 el código proporcionado es incorrecto, debería ser: rnorm(n, sample(dx$x, n, prob = dx$y, replace = TRUE), dx$bw)donde dxse emite la densityfunción. probSe debe proporcionar un argumento porque, de lo contrario, se muestra de manera uniforme.
Tim

Respuestas:

17

Como mencionó el Procrastinator, hay una manera simple de tomar muestras de un estimador de densidad del Kernel:

  1. Dibujar un punto Xyo del conjunto de puntos X1, ...Xnorte incluido en el KDE
  2. Una vez que tengas el punto Xyo, dibuje un valor del núcleo asociado con el punto. En este caso, extrae del gaussianoN(xi,h) centrado en xi y de varianza h (el ancho de banda)
Pierre Lison
fuente
(+1) Para compartir su solución.
Es Xyouno de los puntos originales? Si es así, parece que realmente no necesitamos construir el KDE real en absoluto. Simplemente muestreando desde uno de los puntos originales, ynorte(Xyo,h)debería ser suficiente?
Ram
Sí, de hecho, si solo está utilizando la distribución de KDE para el muestreo, no necesita construir explícitamente el PDF: la única información necesaria para la operación de muestreo es el conjunto de puntos y el ancho de banda.
Pierre Lison el
solo para agregar a Pierre Lison: En el paso 2 .: Para el muestreo de un núcleo gaussiano, el ancho de banda h debe tomarse como la desviación estándar de la distribución gaussiana alrededor del punto x_i, no la varianza.
¿No le gustaría tomar muestras usando la desviación estándar 1 / ho algo así? Tal como está escrito, cuanto menos probable es x_i, más probable es que muestree otro punto improbable cercano porque la desviación estándar de N es baja.
Chris Anderson