méthode d'échantillonnage simple pour un estimateur de densité de noyau

10

J'ai développé un estimateur de densité de noyau simple en Java, basé sur quelques dizaines de points (peut-être jusqu'à une centaine) et une fonction de noyau gaussien. L'implémentation me donne à tout moment le PDF et le CDF de ma distribution de probabilité.

Je voudrais maintenant implémenter une méthode d'échantillonnage simple pour ce KDE. Un choix évident serait bien sûr de puiser dans l'ensemble même des points constituant le KDE, mais j'aimerais pouvoir récupérer des points légèrement différents de ceux du KDE.

Je n'ai pas trouvé jusqu'à présent de technique d'échantillonnage que je pourrais facilement implémenter pour résoudre ce problème (sans dépendre de bibliothèques externes pour l'intégration numérique ou de calculs complexes). Des conseils? Je n'ai pas d'exigences particulièrement fortes en matière de précision ou d'efficacité, ma principale préoccupation est d'avoir une fonction d'échantillonnage qui fonctionne et puisse être facilement mise en œuvre. Merci!

Pierre Lison
la source
4
Ceci est détaillé à la page 5 de ce document .
merci, c'était utile! Et plus simple que je ne le pensais ;-)
Pierre Lison
@ user10525 le code fourni est incorrect, il devrait être: rnorm(n, sample(dx$x, n, prob = dx$y, replace = TRUE), dx$bw)dxest sorti la densityfonction. L'argument probdoit être fourni car sinon vous échantillonnez uniformément.
Tim

Réponses:

17

Comme mentionné par Procrastinator, il existe un moyen simple d'échantillonner à partir d'un estimateur de densité du noyau:

  1. Dessinez un point xi de l'ensemble des points x1, ...xn inclus dans le KDE
  2. Une fois que vous avez le point xi, tirez une valeur du noyau associé au point. Dans ce cas, tirez de la gaussienneN(xi,h) centré à xi et de variance h (la bande passante)
Pierre Lison
la source
(+1) Pour partager votre solution.
Est xil'un des points d'origine? Si c'est le cas, il semble que nous n'ayons pas vraiment besoin de construire le KDE réel. Juste échantillonnage à partir d'un des points d'origine, etN(xi,h)devrait suffire?
Ram
Oui en effet, si vous n'utilisez que la distribution KDE pour l'échantillonnage, vous n'avez pas besoin de construire explicitement le PDF: les seules informations nécessaires à l'opération d'échantillonnage sont l'ensemble des points et la bande passante.
Pierre Lison
pour ajouter à Pierre Lison: à l'étape 2: pour l'échantillonnage à partir d'un noyau gaussien, la largeur de bande h doit être considérée comme l'écart type de la distribution gaussienne autour du point x_i, pas la variance.
Souhaitez-vous pas échantillonner en utilisant l'écart-type 1 / h ou quelque chose? Comme écrit, moins x_i est probable, plus vous avez de chances d'échantillonner un autre point improbable à proximité car l'écart-type de N est faible.
Chris Anderson