Invierta la técnica Box-Mueller : a partir de cada par de normales (X,Y) , se pueden construir dos uniformes independientes como atan2(Y,X) (en el intervalo [−π,π] ) y exp(−(X2+Y2)/2) (en el intervalo [0,1] ).
Tomar las normales en grupos de dos y sumar sus cuadrados para obtener una secuencia de χ22 variables aleatorias Y1,Y2,…,Yi,… . Las expresiones obtenidas de los pares.
Xi=Y2iY2i−1+Y2i
tendrá una distribución Beta(1,1) , que es uniforme.
Que esto requiere solo una aritmética básica y simple debe quedar claro.
Debido a que la distribución exacta del coeficiente de correlación de Pearson de una muestra de cuatro pares de una distribución normal bivariada estándar se distribuye uniformemente en [−1,1] , simplemente podemos tomar las normales en grupos de cuatro pares (es decir, ocho valores en cada conjunto) y devuelve el coeficiente de correlación de estos pares. (Esto implica operaciones aritméticas simples más dos operaciones de raíz cuadrada).
Se sabe desde la antigüedad que una proyección cilíndrica de la esfera (una superficie en tres espacios) es de igual área . Esto implica que en la proyección de una distribución uniforme en la esfera, tanto la coordenada horizontal (correspondiente a la longitud) como la coordenada vertical (correspondiente a la latitud) tendrán distribuciones uniformes. Debido a que la distribución normal estándar trivariada es esféricamente simétrica, su proyección sobre la esfera es uniforme. Obtener la longitud es esencialmente el mismo cálculo que el ángulo en el método Box-Mueller ( qv ), pero la latitud proyectada es nueva. La proyección en la esfera simplemente normaliza un triple de coordenadas y en ese punto z es la latitud proyectada. Por lo tanto, tome las variantes normales en grupos de tres, X 3 i - 2 , X 3 i - 1 , X 3 i , y calcule(x,y,z)zX3i−2,X3i−1,X3i
X3iX23i−2+X23i−1+X23i−−−−−−−−−−−−−−−−√
para .i=1,2,3,…
Debido a que la mayoría de los sistemas informáticos representan números en binario , la generación uniforme de números generalmente comienza produciendo números enteros distribuidos uniformemente entre y 2 32 - 1 (o un alto poder de 2 relacionado con la longitud de las palabras de la computadora) y redimensionándolos según sea necesario. Dichos enteros se representan internamente como cadenas de 32 dígitos binarios. Podemos obtener bits aleatorios independientes al comparar una variable Normal con su mediana. Por lo tanto, es suficiente dividir las variables normales en grupos de tamaño igual al número deseado de bits, comparar cada uno con su media y ensamblar las secuencias resultantes de resultados verdaderos / falsos en un número binario. Escribiendo k0232−1232kpara el número de bits y para el signo (es decir, H ( x ) = 1 cuando x > 0 y H ( x ) = 0 de lo contrario) podemos expresar el valor uniforme normalizado resultante en [ 0 , 1 ) con la fórmulaHH(x)=1x>0H(x)=0[0,1)
∑j=0k−1H(Xki−j)2−j−1.
Las variables pueden extraerse de cualquier distribución continua cuya mediana sea 0 (como una Normal estándar); se procesan en grupos de k y cada grupo produce uno de esos valores pseudo-uniformes.Xn0k
El muestreo de rechazo es una forma estándar, flexible y poderosa de dibujar variables aleatorias de distribuciones arbitrarias. Suponga que la distribución de destino tiene PDF . Se dibuja un valor Y de acuerdo con otra distribución con PDF gfYg . En la etapa de rechazo, un valor uniforme que se extiende entre 0 y g ( Y ) se dibuja con independencia de Y y se compara con f ( Y ) : si es menor, YU0g(Y)Yf(Y)Yse retiene pero de lo contrario se repite el proceso. Sin embargo, este enfoque parece circular: ¿cómo generamos una variante uniforme con un proceso que necesita una variante uniforme para empezar?
La respuesta es que en realidad no necesitamos una variante uniforme para llevar a cabo el paso de rechazo. En cambio (suponiendo que ) podemos lanzar una moneda justa para obtener un 0 o 1 al azar. Esto se interpretará como el primer bit en la representación binaria de una variante uniforme U en el intervalo [ 0 , 1 ) . Cuando el resultado es 0 , eso significa que 0 ≤ U < 1 / 2 ; de lo contrario, 1 / 2 ≤ U < 1 . g(Y)≠001U[0,1)00≤U<1/21/2≤U<1La mitad del tiempo, esto es suficiente para decidir el paso rechazo: si , pero la moneda es 0 , Y debe ser aceptada; si f ( Y ) / g ( Y ) < 1 / 2 , pero la moneda es 1 , Y debe ser rechazado; de lo contrario, hay que voltear la moneda de nuevo con el fin de obtener el siguiente bit de U . Porque, no importa qué valor f ( Yf(Y)/g(Y)≥1/20Yf(Y)/g(Y)<1/21YU tiene - hay un 1 / 2 oportunidad de detener después de cada flip, el número esperado de saltos es de sólo 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
El muestreo de rechazo puede valer la pena (y ser eficiente) siempre que el número esperado de rechazos sea pequeño. Podemos lograr esto ajustando el rectángulo más grande posible (que representa una distribución uniforme) debajo de un PDF normal.
El uso de cálculo para optimizar el área del rectángulo, se encuentra que sus puntos finales deben estar en , donde su altura es igual a exp ( - 1 / 2 ) / √±1, lo que hace que su área sea un poco mayor que0.48. Al utilizar esta densidad Normal estándar comogyrechazarautomáticamentetodos los valores fuera del intervalo[-1,1], y de otro modo aplicar el procedimiento de rechazo, obtendremos variables uniformes en[-1,1]eficientemente:exp(−1/2)/2π−−√≈0.2419710.48g[−1,1][−1,1]
En una fracción del tiempo, la variante Normal se encuentra más allá de [ - 1 , 1 ] y se rechaza de inmediato. ( Φ es el CDF normal estándar).2Φ(−1)≈0.317[−1,1]Φ
En la fracción restante del tiempo, se debe seguir el procedimiento de rechazo binario, que requiere dos variantes normales más en promedio.
El procedimiento general requiere un promedio de pasos.1/(2exp(−1/2)/2π−−√)≈2.07
El número esperado de variaciones normales necesarias para producir cada resultado uniforme resulta en
2eπ−−−√(1−2Φ(−1))≈2.82137.
Aunque eso es bastante eficiente, tenga en cuenta que (1) el cálculo del PDF normal requiere calcular un exponencial y (2) el valor debe calcularse previamente de una vez por todas. Todavía es un poco menos de cálculo que el método Box-Mueller ( qv ).Φ(−1)
Las estadísticas de orden de una distribución uniforme tienen brechas exponenciales. Dado que la suma de cuadrados de dos normales (de media cero) es exponencial, podemos generar una realización de uniformes independientes sumando los cuadrados de pares de tales normales, calculando la suma acumulativa de estos, reescalando los resultados para que caigan en el intervalo [ 0 , 1 ] y soltando el último (que siempre será igual a 1 ). Este es un enfoque agradable porque requiere solo cuadrar, sumar y (al final) una sola división.n[0,1]1
The n values will automatically be in ascending order. If such a sorting is desired, this method is computationally superior to all the others insofar as it avoids the O(nlog(n)) cost of a sort. If a sequence of independent uniforms is needed, however, then sorting these n values randomly will do the trick. Since (as seen in the Box-Mueller method, q.v.) the ratios of each pair of Normals are independent of the sum of squares of each pair, we already have the means to obtain that random permutation: order the cumulative sums by the corresponding ratios. (If n is very large, this process could be carried out in smaller groups of k with little loss of efficiency, since each group needs only 2(k+1) Normals to create k uniform values. For fixed k, the asymptotic computational cost is therefore O(nlog(k)) = O(n)2n(1+1/k) Normal variates to generate n uniform values.)
To a superb approximation, any Normal variate with a large standard deviation looks uniform over ranges of much smaller values. Upon rolling this distribution into the range [0,1] (by taking only the fractional parts of the values), we thereby obtain a distribution that is uniform for all practical purposes. This is extremely efficient, requiring one of the simplest arithmetic operations of all: simply round each Normal variate down to the nearest integer and retain the excess. The simplicity of this approach becomes compelling when we examine a practical R
implementation:
rnorm(n, sd=10) %% 1
reliably produces n
uniform values in the range [0,1] at the cost of just n
Normal variates and almost no computation.
1108101610 as shown in the code, the maximum deviation from a uniform PDF is only 10−857.)
En todos los casos, las variables normales "con parámetros conocidos" se pueden volver a centrar fácilmente y reescalar a las normales estándar asumidas anteriormente. Posteriormente, los valores resultantes distribuidos uniformemente se pueden volver a centrar y reescalar para cubrir cualquier intervalo deseado. Estos requieren solo operaciones aritméticas básicas.