Ich suche nach einem Algorithmus zum Erzeugen eines Arrays von N Zufallszahlen, so dass die Summe der N Zahlen 1 ist und alle Zahlen innerhalb von 0 und 1 liegen. Zum Beispiel ist N = 3, der Zufallspunkt (x, y, z) sollte im Dreieck liegen:
x + y + z = 1
0 < x < 1
0 < y < 1
0 < z < 1
Idealerweise möchte ich, dass jeder Punkt innerhalb des Gebiets die gleiche Wahrscheinlichkeit hat. Wenn es zu schwer ist, kann ich die Anforderung fallen lassen. Vielen Dank.
Antworten:
Nehmen wir zunächst an, dass Sie innerhalb probieren möchten
Dies macht keinen großen Unterschied, da der Abtastpunkt mit hoher Wahrscheinlichkeit immer noch in Ihrem gewünschten Bereich liegt.
Jetzt müssen Sie einen Punkt von einem Simplex abtasten . Im 3D-Beispiel erhalten Sie ein 2D-Simplex (Dreieck), das in 3D realisiert wurde.
Wie man einen Punkt gleichmäßig zufällig auswählt, wurde in diesem Blog-Beitrag besprochen (siehe die Kommentare).
Für Ihr Problem würde dies bedeuten, dass Sie Zufallszahlen aus dem Intervall ( 0 , 1 ) nehmen und dann 0 und 1 addieren , um eine Liste mit n + 1 Zahlen zu erhalten. Sie sortieren die Liste und zeichnen dann die Unterschiede zwischen zwei aufeinander folgenden Elementen auf. Dies gibt Ihnen eine Liste mit n Zahlen, die sich zu 1 summieren . Darüber hinaus ist diese Abtastung einheitlich. Diese Idee findet sich in Donald B. Rubin, The Bayesian Bootstrap Ann. Statist. 9, 1981, 130-134.n - 1 ( 0 , 1 ) 0 1 n + 1 n 1
Zum Beispiel ( ) haben Sie die drei Zufallszahlen, dann erhalten Sie die sortierte Folge und dies ergibt die Differenzen , und durch Konstruktion summieren sich diese vier Zahlen zu 1.n = 4
0.4 0.2 0.1
0 0.1 0.2 0.4 1
0.1 0.1 0.2 0.6
Ein anderer Ansatz ist der folgende: Zuerst wird aus dem Hypercube ein Sample erstellt (das ist alles, was Sie vergessen habend d- 1 . Wenn Sie also gleichmäßig aus dem Hypercube abtasten, erhalten Sie auf diese Weise keine gleichmäßige Abtastung im Simplex. Wenn Sie jedoch eine Stichprobe aus dem Hypercube mit einer geeigneten Exponentialverteilung erstellen, wird dieser Effekt aufgehoben. Die Abbildung gibt Ihnen eine Vorstellung davon, wie beide Methoden abtasten. Ich bevorzuge jedoch die "Sortier" -Methode aufgrund ihrer einfachen Form. Es ist auch einfacher zu implementieren.
x+y+z=1
) und dann wird der Sample-Punkt normalisiert. Die Normalisierung ist eine Projektion aus der -hypercube auf die d - 1 Simplex. Es sollte intuitiv klar sein, dass die Punkte in der Mitte des Simplex mehr "Vorbildpunkte" haben als an der Außenseitequelle
Dies dient dazu, die vorhandenen Antworten zu ergänzen.
Devroye ist eine hervorragende Referenz für Fragen dieser Art. In Kapitel 7 sind die Algorithmen aufgeführt, die für die Erstellung einer einheitlichen Auftragsstatistik erforderlich sind, nach der das OP sucht.
quelle
Hier
uniform(0,1)
gibt eine reelle Zahl unabhängig und gleichmäßig verteilt zwischen 0 und 1.quelle
Siehe dieses Papier : Smith, N. und Tromble, R., Probenahme gleichmäßig von der Einheit Simplex .
quelle