Wie man die Wahrscheinlichkeitsdichtefunktion aus der Dichtefunktion in R findet / schätzt

17

Angenommen, ich habe eine Variable Xmit unbekannter Verteilung. In Mathematica SmoothKernelDensitykönnen wir mithilfe der Funktion eine geschätzte Dichtefunktion haben. Diese geschätzte Dichtefunktion kann zusammen mit der PDFFunktion verwendet werden, um die Wahrscheinlichkeitsdichtefunktion eines Werts zu berechnen, etwa Xin der Form der PDF[density,X]Annahme, dass "Dichte" das Ergebnis von ist SmoothKernelDensity. Es wäre gut, wenn es eine solche Funktion in R gäbe. So funktioniert das in Mathematica

http://reference.wolfram.com/mathematica/ref/SmoothKernelDistribution.html

Als Beispiel (basierend auf Mathematica-Funktionen):

data = RandomVariate[NormalDistribution[], 100]; #generates 100 values from N(0,1)

density= SmoothKernelDistribution[data]; #estimated density

PDF[density, 2.345] returns 0.0588784 

Hier finden Sie weitere Informationen zu PDF:

http://reference.wolfram.com/mathematica/ref/PDF.html

Ich weiß, dass ich seine Dichtefunktion density(X)in R darstellen und ecdf(X)seine empirische kumulative Verteilungsfunktion erhalten kann. Ist es möglich, dasselbe in R auf der Grundlage dessen zu tun, was ich über Mathematica beschrieben habe?

Jede Hilfe und Idee wird geschätzt.

Amin
quelle
density(x)Wie Sie bereits bemerkt haben, gibt es eine Schätzung des PDFs, aber seine Eignung hängt von dem Zweck ab, für den Sie die Dichte haben möchten. Beachten Sie beispielsweise, dass die Varianz verzerrt ist (bei der Durchführung der Faltung addieren Sie die Varianz des Kernels zur Varianz der Daten, die selbst eine unverzerrte Schätzung darstellt). Solche Kompromisse zwischen Verzerrung und Varianz sind allgegenwärtig. Es gibt andere Alternativen, wie zum Beispiel die Schätzung der logarithmischen Spline-Dichte - aber auch hier hängt die Eignung teilweise davon ab, was Sie damit tun möchten.
Glen_b
@ Glen_b Ich möchte die geschätzte Dichte zum Ermitteln der Wahrscheinlichkeit anderer Werte in der Verteilung verwenden. Ich habe zum Beispiel einen Datenvektor im Bereich von 0 bis 10. Dieser Datensatz enthält nur 70 eindeutige Werte zwischen 0 und 10. Ich kann die Dichte zeichnen. Nehmen wir nun an, dass ich daran interessiert bin, in einer Zufallsstichprobe die Wahrscheinlichkeit für X = 7,5 zu finden, die nicht in den beobachteten Daten enthalten ist. Wie kann ich sie erhalten? Ich weiß, ecdf(X)das entspricht einem Perzentil von 7,5, aber es ist nicht das, wonach ich suche.
Amin
" Finden der Wahrscheinlichkeit, dass X = 7,5 ist " - da ist Ihr Problem! Entweder haben Sie eine kontinuierliche Verteilung (in diesem Fall lautet die tatsächliche Antwort "0"), oder Sie haben keine (in diesem Fall sollten Sie keine Dichteschätzung verwenden, da Sie keine Dichte haben).
Glen_b
1
Beachten Sie die Definition des ecdf (oder des cdf allgemeiner). ecdf(b)-ecdf(a)würde schätzen ( a < X b ) . Natürlich ist bei stetigen Variablen die Unterscheidung zwischen < und unwichtig. Wenn X diskret ist, können Sie P ( X = 7,5 ) schätzen, indem Sie den Stichprobenanteil der Werte mit 0,75 berechnen. P(ein<Xb)<X P(X=7.5)
Glen_b
1
Entschuldigung, das war ein Fehler. Ich meine den Stichprobenanteil von Werten, die 7,5 sind; Mein Sohn lenkte mich ab, als ich die letzten paar Wörter tippte. Ihre Stichprobenschätzung der Wahrscheinlichkeit eines nicht beobachteten Ereignisses ist Null. Wollten Sie sich vorher bewerben? Wollten Sie ein Konfidenzintervall für den Anteil anstelle einer Punktschätzung? Ihr aktuelles Problem ist noch kein R-Problem. Es geht darum, richtig zu erklären, was Sie tatsächlich wollen. Sie sollten Ihre Frage wahrscheinlich bearbeiten oder eine neue posten.
Glen_b

Antworten:

34

?densityweist darauf hin, dass damit approxbereits eine lineare Interpolation durchgeführt wird; ?approxweist darauf hin, dass approxfuneine geeignete Funktion generiert:

x <- log(rgamma(150,5))
df <- approxfun(density(x))
plot(density(x))
xnew <- c(0.45,1.84,2.3)
points(xnew,df(xnew),col=2)

Bildbeschreibung hier eingeben

Wenn integrateman von einem geeigneten Abstand unterhalb des Minimums in der Stichprobe ausgeht (ein Vielfaches - beispielsweise 4 oder 5 - der Bandbreite, die im dfAllgemeinen für einen geeigneten Abstand verwendet wird), kann man eine gute Annäherung an das entsprechende cdf erhalten df.

Glen_b - Setzen Sie Monica wieder ein
quelle
das ist interessant. Es scheint , dass df(2.3)der Wert der geschätzten Dichtefunktion gibt an , x=2.3aber was PDFtut in Mathematica gibt den Bereich unter der Kurve oben x=2.3. Da bin ich mir nicht ganz sicher. Das ist nur meine Vermutung. Kannst du nachbilden, was ich in Mathematica getan habe?
Amin
Meine obige Funktion liefert nachweislich eine kernbasierte Schätzung einer "Wahrscheinlichkeitsdichtefunktion" ... "ausgewertet bei x". Entweder willst du das oder nicht. Wenn Sie dies nicht tun, müssen Sie erklären , was Sie tun wollen - statistisch gesehen, nicht nur als ‚dieses Verhalten reproduzieren.‘
Glen_b
Ich glaube, ich habe fälschlicherweise und unbeabsichtigt dafür geworben, dass Dichte eine Wahrscheinlichkeit ist, die es nicht ist. Ich wollte nicht irreführen. Wenn Sie glauben, dass PDFMathematica das tut, was Sie in Ihrer Antwort beschrieben haben (dh den Wert der Dichtefunktion für einen gegebenen X-Wert ermitteln), dann glaube ich, dass ich meine Antwort erhalten habe. Nur gibt es viele Verwirrungen bei der Verwendung von Worten!
Amin
2
Nach dem, was die PDFSeite sagt, gibt sie das Gleiche zurück, was ich tue, aber die Methoden, die sie in diesem Fall für die Berechnung verwendet, sind wahrscheinlich etwas genauer (für einen solchen Zweck hat zusätzliche Genauigkeit jedoch nur einen geringen Wert). Eine Diskussion der Unterscheidung zwischen Wahrscheinlichkeit und Dichte finden Sie hier und hier .
Glen_b