Generación de variables aleatorias discretas Método de aceptación y rechazo Método de composición Método de la urna Método de tablas Georgina Flesia FaMAF 11 de abril, 2013 Método de Aceptación y Rechazo I Se desea simular una v. a. X discreta, con probabilidad de masa pj = P(X = j), j = 0, 1, 2, . . . . I Hipótesis: Se conoce un método eficiente para generar una v.a. Y , con probabilidad de masa qj = P(Y = j), j = 0, 1, 2, . . . , que verifica I I Si pj 6= 0 entonces qj 6= 0. Existe una constante c (c > 1) tal que pj ≤c qj para todo j tal que pj > 0 Método de Aceptación y Rechazo Generar Y Generar U 1 U R a ech cqY za Acepta pY Método de Aceptación y Rechazo Algorithm 1: Método de aceptación y rechazo repeat Simular Y , con probabilidad de masa qY ; Generar U ∼ U(0, 1) until U < pY /cqY ; X ←Y Teorema El algoritmo de aceptación y rechazo genera una variable aleatoria X a valores enteros no negativos tal que P(X = j) = pj , j = 0, 1, . . . . Además, el número de iteraciones requeridas para obtener X es una v.a. geométrica con media c. Demostración Sea X el valor generado por el algoritmo 1. Quiero ver que P(X = j) = pj . Observemos que I (X = j) si y sólo si (Y = j) y el algoritmo lo acepta en alguna iteración: X P(X = j) = P(j es aceptado en la iteración k ) k ≥1 I (j es aceptado en la iteración k ) significa que hay k iteraciones donde 1. en las k − 1 primeras el algoritmo rechaza 2. y en la ultima, la k -esima, Y genera j y el algoritmo lo acepta P(j aceptado en la iteración k ) = P( algoritmo rechaza k − 1 veces ) P((Y = j) ∧ j es aceptado en la k ) por la independencia de las iteraciones = P( algoritmo rechaza)k −1 P((Y = j) ∧ j es aceptado) En una iteración fija I Probabilidad de que el algoritmo acepte el valor j P((Y = j) ∧ j es aceptado) I = P(j es aceptado | (Y = j))P(Y = j) pj = qj cqj pj = c Probabilidad de que el algoritmo acepte en una iteración P( el algoritmo acepte) = X P((Y = j)∧ j es aceptado) = j P( el algoritmo rechace) = 1 − I X pj j 1 c G es la variable que mira el número de iteraciones necesarias, entonces G es geométrica de parámetro 1/c. c = 1 c P(X = j) P(X = j) = = P(j sea aceptado en alguna iteración) ∞ X P(j sea aceptado en la iteración k ) k =1 = ∞ X P( el algoritmo rechaza)k −1 P((Y = j) ∧ j es aceptado) k =1 k −1 ∞ X pj 1 = 1− c c k =1 = pj Ejemplo: Método de rechazo Ejemplo Generar una v.a. X con valores en {1, 2, . . . , 10} y probabilidades 0.11, 0.12, 0.09, 0.08, 0.12, 0.10, 0.09, 0.09, 0.10, 0.10 I Método de la transformada inversa: implica una media (mínima) de 5,04 iteraciones. I Método de aceptación y rechazo: c = 1.2. La media de iteraciones es 1,2. Método de Composición Se tienen métodos eficientes para generar valores de v. a. X1 y X2 , con funciones de probabilidad de masa X1 :{pj j = 0, 1, . . . } X2 : {qj j = 0, 1, . . . .} El método de composición permite generar una v.a. X con función de probabilidad de masa P(X = j) = αpj + (1 − α)qj ( X = X1 X2 j = 0, 1, . . . , con probabilidad α con probabilidad 1 − α 0<α<1 Método de Composición Algorithm 2: Algoritmo: Método de composición para dos v.a. Generar U ∼ U(0, 1); if U < α then X ← X1 else X ← X2 end P(X = j) = P(U < α, X1 = j) + P(α < U < 1, X2 = j) = P(U < α) P(X1 = j) + P(α < U < 1) P(X2 = j) = α pj + (1 − α) qj Método de composición Ejemplo Generar X tal que ( pj = P(X = j) = 0.05 0.15 para j = 1, 2, 3, 4, 5 para j = 6, 7, 8, 9, 10 Algorithm 3: (0.05)· 5=0.25 (0.15)· 5=0.75 Generar U ∼ U(0, 1); if U <0.75 then Generar V ∼ U(0, 1); X ← b5V c + 6 else Generar V ∼ U(0, 1); X ← b5V c + 1 end Método de composición Ejemplo Generar X tal que ( pj = P(X = j) = 0.05 0.15 para j = 1, 2, 3, 4, 5 para j = 6, 7, 8, 9, 10 Algorithm 4: Otra solución (0.05)·10=0.5 (0.10)·5=0.5 Generar U ∼ U(0, 1); if U <0.5 then Generar V ∼ U(0, 1); X ← b10V c + 1 else Generar V ∼ U(0, 1); X ← b5V c + 6 end Método de Aceptación y Rechazo Algunos casos particulares: I Si Y ∼ U[1, n]. I c = maxj {n pj } I Si X es condicional a Y ≤ n. I c = 1/P(Y ≤ n) Algorithm 5: ] Y uniforme en [1,n] repeat Generar V ∼ U(0, 1); Y ← bn V c Generar U ∼ U(0, 1) until U < n pY /c; X ←Y Algorithm 6: P(X = j) = P(Y = j | Y ≤ n) repeat Simular Y until Y ≤ n; X ←Y Método de la transformada inversa X : {x0 , x1 , . . . }, con P(X = xi ) = pi . Algorithm 7: Transformada Inversa F ← p0 , i ← 0; Generar U ∼ U(0, 1); while U > F do i ← i + 1; F ← F + pi ; end X ← xi I El algoritmo recorre desde un valor en adelante. I Para una v.a. discreta en general, realiza muchas búsquedas. Veamos algunas alternativas. Método de la Urna I X toma un número finito de valores: {x1 , x2 , . . . , xn } I Cada pi = ki 10−q , con ki entero y q fijo. Esto es: n X ki = 10q i=1 q: es el número máximo de dígitos decimales. I v : un vector de tamaño 10q que contiene ki veces cada elemento xi . v = x1 . . . x1 x2 . . . x2 . . . xn . . . xn | {z } | {z } | {z } k1 Algorithm 8: Algoritmo: Variante A Generar U ∼ U(0, 1); J ← b10q Uc + 1; X ← vJ k2 kn Método de la Urna Ejemplo X toma valores x1 = 8, x2 = 9, x3 = 10 y x4 = 11, con probabilidades p1 = 0.2, p2 = 0.1, p3 = 0.4 y p4 = 0.3. q=1 p1 = 2 · 10−1 , p2 = 1 · 10−1 , p3 = 4 · 10−1 , p4 = 3 · 10−1 . v= 8 8 9 U = 0.378 10 ⇒ 10 10 10 11 11 J=4 ⇒ X ← 10 11 Método de la Urna ¿Por qué funciona? P(X = j) = = P(k1 + . . . kj−1 < b10q Uc ≤ k1 + . . . kj−1 + kj ) kj = pj 10q I Desventaja: Necesita 10q lugares de almacenamiento. I Advertencia: Si se redondean los datos para utilizar un q más P chico, recordar que ki debe resultar 1. Método de la Tabla Marsaglia (1963) propone la siguiente mejora el método de la urna. I Se utiliza un vector vk , para cada posición decimal: k = 1, 2, . . . , q. I En vk se almacena xi tantas veces como indique su posición decimal k -ésima. I Se calcula dk la probabilidad de ocurrencia del dígito de orden k : dk = suma de los dígitos de orden k en las probabilidades 10k Método de la Tabla Ejemplo Sea X con distribución p(1) = 0.15, p(2) = 0.20, p(3) = 0.43, p(4) = 0.22, v= 1 w= 1 d1 = 2 1 2 1 3 1 3 1 1+2+4+2 = 0.9 10 3 3 3 3 d2 = 4 3 4 4 m=9 4 n = 10 5+0+3+2 = 0.1 100 Método de la tabla m=9 n = 10 d1 = 0.9 d2 = 0.1 Algorithm 10: Método de la tabla (Ejemplo) Input: v , w, m, n Generar U ∼ U(0, 1); if U < 0.9 then Generar V ∼ U(0, 1); J ← bmV c; X ← vJ else Generar V ∼ U(0, 1); J ← bnV c; X ← wJ end Método de la tabla ¿Por qué funciona el algoritmo? P(X = 3) = P(X = 3 | elegir decenas)P(elegir decenas) + P(X = 3 | elegir centenas)P(elegir centenas) 4 3 = 0.9 + 0.1 9 10 = 0.43 I Ventaja sobre el anterior: mucho menor costo de almacenamiento. (19 lugares en lugar de 100). I Desventaja: "Mayor" tiempo de ejecución.