Semi-Computer Science Simulation bezogenes Problem hier.
Ich habe eine Verteilung wo
P (x) =
für einige Konstanten b und n ist x eine ganze Zahl, so dass .
Jetzt muss ich aus dieser Distribution probieren. Es hat eine invertierbare CDF, so dass dies theoretisch direkt möglich ist. Das Problem ist, dass die beteiligten Zahlen GROSS sind. In der Tat so groß, dass beide konventionell formatierte Variablen überlaufen und es mindestens Minuten dauert (irgendwann habe ich aufgegeben ...), um mit beliebigen Genauigkeitsformaten zu berechnen. Grundsätzlich beinhaltet die inverse CDF immer noch einen Term von für . Trotzdem werden die Ausgangsnummern immer noch im Bereich von , daher scheint es eine Möglichkeit zu geben, dies zu tun.
Was ich suche, ist eine Möglichkeit, ungefähr eine Stichprobe aus dieser Verteilung zu erstellen , die berechenbar ist. Gibt es alternative Probenahmemethoden? Was sind Sie?
quelle
Antworten:
Der CDF ist leicht invertierbar. Eine Formel für die Inversion führt zu einer der einfachsten und zweckmäßigsten möglichen Lösungen.
Beginnen Sie mit der Beobachtung, dass die Wahrscheinlichkeit des Ergebnisses , , proportional zu . Wenn wir also einen einheitlichen Wert zwischen und = müssen wir nur das größte für das0 ≤ k ≤ n e - b k q 0 q max = ∑ n k = 0 e - b kk 0 ≤ k ≤ n e- b k q 0 qmax= ∑nk = 0e- b k ( 1 - e- b ( n + 1 )) / ( 1 - e- b) k
Einfache Algebra gibt die Lösung
Hier ist eineb n
R
Implementierung, die wie alle anderen Zufallszahlengeneratoren aufgebaut ist: Das erste Argument gibt an, wie viele iid- Werte generiert werden sollen, und die restlichen Argumente benennen die Parameter ( as und as ):nb
n.max
Lassen Sie uns als Beispiel für seine Verwendung eine Million zufälliger Variablen gemäß dieser Verteilung generieren:
( Sekunden wurden benötigt.)0.10
( Zu jedem Wert wurde hinzugefügt, um ein besseres Histogramm zu erstellen: Die Prozedur weist eine Eigenart (= Fehler) auf, bei der der erste Balken zu hoch ist, wenn der linke Endpunkt auf Null gesetzt ist.) Die rote Kurve ist die Referenzverteilung dass diese Simulation versucht zu reproduzieren. Lassen Sie uns die Anpassungsgüte mit einem Chi-Quadrat-Test bewerten :1
R
hist
Der p-Wert beträgt : eine schöne Passform.0.84
quelle
Sie haben es mit einer abgeschnittenen geometrischen Verteilung mit tun . Es gibt verschiedene Möglichkeiten, dies zu erreichen.p = 1 - e- b
Ich würde verschiedene Optionen in verschiedenen Situationen empfehlen. Einige Optionen umfassen das Simulieren aus einem geometrischen und das Regenerieren außerhalb des Bereichs, das Verwenden des ganzzahligen Teils eines geeigneten abgeschnittenen Exponentials ( wie hier ) oder das Verwenden einer von mehreren schnellen Techniken, die auf diskrete Verteilungen über einen endlichen Bereich zugeschnitten sind. Angesichts der Tatsache, dass groß ist, ist es wahrscheinlich relativ schnell, das Wort eines abgeschnittenen Exponentials zu ergreifen, aber ob es die beste Wahl ist, hängt auch von .bn b
Hier ist eine verwandte Frage zu math.SE
Was ist ein typischer Wertebereich für bevor ich bestimmte Vorschläge versuche ?b
quelle
floor()
Das cdf eines abgeschnittenen Exponentials ist
quelle
rweirdp
auf Änderung geändertn
zun+1
. (Wie hier angegeben, wird niemals ein Wert zurückgegeben, der gleich istn
: das ist der Effekt der Approximation.) Eine etwas strengere Analyse ist in meiner Antwort angegeben. Obwohl ich eine anders aussehende Formel erhalte, entspricht sie der hier angegebenen (einfacheren!) Formel, sobald dien
->n+1
Änderung vorgenommen wurde.quelle