Ich habe einen Datensatz mit vielen Nullen, der so aussieht:
set.seed(1)
x <- c(rlnorm(100),rep(0,50))
hist(x,probability=TRUE,breaks = 25)
Ich möchte eine Linie für ihre Dichte zeichnen, aber die density()
Funktion verwendet ein sich bewegendes Fenster, das negative Werte von x berechnet.
lines(density(x), col = 'grey')
Es gibt density(... from, to)
Argumente, aber diese scheinen nur die Berechnung abzuschneiden, nicht das Fenster so zu ändern, dass die Dichte bei 0 mit den Daten übereinstimmt, wie aus dem folgenden Diagramm ersichtlich ist:
lines(density(x, from = 0), col = 'black')
(Wenn die Interpolation geändert würde, würde ich erwarten, dass die schwarze Linie bei 0 eine höhere Dichte als die graue Linie hat.)
Gibt es Alternativen zu dieser Funktion, die eine bessere Berechnung der Dichte bei Null ermöglichen würden?
quelle
Ich würde Rob Hyndman zustimmen, dass Sie die Nullen separat behandeln müssen. Es gibt einige Methoden, um mit einer Kernel-Dichteschätzung einer Variablen mit begrenzter Unterstützung umzugehen, einschließlich "Reflexion", "Rernormalisierung" und "Linearkombination". Diese scheinen nicht in Rs
density
Funktion implementiert worden zu sein , sind aber in Benn Jannskdens
Paket für Stata verfügbar .quelle
Eine weitere Option, wenn Sie Daten mit einer logischen Untergrenze haben (z. B. 0, aber auch andere Werte), von denen Sie wissen, dass die Daten nicht unterschritten werden und die reguläre Schätzung der Kerneldichte Werte unterhalb dieser Grenze platziert (oder wenn Sie eine Obergrenze haben) oder beides) ist die Verwendung von Logspline-Schätzungen. Das logspline-Paket für R implementiert diese und die Funktionen haben Argumente zum Festlegen der Grenzen, sodass die Schätzung an die Grenze geht, jedoch nicht darüber hinaus und immer noch auf 1 skaliert.
Es gibt auch Methoden (die
oldlogspline
Funktion), die die Intervallzensur berücksichtigen. Wenn diese Nullen also keine exakten Nullen sind, sondern gerundet sind, damit Sie wissen, dass sie Werte zwischen 0 und einer anderen Zahl darstellen (z. B. eine Erkennungsgrenze), dann Sie kann diese Informationen an die Anpassungsfunktion weitergeben.Wenn die zusätzlichen Nullen echte Nullen sind (nicht gerundet), ist die Schätzung der Spitze oder Punktmasse der bessere Ansatz, kann aber auch mit der Logspline-Schätzung kombiniert werden.
quelle
Sie können versuchen, die Bandbreite zu verringern (blaue Linie ist für
adjust=0.5
),aber wahrscheinlich ist KDE einfach nicht die beste Methode, um mit solchen Daten umzugehen.
quelle