Simulación La mayoría de los procesos de simulación tiene la misma estructura básica: 1 Indentificar una variable de interés y escribir un programa para simular dichos valores Generar una muestra independiente e idénticamente distribuidas 1, L, n con la misma distribución de 3 Estimar E [ ], usando, y evaluar la exactitud de la estimación usando intervalos de confianza Observación: Todas las variables aleatorias pueden ser generadas manipulando variables aleatorias con distribución uniforme(0,1) Simulando variables aleatorias discretas R con función de probabilidad acumulada F y función de probabilidad f El proceso consiste en tomar una variable aleatoria uniforme y obtener una variable aleatoria Sea una variable aleatoria discreta con = { 0,1,,L Paso 1: Generar u ~ uniforme(0,1) Paso : Hacer x = 0 Paso 3: Mientras F ( x) < u, x = x + 1 Ejemplo: Generar un número aleatorio de la distribución binomial ( n = 8, p = 08) binom <- function(n,p) { x <- 0 F <- pbinom(x, size = n, prob = p) while (F<u) { x <- x+1 F <- pbinom(x, size = n, prob = p)
Ejemplo: Generar 10 números aleatorios de la distribución binomial ( n = 8, p = 05) simulbinom <- function(m, n, p) { i <- 1 while (i <= m) { binom(n, p) i <- i + 1 > simulbinom(10, n = 8, p = 05) Secuencia de eventos independientes Para variables aleatorias que se definen usando una secuencia de ensayos independientes (binomial, geométrica y binomial negativa) se tienen métodos alternativos Dada una variable aleatoria con distribución uniforme(0,1) se puede generar una variable aleatoria de Bernoulli con parámetro p usando: Paso 1: Generar u ~ uniforme(0,1) Paso : Si u < p entonces x = 1, en caso contrario x = 0 bernoulli <- function(p) { x <- 0 if (u<p) x <- x+1 print(u) Luego, para generar una variable aleatoria binomial con parámetros n y p se usa: Paso 1: x = 0 Paso : Repetir n veces lo siguiente: Paso 1: Generar u ~ uniforme(0,1) Paso : Si u < p entonces x = x + 1
simulbinom <- function(m, n, p) { i <- 1 while (i<=m) { x <- sum(runif(n)<p) i <- i+1 > simulbinom(m = 10,n = 8,p = 05) [1] Simulando variables aleatorias continuas Metodo de inversión Suponga que se tiene U ~ uniforme(01) y se desea simular una variable aleatoria continua con función de distribución acumulada F Sea Y = F ( u) entonces se tiene: F ( y) = Pr( Y y) = Pr F ( u) ( y) = Pr U F ( y) ( ) F ( y) Y = es decir, que Y tiene la misma distribución de Luego, si se simula una variable aleatoria uniforme(0,1) entonces puede simularse cualquier variable aleatoria continua para la que se conoce F Este método es llamado método de la trasformación inversa Otra forma de establecer este resultado es que para toda variable aleatoria continua, x uniforme(0,1) F ( ) ~ Ejemplo: Si ~ exponencial con parámetro λ entonces su función de densidad es f x = λ exp λx, x > 0 y además ( ) { F ( x) 0 = 1 exp { λ x x < 0 x 0 Tomando y = 1 exp{ λx entonces la función inversa es x log( 1 y) = F ( y) = λ Luego, por el método de la transformación inversa se genera una variable aleatoria ~ 1 λ log 1 u con u ~ uniforme(0,1) exponencial ( λ ) usando ( )
simulexp <- function(m, rate) { data <- rep(0,m) for (i in 1:m) { x <- -log(1 - u) / rate data[i] <- x #print(data) hist(data) > simulexp(m = 1000, rate = 1/5)
Simulando normales Si ~ N( 0,1) Z entonces µ σz ~ N( µ, σ ) +, luego solo es necesario simular una variable aleatoria con distribución normal estándar El resultado anterior sugiere una aproximación para simular la distribución normal usando el teorema central del límite Recordar que si U ~ uniforme ( 0,1) entonces E [ U ] = 1 y Var [ U ] = 1 1 tal que si U1, L, U1 son variables aleatorias independientes con distribución uniforme(0,1) entonces Z 1 = U i i= 1 6 tiene distribución aproximadamente normal estándar Algoritmo de Box-Muller Suponga P (, Y ) distribución ( 0,1) =, donde e Y son variables aleatorias independientes con N entonces se dice que P tiene una distribución normal estándar bivariada El algoritmo de Box-Muller trabaja simulando P en coordenadas polares ( R,θ ) y luego transformando los valores hacia las coordenadas cartesianas usando = R cosθ e Y = sinθ Se puede probar que ~ 1 / y ~ R Lo anterior permite usar el siguiente algoritmo: R exponencial ( ) θ uniforme (,π ) 1 Generar U 1 y U ambas con distribución uniforme(0,1) Calcular π U1 R = log U 3 Obtener = R cosθ e Y = sinθ θ = y ( ) 0 independiente de