Ich versuche, die Gaussian Kerndichte zu berechnen, und meines Wissens der density()
Funktion zu testen, entschied ich, es von Grund auf neu zu berechnen und die beiden Ergebnisse zu vergleichen.Diskrepanzen in der Dichte() Kernel-Schätzer im Vergleich zu Berechnungen von Grund auf
Sie bieten jedoch nicht die gleiche Antwort.
Ich beginne mit einem vorhandenen Dataset
xi <- mtcars$mpg
und die Kernel-Dichte dieser Daten zeichnen können, wie
plot(density(xi, kernel = "gaussian"))
folgt, die dies bietet ...
Ich greife dann einige der d Details aus dieser Berechnung, damit meine Berechnung konsistent ist.
auto.dens <- density(xi, kernel = "gaussian")
h <- auto.dens$bw # bandwidth for kernel
x0 <- auto.dens$x # points for prediction
ich die Gaußsche Kernel Dichte selbst dann berechnen, und ich habe dies in einer Schleife durchgeführt, nur damit sie besser zu lesen ist.
fx0 <- NULL
for (j in 1:length(x0)){
t <- abs(x0[j]-xi)/h
K <- (1/sqrt(2*pi))*exp(-(t^2)/2)
fx0 <- c(fx0,sum(K*t)/(length(t)*h))
}
Die grundlegende Berechnung wurde in den Atmosphärische Wissenschaften, 3. Auflage, von Daniel Wilks nach den Angaben in Abschnitt 3.3.6 in Statistische Methoden konstruiert. mit dem Gauß-Kern gesetzt, wie und t
jedoch zu sein, und hier ist mein Problem.
ich dann die beiden Grundstücke zusammen ...
plot(y=fx0,x=x0, type="l", ylim=c(0,0.07))
lines(x=auto.dens$x, y=auto.dens$y, col="red")
Die Ausgabe aus der Dichtefunktion (rot), und meine Berechnungen (schwarz), erhalte ich
! Diese beiden Berechnungen sind deutlich anders!
Habe ich vermisst verstanden, wie die Dichtefunktion funktioniert? Warum kann ich nicht die gleichen Ergebnisse von Grund auf berechnen? Warum liefert mein Kernel Estimator unterschiedliche Ergebnisse? Warum sind meine Ergebnisse weniger glatt?
Ich muss einen Kernel-glatter (nicht nur der Dichte) zu einem viel komplizierteren Datensatz erstellen und anwenden, und nur dieses kleine Beispiel, um sicherzustellen, dass ich das gleiche wie die automatisierten Funktionen tat, und wirklich nicht Ich erwarte dieses Problem. Ich habe alle möglichen Dinge ausprobiert und kann einfach nicht verstehen, warum ich ein anderes Ergebnis bekomme.
Vielen Dank im Voraus für das Lesen und alle Kommentare, kleine oder große.
Edit: 13:40 29/11/2016 Lösung so detailliert in Antwort unten
Vielen Dank! Das behebt das Problem, und es ist klar, dass ich nur die Mathematik aus dem Lehrbuch verstehe, die nicht in den Code eingeht. Ich bin so erleichtert, dass es so ein einfaches Problem ist! – Kate2808