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.