Supponiamo innanzitutto che tu voglia campionare all'interno
x + y + z = 1
0 ≤ x ≤ 1
0 ≤ y ≤ 1
0 ≤ z ≤ 1
Ciò non fa alcuna differenza, dal momento che il punto di campionamento si troverà ancora nell'area richiesta con alta probabilità.
Ora ti resta il campionamento di un punto da un simplex . Nell'esempio 3d si ottiene un simplex 2d (triangolo) realizzato in 3d.
Come scegliere un punto uniformemente a caso è stato discusso in questo post del blog (vedere i commenti).
Per il tuo problema significherebbe che prendi n−1 numeri casuali dall'intervallo , quindi aggiungi 0 e 1 per ottenere un elenco di n + 1 numeri. Si ordina l'elenco e quindi si registrano le differenze tra due elementi consecutivi. Questo ti dà un elenco di n numeri che somma fino a 1 . Inoltre questo campionamento è uniforme. Questa idea può essere trovata in Donald B. Rubin, il bootstrap bayesiano Ann. Statist. 9, 1981, 130-134.(0,1)01n+1n1
Ad esempio ( ) hai i tre numeri casuali, quindi ottieni la sequenza ordinata e questo dà le differenze , e per costruzione questi quattro numeri si sommano a 1.n=40.4 0.2 0.1
0 0.1 0.2 0.4 1
0.1 0.1 0.2 0.6
Un altro approccio è il seguente: primo campione dall'ipercubo (ovvero che ti dimentichi x+y+z=1
) e poi normalizza il punto di campionamento. La normalizzazione è una proiezione dal -percubo al d - 1 -implex. Dovrebbe essere intuitivamente chiaro che i punti al centro del simplex hanno più "punti pre-immagine" che all'esternodd−1. Quindi, se campionate uniformemente dall'ipercubo, questo non vi darà un campionamento uniforme nel simplex. Tuttavia, se si campiona dall'ipercubo con una distribuzione esponenziale appropriata, questo effetto annulla. La figura ti dà un'idea di come verranno campionati entrambi i metodi. Tuttavia, preferisco il metodo di "ordinamento" per la sua forma semplice. È anche più facile da implementare.