Nehmen wir zunächst an, dass Sie innerhalb probieren möchten
x + y + z = 1
0 ≤ x ≤ 1
0 ≤ y ≤ 1
0 ≤ z ≤ 1
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 )01n + 1n1
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 = 40.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 haben 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ßenseitedd- 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.