Wie soll ich effizient aus der folgenden Verteilung probieren?
Wenn nicht zu groß ist, ist die Ablehnungsabtastung vielleicht der beste Ansatz, aber ich bin mir nicht sicher, wie ich vorgehen soll, wenn k groß ist. Vielleicht gibt es eine asymptotische Annäherung, die angewendet werden kann?
random-generation
beta-distribution
truncation
user1502040
quelle
quelle
Antworten:
Der einfachste und allgemeinste Weg, der für jede abgeschnittene Verteilung gilt (er kann auch auf beiden Seiten abgeschnitten werden), ist die Verwendung der inversen Transformationsabtastung . Wenn die kumulative Zinsverteilung ist, dann setze p 0 = F ( k ) und nimmF p0=F(k)
wobei eine Stichprobe von F ist, die bei k links abgeschnitten ist . Die Quantilfunktion F - 1 ordnet Wahrscheinlichkeiten Stichproben von F zu . Da wir U- Werte nur aus dem "Bereich" nehmen, der mit den Werten der Beta-Verteilung aus dem nicht abgeschnittenen Bereich übereinstimmt, werden nur diese Werte abgetastet.X F k F−1 F U
Diese Methode ist in der Abbildung unten dargestellt, in der der abgeschnittene Bereich durch ein graues Rechteck markiert ist. Rote Punkte werden aus der -Verteilung gezogen und dann in B ( 2 , 8 ) -Proben transformiert .U(p0,1) B(2,8)
quelle
scipy.special.betainc
für die Umkehrung und in R gibt espbeta
.qbeta
für die Quantilfunktion in R.)Das Schöne an diesem Ansatz ist, dass all die harte Arbeit im Setup steckt. Sobald die Hüllkurvenfunktion definiert ist und die Normalisierungskonstante für die abgeschnittene Beta-Dichte berechnet wurde, müssen nur noch einheitliche Zufallsvariablen generiert und einige einfache arithmetische Operationen, Protokolle, Potenzen und Vergleiche durchgeführt werden. Durch Verschärfen der Hüllkurvenfunktion - mit horizontalen Linien oder exponentiellen Kurven - kann natürlich die Anzahl der Ablehnungen verringert werden.
quelle