Invertire la tecnica di Box-Mueller : da ogni coppia di normali , due uniformi indipendenti possono essere costruite come atan2 ( Y , X ) (sull'intervallo [ - π , π ] ) ed exp ( - ( X 2 + Y 2 ) / 2 ) (sull'intervallo [ 0 , 1 ] ).(X,Y)atan2(Y,X)[−π,π]exp(−(X2+Y2)/2)[0,1]
Prendi le normali in gruppi di due e somma i loro quadrati per ottenere una sequenza di variate Y 1 , Y 2 , … , Y i , … . Le espressioni ottenute dalle coppieχ22Y1,Y2,…,Yi,…
Xio= Y2 iY2 i - 1+ Y2 i
avrà una Beta ( 1 , 1 ) , che è uniforme.
Che ciò richieda solo l'aritmetica di base e semplice dovrebbe essere chiaro.
Poiché l' esatta distribuzione del coefficiente di correlazione di Pearson di un campione di quattro coppie da un bivariato standard La distribuzione normale è distribuita uniformemente su , possiamo semplicemente prendere le normali in gruppi di quattro coppie (ovvero otto valori in ogni set) e restituisce il coefficiente di correlazione di queste coppie. (Ciò comporta una semplice aritmetica più due operazioni con radice quadrata.)[ - 1 , 1 ]
È noto fin dall'antichità che una proiezione cilindrica della sfera (una superficie in tre spazi) è uguale area . Ciò implica che nella proiezione di una distribuzione uniforme sulla sfera, sia la coordinata orizzontale (corrispondente alla longitudine) sia la coordinata verticale (corrispondente alla latitudine) avranno distribuzioni uniformi. Poiché la distribuzione normale standard trivariata è sfericamente simmetrica, la sua proiezione sulla sfera è uniforme. Ottenere la longitudine è essenzialmente lo stesso calcolo dell'angolo nel metodo Box-Mueller ( qv ), ma la latitudine proiettata è nuova. La proiezione sulla sfera normalizza semplicemente un triplo di coordinate e a quel punto z è la latitudine proiettata. Quindi, prendi le variate normali in gruppi di tre, X 3 i - 2 , X 3 i - 1 , X 3 i , e calcola( x , y, z)zX3 i - 2, X3 i - 1, X3 i
X3 iX23 i - 2+ X23 i - 1+ X23 i----------------√
per .i=1,2,3,…
Poiché la maggior parte dei sistemi di elaborazione rappresenta numeri in binario , la generazione di numeri uniformi di solito inizia producendo numeri interi distribuiti uniformemente tra e 2 32 - 1 (o una potenza elevata di 20232−12 relativa alla lunghezza delle parole del computer) e riscalandoli secondo necessità. Tali numeri interi sono rappresentati internamente come stringhe di cifre binarie. Possiamo ottenere bit casuali indipendenti confrontando una variabile normale con la sua mediana. Pertanto, è sufficiente suddividere le variabili normali in gruppi di dimensioni uguali al numero desiderato di bit, confrontare ognuna con la sua media e assemblare le sequenze risultanti dei risultati vero / falso in un numero binario. Scrivere k32kper il numero di bit e per il segno (ovvero H ( x ) = 1 quando x > 0 e H ( x ) = 0 altrimenti) possiamo esprimere il valore uniforme normalizzato risultante in [ 0 , 1 ) con la formulaHH(x)=1x>0H(x)=0[ 0 , 1 )
Σj = 0k - 1H( Xk i - j) 2- j - 1.
I variati possono essere disegnati da qualsiasi distribuzione continua la cui mediana è 0 (come una normale normale); vengono elaborati in gruppi di k con ciascun gruppo che produce un valore pseudo uniforme.Xn0K
Il campionamento del rifiuto è un modo standard, flessibile e potente per disegnare variate casuali da distribuzioni arbitrarie. Supponiamo che la distribuzione di destinazione abbia PDF . Viene disegnato un valore Y secondo un'altra distribuzione con PDF g . Nella fase di rifiuto, un valore uniforme U compreso tra 0 e g ( Y ) viene disegnato indipendentemente da Y e confrontato con f ( Y ) : se è più piccolo, YfYgU0g( Y)Yf( Y)Yviene mantenuto ma in caso contrario il processo viene ripetuto. Questo approccio sembra circolare, tuttavia: come possiamo generare una variazione uniforme con un processo che ha bisogno di una variazione uniforme per cominciare?
La risposta è che in realtà non abbiamo bisogno di una variazione uniforme per eseguire la fase di rifiuto. Invece (supponendo ) possiamo lanciare una moneta giusta per ottenere uno 0 o 1 in modo casuale. Questo sarà interpretato come il primo bit nella rappresentazione binaria di una variabile uniforme U nell'intervallo [ 0 , 1 ) . Quando il risultato è 0 , che mezzi 0 ≤ U < 1 / 2 ; altrimenti, 1 / 2 ≤ U < 1 . g( Y) ≠ 001U[ 0 , 1 )00 ≤ U< 1 / 21 / 2 ≤ U< 1Metà del tempo, questo è sufficiente per decidere il passo rifiuto: se ma la moneta è 0 , Y deve essere accettato; se f ( Y ) / g ( Y ) < 1 / 2 ma la moneta è 1 , Y deve essere respinto; altrimenti, occorre capovolgere nuovamente la moneta per ottenere il bit successivo di U . Perché - non importa quale valore f ( Yf( Y) / g( Y) ≥ 1 / 20Yf( Y) / g( Y) < 1 / 21YU ha - v'è un 1 / 2 possibilità di fermare dopo ogni lancio, il numero atteso di lanci è solo 1 / 2 ( 1 ) + 1 / 4 ( 2 ) + 1 / 8 ( 3 ) + ⋯ + 2 - n ( n ) + ⋯ = 2 .f( Y) / g( Y)1 / 21/2(1)+1/4(2)+1/8(3)+⋯+2−n(n)+⋯=2
Il campionamento dei rifiuti può essere utile (ed efficiente) a condizione che il numero previsto di rifiuti sia ridotto. Possiamo ottenere ciò inserendo il rettangolo più grande possibile (che rappresenta una distribuzione uniforme) sotto un PDF normale.
Utilizzando Calculus per ottimizzare zona del rettangolo, si trova che i suoi punti finali dovrebbero essere al , in cui la sua altezza è pari a exp ( - 1 / 2 ) / √±1, rendendo la sua area leggermente superiore a0,48. Usando questa densità normale standard comegerifiutando automaticamente tutti i valori al di fuori dell'intervallo[-1,1]e applicando in altro modo la procedura di rifiuto, otterremo in modo efficiente varianze uniformi in[-1,1]:exp(−1/2)/2π−−√≈0.2419710.48g[−1,1][−1,1]
In una frazione del tempo, la variabile normale si trova oltre [ - 1 , 1 ] e viene immediatamente respinta. ( Φ è il CDF normale standard.)2Φ(−1)≈0.317[−1,1]Φ
Nella restante parte del tempo, deve essere seguita la procedura di rifiuto binario, che richiede in media altre due variate.
La procedura generale richiede una media di passi.1/(2exp(−1/2)/2π−−√)≈2.07
Il numero atteso di variate normali necessarie per produrre ogni risultato uniforme risolve
2eπ−−−√(1−2Φ(−1))≈2.82137.
Sebbene sia abbastanza efficiente, si noti che (1) il calcolo del PDF normale richiede il calcolo di un esponenziale e (2) il valore deve essere pre-calcolato una volta per tutte. È ancora un po 'meno di calcolo rispetto al metodo Box-Mueller ( qv ).Φ(−1)
Le statistiche degli ordini di una distribuzione uniforme presentano lacune esponenziali. Poiché la somma dei quadrati di due Normali (di media zero) è esponenziale, possiamo generare una realizzazione di uniformi indipendenti sommando i quadrati di coppie di tali Normali, calcolando la somma cumulativa di questi Normali, riscalando i risultati in modo che rientrino nell'intervallo [ 0 , 1 ] e rilasciare l'ultimo (che sarà sempre ugualen[0,1] ). Questo è un approccio gradevole perché richiede solo la quadratura, la somma e (alla fine) una singola divisione.1
I valori saranno automaticamente in ordine crescente. Se si desidera tale ordinamento, questo metodo è computazionalmente superiore a tutti gli altri in quanto evita il costo O ( n log ( n ) ) di un ordinamento. Se è necessaria una sequenza di uniformi indipendenti, allora l'ordinamento casuale di questi n valori farà il trucco. Poiché (come visto nel metodo Box-Mueller, qv ) i rapporti di ciascuna coppia di normali sono indipendenti dalla somma dei quadrati di ciascuna coppia, abbiamo già i mezzi per ottenere quella permutazione casuale: ordinare le somme cumulative in base ai rapporti corrispondenti . (Se nnO(nlog(n))nnè molto grande, questo processo potrebbe essere eseguito in gruppi più piccoli di con una perdita di efficienza ridotta, poiché ogni gruppo ha bisogno solo di 2 ( k + 1 ) normali per creare k valori uniformi. Per k fisso , il costo computazionale asintotico è quindi O ( n log ( k ) ) = O ( n ) , che necessita di 2 n ( 1 + 1 / k ) variate normali per generare nk2(k+1)KKO ( n log( k ) )O ( n )2 n ( 1 + 1 / k )n valori uniformi.)
Per una superba approssimazione, qualsiasi variabile normale con una grande deviazione standard appare uniforme su intervalli di valori molto più piccoli. Rotolando questa distribuzione nell'intervallo (prendendo solo le parti frazionarie dei valori), otteniamo così una distribuzione che è uniforme per tutti gli scopi pratici. Ciò è estremamente efficiente e richiede una delle operazioni aritmetiche più semplici di tutte: basta arrotondare ciascuna variabile Normale verso il numero intero più vicino e conservare l'eccesso. La semplicità di questo approccio diventa convincente quando esaminiamo un'implementazione pratica :[ 0 , 1 ]R
rnorm(n, sd=10) %% 1
produce in modo affidabile n
valori uniformi nell'intervallo al costo di variate normali e quasi nessun calcolo.[ 0 , 1 ]n
(Anche quando la deviazione standard è , il PDF di questa approssimazione varia da un PDF uniforme, come mostrato nella figura seguente, di meno di una parte in 10 8 ! Per rilevarlo in modo affidabile richiederebbe un campione di 10 16 valori-- questo è già al di là della capacità di qualsiasi test standard di casualità. Con una deviazione standard più grande la non uniformità è così piccola che non può nemmeno essere calcolata. Ad esempio, con una SD di 10 come mostrato nel codice, la deviazione massima da una uniforme PDF è solo 10 - 857. )110810161010- 857
In ogni caso, le variabili normali "con parametri noti" possono essere facilmente aggiornate e ridimensionate nelle normali standard assunte sopra. Successivamente, i valori distribuiti uniformemente risultanti possono essere aggiornati e riscalati per coprire qualsiasi intervallo desiderato. Questi richiedono solo operazioni aritmetiche di base.