Schätzung der Kernel-Dichte des np-Pakets mit dem Epanechnikov-Kernel

8

Ich arbeite mit dem "Geysir" -Datensatz aus dem MASS-Paket und vergleiche Kernel-Dichteschätzungen des np-Pakets.

Mein Problem ist es, die Dichteschätzung unter Verwendung der Kreuzvalidierung der kleinsten Quadrate und des Epanechnikov-Kernels zu verstehen:

blep<-npudensbw(~geyser$waiting,bwmethod="cv.ls",ckertype="epanechnikov")
plot(npudens(bws=blep))

Geben Sie hier die Bildbeschreibung ein

Für den Gaußschen Kernel scheint es in Ordnung zu sein:

blga<-npudensbw(~geyser$waiting,bwmethod="cv.ls",ckertype="gaussian")
plot(npudens(bws=blga))

Geben Sie hier die Bildbeschreibung ein

Oder wenn ich den Epanechnikov-Kernel und Maximum Likelihood cv verwende:

bmax<-npudensbw(~geyser$waiting,bwmethod="cv.ml",ckertype="epanechnikov")
plot(npudens(~geyser$waiting,bws=bmax))

Ist es meine Schuld oder ist es ein Problem im Paket?

Bearbeiten: Wenn ich Mathematica für den Epanechnikov-Kernel und den Lebenslauf der kleinsten Quadrate verwende, funktioniert es:

d = SmoothKernelDistribution[data, bw = "LeastSquaresCrossValidation", ker = "Epanechnikov"]
Plot[{PDF[d, x], {x, 20,110}]
TMoek
quelle

Antworten:

6

BEARBEITEN

Dies wird in den FAQ erklärt :

Ich verwende plot () (npplot ()), um beispielsweise eine Dichte zu zeichnen, und das resultierende Diagramm sieht eher wie eine invertierte Dichte als wie eine Dichte aus

Dies kann auftreten, wenn die datengesteuerte Bandbreite dramatisch unterglättet ist. Datengesteuerte (dh automatische) Bandbreitenauswahlverfahren führen nicht immer zu guten Ergebnissen, möglicherweise unter anderem aufgrund von Ausreißern oder der Rundung / Diskretisierung kontinuierlicher Daten. Standardmäßig verwendet npplot () die beiden Extreme der Daten (Minimum, Maximum, dh tatsächliche Datenpunkte), erstellt dann ein gleichmäßig verteiltes Raster von Bewertungsdaten (dh keine tatsächlichen Datenpunkte im Allgemeinen) und berechnet die Dichte für diese Punkte. Da die Bandbreite extrem klein ist, ist die Dichteschätzung an diesen Bewertungspunkten korrekt Null, während diejenigen für die Stichprobenrealisierungen (in diesem Fall nur zwei, min und max) ungleich Null sind, daher erhalten wir zwei Peaks an den Rändern von das Grundstück und eine flache Schüssel gleich Null überall sonst. Dies kann auch passieren, wenn Ihre Daten stark diskretisiert sind und Sie sie als kontinuierlich behandeln. In solchen Fällen kann die Behandlung der Daten wie bestellt zu vernünftigeren Schätzungen führen

Wie vorgeschlagen, die Daten wie bestellt zu behandeln, funktioniert:

blep<-npudensbw(~ordered(geyser$waiting), 
                bwmethod="cv.ls", ckertype="epanechnikov", ckerorder=2)

Geben Sie hier die Bildbeschreibung ein

Es gelingt auch mit höheren Kernel-Ordnungen, wie ckerorder=4in diesem Beispiel:

Geben Sie hier die Bildbeschreibung ein

rechtsgesägt
quelle
Danke, aber warum funktioniert es mit dem Gaußschen Kernel oder in Mathematica?
TMoek