Simulación de sorteos de una distribución uniforme utilizando sorteos de una distribución normal

15

Recientemente compré un recurso de entrevista de ciencia de datos en el que una de las preguntas de probabilidad era la siguiente:

Dados sorteos de una distribución normal con parámetros conocidos, ¿cómo puede simular sorteos de una distribución uniforme?

Mi proceso de pensamiento original fue que, para una variable aleatoria discreta, podríamos dividir la distribución normal en K subsecciones únicas donde cada subsección tiene un área igual bajo la curva normal. Entonces podríamos determinar en cuál de los valores de K toma la variable reconociendo en qué área de la curva normal cae la variable.

Pero esto solo funcionaría para variables aleatorias discretas. Investigué un poco sobre cómo podríamos hacer lo mismo para las variables aleatorias continuas, pero desafortunadamente solo pude encontrar técnicas como el muestreo de transformación inversa que utilizaría como entrada una variable aleatoria uniforme y podría generar variables aleatorias de alguna otra distribución. Estaba pensando que quizás podríamos hacer este proceso a la inversa para obtener variables aleatorias uniformes.

También pensé en usar las variables aleatorias normales como entradas en un generador congruencial lineal, pero no estoy seguro de si esto funcionaría.

¿Alguna idea sobre cómo podría abordar esta pregunta?

Wellington
fuente

Respuestas:

30

En el espíritu de usar cálculos algebraicos simples que no están relacionados con el cálculo de la distribución Normal , me inclinaría por lo siguiente. Están ordenados como pensé en ellos (y, por lo tanto, necesitaban ser cada vez más creativos), pero he guardado lo mejor, y lo más sorprendente, para durar.

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

  2. 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=Y2iY2i1+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.

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

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

    X3iX3i22+X3i12+X3i2

    para .i=1,2,3,

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

    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

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

    Normal and Uniform PDFs

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

  7. 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.)

  8. 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 10857.)

    Approximate PDF


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.

The ease of these constructions is evidenced by the following R code, which uses only one or two lines for most of them. Their correctness is witnessed by the resulting near-uniform histograms based on 100,000 independent values in each case (requiring around 12 seconds for all seven simulations). For reference--in case you are worried about the amount of variation appearing in any of these plots--a histogram of uniform values simulated with R's uniform random number generator is included at the end.

Histograms

χ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")
whuber
fuente
2
(+1) Si estuviera haciendo esta pregunta en una entrevista, la modificaría para preguntar sobre el caso en el que se arreglan los parámetros, pero desconocidos , lo que me parece más interesante. El enfoque de correlación de Pearson (# 3) pasa sin cambios, pero es quizás un poco esotérico. El enfoque Beta (# 2) requiere solo una ligera modificación al considerar los cuadrados de las diferencias de los pares disjuntos. Similar,Z=(X1-X2)/ /(X3-X4 4) es Cauchy estándar (independientemente de la media y la varianza de X), que tiene un buen cdf.
Cardenal
1
More generally, the principle is to find a pivotal quantity from the sample with a computationally amenable cdf. This ties in nicely with constructing confidence intervals and hypothesis tests, with the twist that we might seek to optimize the number of elements used rather than the latter cases which focus more on maximizing the information from a fixed sample size.
cardinal
@Cardinal Thank you for the interesting comments, as well as the ninth method (Cauchy). Even finding a pivotal quantity is unnecessary when only a good approximation is sought. For instance, (8) works perfectly well if you reserve a small number of initial results to establish a rough scale.
whuber
8

You can use a trick very similar to what you mention. Let's say that XN(μ,σ2) is a normal random variable with known parameters. Then we know its distribution function, Φμ,σ2, and Φμ,σ2(X) will be uniformly distributed on (0,1). To prove this, note that for d(0,1) we see that

P(Φμ,σ2(X)d)=P(XΦμ,σ21(d))=d.

The above probability is clearly zero for non-positive d and 1 for d1. This is enough to show that Φμ,σ2(X) has a uniform distribution on (0,1) as we have shown that the corresponding measures are equal for a generator of the Borel σ-algebra on R. Thus, you can just tranform the normally distributed data by the distribution function and you'll get uniformly distributed data.

swmo
fuente
4
It's the inverse of inverse transform sampling!
Roger Fan
Could you possibly elaborate on the second sentence of your second paragraph? I am having trouble understanding the following: "This is enough to show that Φμ,σ2(X) has a uniform distribution on (0,1) as we have shown that the corresponding measures are equal for a generator of the Borel σ-algebra on ℝ."
wellington
To show that some real random variable, X, has a uniform distribution, we should show that its corresponding measure, X(P) equals that of the uniform distribution for all measurable sets of the real line. However, it's actually enough to consider some generator of the σ-algebra, due to a uniqueness of measures-theorem. If they are equal on sets of the generator, they'll be equal for all measurable sets. This is just a measure-theoretic attachment to the answer.
swmo