Generación de variables aleatorias normales

Transcripción

Generación de variables aleatorias normales
Generación de variables aleatorias normales
Georgina Flesia
FaMAF
24 de abril, 2012
El método de rechazo
Veamos la version para variables continuas
Rx
I
Sea X una v. a. con densidad f : F (x) = P(X ≤ x) =
I
Supongamos que se tiene un método para generar Y , con
densidad g, y que
f (y )
≤ c,
g(y )
−∞
f (t) dt.
para todo y ∈ R tal que f (y ) 6= 0.
El método de rechazo para generar X a partir de Y tiene el siguiente
algoritmo:
Método de rechazo
Algoritmo: Método de aceptación y rechazo
repeat
Generar Y , con densidad g;
Generar U ∼ U(0, 1)
until U < f (Y )/(cg(Y )) ;
X ←Y
Teorema
1. La v. a. generada por el método de rechazo tiene densidad f .
2. El número de iteraciones del algoritmo es una variable aleatoria
geométrica con media c.
Generación de una v. a. normal
Ejemplo
Generar una v. a. normal estándar, es decir, Z con densidad
2
1
f (x) = √ e−x /2 .
2π
2
√2 e −x /2 ,
2π
en 0 < x < ∞.
I
|Z | tiene densidad f|Z | (x) =
I
Si sabemos generar |Z |, generamos Z por composición.
Generación de una v. a. normal
Ejemplo
Si sabemos generar |Z |, generamos Z por composición, dando igual
probabilidad a |Z | y −|Z |.
1. Genero U uniforme, si U ≤ 0.5, entonces Z = |Z |,
2. si U > 0.5 Z = −|Z |.
Generación de |Z | con Z v. a. normal
Para generar |Z |:
I
Elegimos g(x) = e−x ,
0 < x < ∞.
p
Resulta c = 2e/π
I
c ≈ 1.32.
I
Generación de |Z | con Z v. a. normal
X exponencial de λ = 1, entonces g(x) = e−x , 0 < x < ∞.
f (x)
g(x)
=
=
2
√2 e −x /2
2π
e−x
2
2
√ ex−x /2
2π
I
El valor máximo de f /g se logra cuando x − x 2 /2 es máximo
I
x =1
p
c = 2e/π
I
Generación de |Z | con Z v. a. normal
f (x)
(x − 1)2
= exp −
.
cg(x)
2
Generación de |Z |
repeat
Generar V ∼ U(0, 1);
Y ← − log(V );
Generar U ∼ U(0, 1)
2
until U < exp{− (Y −1)
};
2
|Z | ← Y
Observación
2
I
U < exp{− (Y −1)
}
2
I
− log(U) >
I
Y2 = − log(U) ∼ E(1).
(Y −1)2
2
Generación de |Z | con Z v. a. normal
Generación de |Z |
repeat
Generar Y1 ∼ E(1);
Generar Y2 ∼ E(1)
until Y2 > (Y1 − 1)2 /2 ;
|Z | ← Y1
I
Si Y2 > (Y1 − 1)2 /2, entonces
X = Y2 − (Y1 − 1)2 /2 es
exponencial con media 1, por
la propiedad de falta de
memoria.
I
Luego podemos generar la
normal y también una
exponencial.
Generación de una v. a. normal
Generación de Z normal y X exponencial
repeat
Generar Y1 ∼ E(1);
Generar Y2 ∼ E(1)
until Y2 − (Y1 − 1)2 /2 > 0 ;
X ← Y2 − (Y1 − 1)2 /2;
Generar U ∼ U(0, 1);
if U < 0.5 then
Z = Y1
else
Z = −Y1
end
Generación de una v. a. normal
Observaciones.
I
c ≈ 1.32.
I
Para generar una secuencia de normales, se puede utilizar X de
cada iteración como una de las exponenciales necesarias en el
paso siguiente.
I
En promedio, se necesitan generar 1.64 = 2 × 1.32 − 1
exponenciales y calcular 1.32 cuadrados.
Método polar
Con este método se generan dos variables normales independientes.
Si X e Y son normales estándar independientes, entonces
R2 = X 2 + Y 2,
tan(θ) =
Y
X
determinan variables R 2 y Θ independientes.
f (x, y )
=
f (d, θ)
=
1
exp(−(x 2 + y 2 )/2)
2π
1 1 −d/2
e
, 0 < d < ∞, 0 < θ < 2π.
2 2π
R 2 y Θ resultan independientes, con R 2 ∼ E(1/2) y Θ ∼ U(0, 2π).
Método polar
Método polar
Generar U1 , U2 ∼ U(0, 1);
R 2 ← −2 log(U);
Θ ← 2πU2 ;
X ← R cos(Θ);
Y ← R sen(Θ)
Transformaciones de Box-Muller:
p
I X ←
−2 log(U1 ) cos(2πU2 )
p
I Y ←
−2 log(U1 ) sen(2πU2 )
I
El cálculo de funciones trigonométricas lo hace poco eficiente.
I
Se puede mejorar generando uniformes V1 y V2 en el círculo
unitario, para evitar el cálculo directo del seno y el coseno.
Método polar
I
Generar un par (V1 , V2 ) uniformemente distribuido en el círculo
unitario.
I
I
U ∼ U(0, 1), entonces 2U ∼ U(0, 2) y 2U − 1 ∼ U(−1, 1),
V1 = 2U1 − 1, V2 = 2U2 − 1, rechazo hasta que entren en el
círculo.
I
R 2 = V12 + V22 resulta uniforme en (0, 1).
I
Θ = arctan V2 /V1 es uniforme en (0, 2π).
I
sen(θ) =
I
cos(θ) =
V2
R
V1
R
Método polar
Transformaciones
de Box Muller
I
X = (−2 log U)1/2
V1
(V12 + V22 )1/2
Y = (−2 log U)1/2
V2
(V12 + V22 )1/2
S = V12 + V22 y Θ son independientes, luego podemos tomar
U = S = V12 + V22
Método polar
Transformaciones
de Box Muller
Método polar (última versión)
repeat
Generar V1 , V2 ∼ U(−1, 1);
S ← V12 + V22
until q
S<1;
X ←
Y ←
q
−2 log S
S
V1 ;
−2 log S
S
V2
X = (−2 log S)1/2
V1
S 1/2
Y = (−2 log S)1/2
V2
S 1/2
Generación de v. a. normales
Existen otros métodos de generación de v. a. normales. Uno de ellos
es el método rectangle-wedge-tail:
|Z |, Z ∼ N(0, 1)
I
15 rectángulos (≈ 92%)
I
15 ”triángulos”.
I
1 cola.
Método de composición:
I 15 distr. uniformes.
I
16 restantes: método de
rechazo.
Referencia: Donald E. Knuth,
Seminumerical Algorithms, p.p.
122 en adelante.

Documentos relacionados