Simulazione di disegni da una distribuzione uniforme usando disegni da una distribuzione normale


15

Di recente ho acquistato una risorsa di intervista per la scienza dei dati in cui una delle domande di probabilità era la seguente:

Dati i disegni di una distribuzione normale con parametri noti, come è possibile simulare i disegni da una distribuzione uniforme?

Il mio processo di pensiero originale era che, per una variabile casuale discreta, potevamo spezzare la distribuzione normale in K sottosezioni uniche in cui ogni sottosezione ha un'area uguale sotto la curva normale. Quindi potremmo determinare quale dei valori K assume la variabile riconoscendo in quale area della curva normale la variabile finisce per cadere.

Ma questo funzionerebbe solo con variabili casuali discrete. Ho fatto alcune ricerche su come potremmo fare lo stesso per variabili casuali continue, ma sfortunatamente sono riuscito a trovare solo tecniche come il campionamento di trasformazioni inverse che potrebbero utilizzare come input una variabile casuale uniforme e che potrebbero generare variabili casuali da qualche altra distribuzione. Pensavo che forse avremmo potuto fare questo processo al contrario per ottenere variabili casuali uniformi?

Ho anche pensato di utilizzare le variabili casuali normali come input in un generatore congruenziale lineare, ma non sono sicuro che funzionerebbe.

Qualche idea su come potrei affrontare questa domanda?

Risposte:


30

Nello spirito di usare semplici calcoli algebrici che non sono correlati al calcolo della distribuzione normale , mi spingerei verso il seguente. Sono ordinati come ho pensato a loro (e quindi avevano bisogno di essere sempre più creativi), ma ho salvato il meglio - e il più sorprendente - per durare.

  1. 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]

  2. 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,

    Xi=Y2iY2i1+Y2i

    avrà una Beta(1,1) , che è uniforme.

    Che ciò richieda solo l'aritmetica di base e semplice dovrebbe essere chiaro.

  3. 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]

  4. È 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)zX3i2,X3i1,X3i

    X3iX3i22+X3i12+X3i2

    per .i=1,2,3,

  5. 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 2023212 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=0k1H(Xkij)2j1.

    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

  6. 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)00U<1/21/2U<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)++2n(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.

    PDF normali e uniformi

    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π(12Φ(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)

  7. 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(nlog(K))O(n)2n(1+1/K)n valori uniformi.)

  8. 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 nvalori 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

    PDF approssimativo


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.

La facilità di queste costruzioni è evidenziata dal seguente Rcodice, che utilizza solo una o due righe per la maggior parte di esse. La loro correttezza è testimoniata dalla conseguente pressoché uniforme istogrammi basa su valori indipendenti in ogni caso (che richiede circa 12 secondi per tutti i sette simulazioni). Per riferimento - nel caso in cui si sia preoccupati della quantità di variazione che appare in uno di questi grafici - alla fine è incluso un istogramma di valori uniformi simulato con il generatore di numeri casuali uniforme.100,000R

Gli istogrammi

Tutte queste simulazioni sono state testate per l'uniformità usando un test basato su 1000 bin; nessuno poteva essere considerato significativamente non uniforme (il valore p più basso era del 3 % - per i risultati generati dal generatore di numeri uniformi effettivo!).χ210003%R

set.seed(17)
n <- 1e5
y <- matrix(rnorm(floor(n/2)*2), nrow=2)
x <- c(atan2(y[2,], y[1,])/(2*pi) + 1/2, exp(-(y[1,]^2+y[2,]^2)/2))
hist(x, main="Box-Mueller")

y <- apply(array(rnorm(4*n), c(2,2,n)), c(3,2), function(z) sum(z^2))
x <- y[,2] / (y[,1]+y[,2])
hist(x, main="Beta")

x <- apply(array(rnorm(8*n), c(4,2,n)), 3, function(y) cor(y[,1], y[,2]))
hist(x, main="Correlation")

n.bits <- 32; x <-  (2^-(1:n.bits)) %*% matrix(rnorm(n*n.bits) > 0, n.bits)
hist(x, main="Binary")

y <- matrix(rnorm(n*3), 3)
x <- y[1, ] / sqrt(apply(y, 2, function(x) sum(x^2)))
hist(x, main="Equal area")

accept <- function(p) { # Using random normals, return TRUE with chance `p`
  p.bit <- x <- 0
  while(p.bit == x) {
    p.bit <- p >= 1/2
    x <- rnorm(1) >= 0
    p <- (2*p) %% 1
  }
  return(x == 0)
}
y <- rnorm(ceiling(n * sqrt(exp(1)*pi/2))) # This aims to produce `n` uniforms
y <- y[abs(y) < 1]
x <- y[sapply(y, function(x) accept(exp((x^2-1)/2)))]
hist(x, main="Rejection")

y <- matrix(rnorm(2*(n+1))^2, 2)
x <- cumsum(y)[seq(2, 2*(n+1), 2)]
x <- x[-(n+1)] / x[n+1]
x <- x[order(y[2,-(n+1)]/y[1,-(n+1)])] 
hist(x, main="Ordered")

x <- rnorm(n) %% 1 # (Use SD of 5 or greater in practice)
hist(x, main="Modular")

x <- runif(n)      # Reference distribution
hist(x, main="Uniform")

2
Z=(X1-X2)/(X3-X4)X

1
Più in generale, il principio è quello di trovare una quantità fondamentale dal campione con un cdf computazionalmente suscettibile. Ciò si lega bene alla costruzione di intervalli di confidenza e test di ipotesi, con la svolta che potremmo cercare di ottimizzare il numero di elementi utilizzati piuttosto che questi ultimi casi che si concentrano maggiormente sulla massimizzazione delle informazioni da una dimensione del campione fissa.
cardinale

@Cardinal Grazie per gli interessanti commenti, nonché per il nono metodo (Cauchy). Anche trovare una quantità fondamentale non è necessario quando si cerca solo una buona approssimazione. Ad esempio, (8) funziona perfettamente se si riserva un piccolo numero di risultati iniziali per stabilire una scala approssimativa.
whuber

8

X~N(μ,σ2)Φμ,σ2Φμ,σ2(X)(0,1)d(0,1)

P(Φμ,σ2(X)d)=P(XΦμ,σ2-1(d))=d

d1d1Φμ,σ2(X)(0,1)σR


4
È l'inverso del campionamento della trasformata inversa!
Roger Fan,

Potresti forse approfondire la seconda frase del tuo secondo paragrafo? Ho difficoltà a comprendere quanto segue: "Questo è sufficiente per mostrare che Φμ, σ2 (X) ha una distribuzione uniforme su (0,1) poiché abbiamo dimostrato che le misure corrispondenti sono uguali per un generatore dell'algebra di Borel su ℝ. "
Wellington,

XX(P)σ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.