Ich muss aus der folgenden Mischung von zwei Verteilungen probieren:
Dabei ist eine Normalisierungskonstante, die Gamma-Verteilung , die verallgemeinerte Pareto-Verteilung und ist die CDF der Cauchy-Verteilung : , die hier als Gewichts- / Mischfunktion fungiert und einen reibungslosen Übergang zwischen Gamma und Pareto ermöglicht (daher das Adjektiv "dynamisch", um die Mischung zu qualifizieren).
Die Gewichte ermöglichen eine einheitliche Mischung, bei der das Gamma den Großteil der Daten erfasst, und wenn wir uns den Extremen nähern, übernimmt das Pareto die Kontrolle. Der Ansatz stammt von Figressi et al. (2002) , und ich habe die in Vrac und Naveau (2007) vorgestellte Implementierung übernommen .
Ich habe die Parameter bzw. den Ort und die Skala des Cauchy-CDF, Form und Geschwindigkeit des Gammas und Form geschätzt und Skalierung der GPD nach dem Verfahren, das auf MLE basiert und in dem zweiten Artikel beschrieben ist, auf den verwiesen wird (R-Code finden Sie hier ), und jetzt möchte ich ein Beispiel aus . Da die Anteile jeder Komponente der Mischung nicht festgelegt sind, kann ich nicht einfach zufällig aus der einen oder anderen Verteilung (z. B. unter Verwendung der Funktionen oder R) eine Stichprobe ziehen, wie dies hier oder hier erfolgt . Wie soll ich vorgehen?rgamma()
rgpd()
Wenn ich den CDF der Mischung bestimmen könnte, könnte ich eine Inversionsprobe verwenden (). BEARBEITEN: Wie von Xi'an im zweiten Thread unten angegeben, gibt es keine geschlossene Lösung für die CDF.
EDIT: Implementierung einer der beiden Strategien in Xi'ans Antwort (Ablehnungsstichprobe) für meine Daten hier und Monte-Carlo-Ansatz zur Schätzung der Quantilfunktion der Mischung hier .
Antworten:
Wie von Dougal hervorgehoben , die Form Ihrer Zieldichte
Beachten Sie, dass das Originalpapier von Frigessi et al. enthält eine Möglichkeit zur Simulation aus der dynamischen Mischung auf Seite 6: mit Wahrscheinlichkeit1 / 2 simulieren von fβ0 und mit Wahrscheinlichkeit 1 / 2 von Gϵ , σ [was einer Simulation aus der geraden Mischung entspricht] und das Ergebnis mit Wahrscheinlichkeit akzeptieren1 -wm , τ( r ) im ersten Fall und wm , τ( r ) im zweiten Fall. Es ist unklar, welcher dieser Ansätze die höchste durchschnittliche Akzeptanzrate aufweist.
Hier ist ein kleines Experiment, das zeigt, dass die Akzeptanzraten vergleichbar sind:
mit
Eine Alternative ist die Verwendung eines Metropolis-Hastings-Algorithmus. Zum Beispiel bei jeder Iteration der Markov-Kette,
Der entsprechende R-Code ist unkompliziert
und gibt eine höhere Akzeptanzrate
Während die Anpassung mit der durch Akzeptieren-Zurückweisen erhaltenen Dichteschätzung identisch ist:
[Rote Kurve für die Accept-Reject-Probe und blaue Kurve für die MCMC-Probe, beide basierend auf 10⁴-Originalsimulationen]
quelle
Ich schlage vor, dass Sie die probabilistische Programmierung untersuchen. Grundsätzlich schreiben Sie Programme, die eher mit Wahrscheinlichkeitsverteilungen als mit (zufälligen) Variablen arbeiten. Dies macht es einfach, Funktionen zu definieren, die dynamische Verteilungsmischungen sind. Probabilistische Programmiersysteme mit vollem Funktionsumfang unterstützen zwar die statistische Inferenz nach Bayes, Ihre Anwendung benötigt sie jedoch nicht wirklich. In erster Linie benötigen Sie nur die Programmiersprache und die Markov Chain Monte Carlo (MCMC) -Löser, um Samples aus der von Ihrem Programm definierten Verteilung zu generieren.
Gute Einführungen und eine Liste der Ressourcen finden Sie im Folgenden:
Gute Tutorials zur probabilistischen Programmierung finden Sie auf der Website der Kirche, insbesondere das zweite "Einfache generative Modelle":
Untersuchen Sie abschließend STAN als Implementierungsplattform. Es gibt Versionen für R und Python. Auch hier benötigen Sie nur die generativen Modellfunktionen.
quelle