einfache Stichprobenmethode für einen Kernel Density Estimator

10

Ich habe einen einfachen Kernel Density Estimator in Java entwickelt, der auf ein paar Dutzend Punkten (vielleicht bis zu einhundert oder so) und einer Gaußschen Kernelfunktion basiert. Die Implementierung gibt mir zu jedem Zeitpunkt das PDF und CDF meiner Wahrscheinlichkeitsverteilung.

Ich möchte jetzt eine einfache Stichprobenmethode für diese KDE implementieren . Eine naheliegende Wahl wäre natürlich, aus den Punkten des KDE zu ziehen, aber ich möchte in der Lage sein, Punkte abzurufen, die sich geringfügig von denen im KDE unterscheiden.

Ich habe bisher keine Stichprobentechnik gefunden, die ich leicht implementieren könnte, um dieses Problem zu lösen (ohne auf externe Bibliotheken für die numerische Integration oder komplexe Berechnungen angewiesen zu sein). Irgendwelche Ratschläge? Ich habe keine besonders hohen Anforderungen an Präzision oder Effizienz. Mein Hauptanliegen ist es, eine Stichprobenfunktion zu haben, die funktioniert und einfach implementiert werden kann. Vielen Dank!

Pierre Lison
quelle
4
Dies wird auf Seite 5 dieses Dokuments beschrieben .
danke, das war nützlich! Und einfacher als ich dachte ;-)
Pierre Lison
@ user10525 Der angegebene Code ist falsch. Er sollte lauten: rnorm(n, sample(dx$x, n, prob = dx$y, replace = TRUE), dx$bw)Wo dxwird die densityFunktion ausgegeben ? Das Argument probmuss angegeben werden, da Sie sonst eine einheitliche Stichprobe erstellen.
Tim

Antworten:

17

Wie von Procrastinator erwähnt, gibt es eine einfache Möglichkeit, eine Stichprobe mit einem Kernel-Dichteschätzer zu erstellen:

  1. Zeichnen Sie einen Punkt aus der Menge der Punkte x 1 , ... x nxichx1xn im KDE enthaltenen
  2. Wenn Sie den Punkt , zeichnen Sie einen Wert aus dem Kernel, der dem Punkt zugeordnet ist. Zeichnen Sie in diesem Fall aus dem bei x i zentrierten Gaußschen N ( x i , h ) und der Varianz h (der Bandbreite).xichN.(xich,h)xichh
Pierre Lison
quelle
(+1) Zum Teilen Ihrer Lösung.
Ist einer der ursprünglichen Punkte? Wenn ja, müssen wir anscheinend die eigentliche KDE überhaupt nicht erstellen. Nur eine Stichprobe von einem der ursprünglichen Punkte und N ( x i , h ) sollte ausreichen? xichN.(xich,h)
Ram
Ja, wenn Sie nur die KDE-Verteilung für die Abtastung verwenden, müssen Sie das PDF nicht explizit erstellen: Die einzigen Informationen, die für die Abtastoperation erforderlich sind, sind die Menge der Punkte und die Bandbreite.
Pierre Lison
Nur um Pierre Lison hinzuzufügen: In Schritt 2: Für die Abtastung aus einem Gaußschen Kernel sollte die Bandbreite h als Standardabweichung der Gaußschen Verteilung um den Punkt x_i und nicht als Varianz verwendet werden.
Möchten Sie nicht mit der Standardabweichung 1 / h oder so etwas probieren? Je weniger wahrscheinlich x_i ist, desto wahrscheinlicher ist es, dass Sie einen anderen unwahrscheinlichen Punkt in der Nähe abtasten, da die Standardabweichung von N gering ist.
Chris Anderson