41
Simulación en R Dr. Francisco J Ariza Hernández IIMAS - UNAM - 19 de agosto de 2014 (IIMAS-UNAM) Simulación 19 de agosto de 2014 1 / 38

Simulacion

Embed Size (px)

DESCRIPTION

lenguaje de programación R

Citation preview

Page 1: Simulacion

Simulación en R

Dr. Francisco J Ariza Hernández

IIMAS - UNAM-

19 de agosto de 2014

(IIMAS-UNAM) Simulación 19 de agosto de 2014 1 / 38

Page 2: Simulacion

Contenido

Contenido

1 Números AleatoriosGeneración de Números Pseudo-aleatoriosMétodos de generación de na’s de distribuciones

2 Métodos Monte CarloIntroducciónIntegración Monte Carlo

(IIMAS-UNAM) Simulación 19 de agosto de 2014 2 / 38

Page 3: Simulacion

Números Aleatorios

Contenido

1 Números AleatoriosGeneración de Números Pseudo-aleatoriosMétodos de generación de na’s de distribuciones

(IIMAS-UNAM) Simulación 19 de agosto de 2014 3 / 38

Page 4: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Introducción

Mediante simulación pretendemos evaluar el desempeño delfuncionamiento de un sistema ante situaciones sujetas a variabilidadaleatoria.Muchos de los procedimientos estadísticos tradicionales tienen buenaspropiedades o son relativamente sencillos de calcular sólo ensituaciones en las que los datos o las estadísticas derivadas de ellos(estimadores, estadísticas de prueba, etc.) son o pueden tratarsecomo (aproximadamente) normales.Por ejemplo, en muchos de los problemas más comunes la distribuciónmuestral de dichas estadísticas es asintóticamente normal.Sin embargo, no todos estos procedimientos son robustos anteviolaciones al supuesto de normalidad.En éstos y en otros casos, las propiedades de la distribución muestralde las estadísticas relevantes no se conocen de manera exacta ypueden ser difíciles de aproximar analíticamente

(IIMAS-UNAM) Simulación 19 de agosto de 2014 4 / 38

Page 5: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Introducción

Lo anterior ha generado la necesidad de contar con métodosnuméricos alternativos para resolver esos problemas.Afortunadamente, el avance tecnológico que se refleja en el poder deprocesamiento y capacidad de almacenamiento de las computadoras,ha permitido el desarrollo de métodos basados en técnicas desimulación.Para todo proyecto de simulación es indispensable contar congeneradores de números pseudo-aleatorios.En general, los generadores implementados en R son de buena calidad(runif, rnorm). Sin embargo, revisaremos algunos de susfundamentos.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 5 / 38

Page 6: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Introducción

Todos los generadores de números aleatorios son de naturalezadeterminística. Sin embargo, son tales que “parecen” aleatorios.El problema básico consiste en simular muestras de la distribuciónuniforme (discreta o continua)A partir de estos valores, es posible simular ?observaciones? decualquier otra distribución de probabilidadLas características principales que debe cumplir un generador denúmeros aleatorios uniformes son:

I Distribución uniformeI IndependenciaI Repetibilidad y portabilidad.I Rapidez computacional.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 6 / 38

Page 7: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Métodos de generación de NA

Los métodos de generación de números pseudo-aleatorios son:

Método de los cuadrados mediosMétodos congruencialesMétodo de registro desfasadosetc.

Procedimiento general:

P1 −− > P2 −− > P3

Donde:P1 : Obtener la semilla (valores iniciales)P2 : Implementar el algoritmo recursivoP3 : Validar el conjunto de datos generados

(IIMAS-UNAM) Simulación 19 de agosto de 2014 7 / 38

Page 8: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Métodos de generación de NA

Los métodos de generación de números pseudo-aleatorios son:

Método de los cuadrados mediosMétodos congruencialesMétodo de registro desfasadosetc.

Procedimiento general:

P1 −− > P2 −− > P3

Donde:P1 : Obtener la semilla (valores iniciales)P2 : Implementar el algoritmo recursivoP3 : Validar el conjunto de datos generados

(IIMAS-UNAM) Simulación 19 de agosto de 2014 7 / 38

Page 9: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Cuadrados Medios

Consiste en que cada número de una sucesión es producido tomando losdígitos medios (típicamente 4) de un número obtenido mediante laelevación al cuadrado.

Ejemplo:Iniciemos con la semilla 2310

X X 2 num aleat2310 5336100 0.33613361 11296321 0.29632963 8779369 0.77937793 · · · · · ·

(IIMAS-UNAM) Simulación 19 de agosto de 2014 8 / 38

Page 10: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Método congruencial

El método de generadores congruenciales es el más ampliamente usado yconocido.

Los generadores están basados en la siguiente fórmula:

Ui = (aUi−1 + c) mod m

donde Ui son los números pseudo-aleatorios, U0 valor de inicio (semilla),que usualmente se escoge al azar y a, c y m son las constantes que definenal generador.

Note que para convertir estas variables a variables uniformes (0,1), solo senecesita dividirlas por m, esto es, se usa la secuencia: {Ui/m}.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 9 / 38

Page 11: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Ejemplo:

Consideremos el funcionamiento del generador con m = 10 yU0 = a = c = 7.

U1 = (77+ 7) mod 10 = 56 mod 10 = 6U2 = (76+ 7) mod 10 = 49 mod 10 = 9U3 = (79+ 7) mod 10 = 70 mod 10 = 0U4 = (70+ 7) mod 10 = 7 mod 10 = 7

U5 = (77+ 7) mod 10 = 56 mod 10 = 6...

Claramente la sucesión 7, 6, 9, 0, 7, 6, 9, 0 no es aleatoria.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 10 / 38

Page 12: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Comentarios..

Dado que se utiliza la función mod m, los posibles valores queproduce el algoritmo son los enteros {0, 1, 2, ...,m− 1}, por definiciónde modulo.Debido que el entero aleatorio Ui depende solamente del enteroaleatorio previo Ui−1, una vez que se repita el valor previo, lasecuencia se repite (ciclo). La longitud máxima del periodo es m.Los valores de a, c y m determinan la finura con que se hace lapartición del intervalo (0, 1), la longitud del ciclo, la uniformidad de ladistribución marginal y también afectan la propiedad deindependencia de la secuencia que se genera.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 11 / 38

Page 13: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

generador RANDU

RANDU fue ampliamante usado en los 70’s y 80’s pues estabaimplementado en el sistema operativo de los sistemas VAX y las máquinasIBM/370.

Su implementación en R:

randu <- function(seed) (a*seed) %% mRANDU <- function(n,seed){a <- 2^16 + 3m <- 2^31mu <- rep(0,n)for(i in 1:n){seed <- randu(seed)mu[i] <- seed/m }return(list(mues=mu,lastseed=seed))}

(IIMAS-UNAM) Simulación 19 de agosto de 2014 12 / 38

Page 14: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Los siguientes parámetros han sido recomendados en la literatura por suspropiedades de uniformidad, independencia y facilidad de implementación.Todos ellos usan módulo 231 − 1 y tienen ciclos maximales de 231 − 1(excepto el primero que tiene un ciclo de 231 − 2 ), para propósitosprácticos 231 − 1 = 2, 147, 483, 646 debe alcanzar para cualquiersimulación.a = 16807a = 950706376a = 742938285a = 1226874159a = 62089911a = 1343714438

(IIMAS-UNAM) Simulación 19 de agosto de 2014 13 / 38

Page 15: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

otra opción

Wichmann y Hill (1982) propusieron una combinación de tres generadorescongruenciales

Xi = (171)Xi−1 mod 30269Yi = (172)Yi−1 mod 30307Zi = (170)Zi−1 mod 30323

tomandoUi =

Xi30269 +

Yi30307 +

Zi30323

Este generador tiene un ciclo de 9.952× 1012 (los anteriores son del ordende 2× 109).

(IIMAS-UNAM) Simulación 19 de agosto de 2014 14 / 38

Page 16: Simulacion

Números Aleatorios Generación de Números Pseudo-aleatorios

Ejercicio 1

1 Escriba un programa en R que implemente el método de cuadradosmedios.

2 Escriba una función en R que implemente un generador congruencialde números aleatorios con módulo 231 − 1 y a = 62089911. Use estafunción para generar 10000 números con distribución uniforme en(0, 1). Haga una gráfica del resultado contra el índice, un histogramay una gráfica de U2n−1 vs. U2n. Comente sus resultados.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 15 / 38

Page 17: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Métodos

Se desea generar números aleatorios x , que pertenecen a un dominiox ∈ [xmin, xmax ], de una manera tal que la frecuencia de ocurrencia (pdf),dependeré del valor de x en una forma funcional f (x) conocida deantemano.

Los métodos mas comunes:Transformada inversaAceptación y rechazoComposiciónConvolución

(IIMAS-UNAM) Simulación 19 de agosto de 2014 16 / 38

Page 18: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Transformada inversa

Propiedad:Si U una v.a. con distribución uniforme en (0, 1), entonces, para cualquierfda F , la v.a. X definida por

X = F−1(U)

tiene distribución F .Donde

F−1(y) = «ınfx∈R{x : F (x) ≥ y}

(IIMAS-UNAM) Simulación 19 de agosto de 2014 17 / 38

Page 19: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Caso continuo

Sea F−1(·) la función inversa de la función de distribución acumuladaF (x). Para generar la función de densidad de probabilidad f (x), usamos elsiguiente procedimiento:

1 Generamos U ∼ U(0, 1)2 Calculamos X = F−1(U)

Repetimos n-veces los pasos 1− 2 para obtener n realizaciones de la v.a.con pdf f (x)

(IIMAS-UNAM) Simulación 19 de agosto de 2014 18 / 38

Page 20: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

(IIMAS-UNAM) Simulación 19 de agosto de 2014 19 / 38

Page 21: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Ejemplo

Si X es exponencial con parámetro λ = 1 su función de distribución es

F (x) = 1− e−x

Si ponemos x = F−1(u) entonces

u = F (x) = 1− e−x

o1− u = e−x

Tomando logaritmosx = − log(1− u)

Por lo tanto, aplicando el algoritmo antes mencionado1 Generamos u ∼ U(0, 1)2 calculamos x = − log(1− u)

(IIMAS-UNAM) Simulación 19 de agosto de 2014 20 / 38

Page 22: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Caso discreto

(IIMAS-UNAM) Simulación 19 de agosto de 2014 21 / 38

Page 23: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Caso discreto

Si deseamos generar el valor de una v.a. X que tiene distribución deprobabilidad

P(X = xj) = pj , j = 1, 2, . . . ,∑

pj = 1,

Aplicamos el procedimiento:1 Generar u ∼ U(0, 1)

2 X =

x1 si u < p1x2 si p1 ≤ u < p1 + p2...xj si

∑j−1i=1 pi ≤ u <

∑ji=1 pi

...

(IIMAS-UNAM) Simulación 19 de agosto de 2014 22 / 38

Page 24: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Ejemplo

Supongamos que queremos generar una variable aleatoria con la siguientedistribución:

P(X = j) = pj

para j = 1, 2, 3, 4, con probabilidadesp1 = 0.20, p2 = 0.15, p3 = 0.25, p4 = 0.4.

implementación en R:rdis <- function(n,p){psum <- cumsum(p)U <- runif(n)val2 <- numeric(n)num <- 1:length(p)for (i in 1:n)

val2[i] <- min(num[U[i]<psum])val2}rdis(100,p)

(IIMAS-UNAM) Simulación 19 de agosto de 2014 23 / 38

Page 25: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Ejemplo

Supongamos que queremos generar una variable aleatoria con la siguientedistribución:

P(X = j) = pj

para j = 1, 2, 3, 4, con probabilidadesp1 = 0.20, p2 = 0.15, p3 = 0.25, p4 = 0.4.

implementación en R:rdis <- function(n,p){psum <- cumsum(p)U <- runif(n)val2 <- numeric(n)num <- 1:length(p)for (i in 1:n)

val2[i] <- min(num[U[i]<psum])val2}rdis(100,p)

(IIMAS-UNAM) Simulación 19 de agosto de 2014 23 / 38

Page 26: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Método de aceptación y Rechazo

Es un método mas general, y que puede ser usado cuando los otrosmétods fallan.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 24 / 38

Page 27: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Método de aceptación y Rechazo

Supongamos que tenemos una manera de generar una variable aleatoriacon densidad g(x) y queremos generar otra variable que tiene densidadf (x) con el mismo soporte.Podemos hacer esto generando Y con distribución g y luego aceptandoeste valor con probabilidad proporcional a f (Y )/g(Y ).Sea c una constante tal que

f (y)g(Y )

≤ c para todo y

entonces tenemos el siguiente algoritmo para generar una variable condensidad f .

(IIMAS-UNAM) Simulación 19 de agosto de 2014 25 / 38

Page 28: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Método de aceptación y Rechazo

Algoritmo:Paso 1. Generamos Y con densidad g .Paso 2. Generamos un número aleatorio U.Paso 3. Si U ≤ f (Y )

cg(Y ) , entonces X = Y. Si no, regresamos al paso 1

Propiedades:(i) La variable generada con el método del rechazo tiene densidad f .(ii) El número de iteraciones necesarias en el algoritmo es una variablegeométrica con media c.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 26 / 38

Page 29: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Ejemplo: Caso continuoSe desea generar una v.a. con pdf dada por:

f (x) = 20x(1− x)3, 0 < x < 1.

Note que f (x) tiene soporte en (0, 1), por lo que usaremos la distribuciónuniforme con el método de rechazo.

g(x) = 1, 0 < x < 1.

Para determinar la menor constante c que satisface f (x)/g(x) < c paratodo x ∈ (0, 1) calculamos el máximo de

f (x)g(x) = 20x(1− x)3

(IIMAS-UNAM) Simulación 19 de agosto de 2014 27 / 38

Page 30: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Ejemplo: Caso continuo

Derivando la expresión anterior e igualando a cero obtenemos que elmáximo se obtiene en x = 1/4. Por lo tanto,

f (x)g(x) = 20(14)

2(1− 14)

3 =13564 ≡ c

En consecuencia,f (x)cg(x) =

25627 x(1− x)3

y el algoritmo es

Paso 1. Generamos dos números aleatorios U1 y U2.Paso 2. Si U2 ≤ 256

27 U1(1− U1)3 entonces X = U1. Si no, regresamos

al paso 1.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 28 / 38

Page 31: Simulacion

Números Aleatorios Métodos de generación de na’s de distribuciones

Ejercicio 2

1 Haga un programa que permita generar n variables aleatorias con lasiguiente distribución: cada variable puede tomar valores 10, 20, 30,40, 50 con probabilidades respectivas 0.05; 0.1; 0.15; 0.3; 0.4.

2 Realice una programa en R, para generar n de una distribuciónGamma con parámetros α y β

3 Use el método de rechazo comparando con una distribución uniformepara generar variables que tengan una densidad triangular en [−1, 1]:

f (x) ={

x − 1 para −1 < x ≤ 0,1− x para 0 < x ≤ 1.

(IIMAS-UNAM) Simulación 19 de agosto de 2014 29 / 38

Page 32: Simulacion

Métodos Monte Carlo

Contenido

2 Métodos Monte CarloIntroducciónIntegración Monte Carlo

(IIMAS-UNAM) Simulación 19 de agosto de 2014 30 / 38

Page 33: Simulacion

Métodos Monte Carlo Introducción

Introducción

Los métodos Monte Carlo son métodos de simulación que usan números(pseudo) aleatorios para investigar el comportamiento de sistemas físicos ymatemáticos y para otros tipos de cálculo.Debido a que los algoritmos de este tipo deben repetir los cálculos un grannúmero de veces, estos métodos requieren el uso de computadores y dediversas técnicas de simulación.Un algoritmo Monte Carlo es un método numérico tipo Monte Carlo quese usa con frecuencia para atacar problemas matemáticos que no puedenser resueltos de forma sencilla, por ejemplo a través del cáculo o por otrosmétodos numéricos. En muchos casos, su eficiencia respecto a otrastécnicas numéricas aumenta con la dimensión del problema

(IIMAS-UNAM) Simulación 19 de agosto de 2014 31 / 38

Page 34: Simulacion

Métodos Monte Carlo Introducción

Introducción

Estos métodos tienen una larga historia pero su uso se popularizó despuésde la Segunda Guerra Mundial, con el advenimiento de la computadora.El nombre, popularizado por algunos de los pioneros en el área como S.Ulam, E. Fermi, J. von Neumann y N. Metropolis, es una referencia alfamoso casino en Mónaco. Ulam escribe en su autobiografía que el métodorecibió este nombre a sugerencia de Metropolis en honor a su tio, que eraun jugadorUna de las primeras aplicaciones exitosas del método Monte Carlo en Físicafue el estudio de las propiedades del neutrón por Enrico Fermi en 1930El uso de métodos Monte Carlo requiere de grandes cantidades denúmeros aleatorios,

(IIMAS-UNAM) Simulación 19 de agosto de 2014 32 / 38

Page 35: Simulacion

Métodos Monte Carlo Integración Monte Carlo

Integración Monte Carlo

Supongamos que queremos calcular I, donde

J =

∫ 1

0g(x) dx

Note que si U es una variable aleatoria con distribución uniforme en (0, 1),entonces podemos escribir a J como

J = E [g(U)]

Ahora, si U1, . . . ,Un son variables independientes con distribuciónuniforme en (0, 1), entonces las variables g(U1), . . . , g(Un) sonindependientes e idénticamente distribuidas con media J

(IIMAS-UNAM) Simulación 19 de agosto de 2014 33 / 38

Page 36: Simulacion

Métodos Monte Carlo Integración Monte Carlo

Integración Monte Carlo

Entonces el método Monte Carlo aproxima a J como

J =1n

n∑i=1

g(Ui)

donde U1, . . . ,Un ∼ iidU(0, 1). Por la Ley de los grandes números,tenemos que:

J a.s.→ J

(IIMAS-UNAM) Simulación 19 de agosto de 2014 34 / 38

Page 37: Simulacion

Métodos Monte Carlo Integración Monte Carlo

Integración Monte Carlo

Se desea calcularJ =

∫ b

ag(x) dx

Note que si X ∼ U(a, b), entonces

E [g(X )] =

∫ b

a

g(x)b − a dx

y

(b − a)E [g(X )] =

∫ b

ag(x) dx = J

Por lo tanto,

J = (b − a)1n

n∑i=1

g(Xi)

donde Xi ∼ U(0, 1).(IIMAS-UNAM) Simulación 19 de agosto de 2014 35 / 38

Page 38: Simulacion

Métodos Monte Carlo Integración Monte Carlo

Ejemplo

Deseamos calcular la siguiente integral∫ 1

0

11+ x2 dx

Esta integral se puede calcular analíticamente y vale π.

Aproximemos la integral via Monte Carlo en R

> n1 <- 10> x1 <- runif(n1)> g1 <- 4/(1+x^2)> (int1 <- sum(g1)/n)

(IIMAS-UNAM) Simulación 19 de agosto de 2014 36 / 38

Page 39: Simulacion

Métodos Monte Carlo Integración Monte Carlo

Ejemplo

Deseamos calcular la siguiente integral∫ 1

0

11+ x2 dx

Esta integral se puede calcular analíticamente y vale π.

Aproximemos la integral via Monte Carlo en R

> n1 <- 10> x1 <- runif(n1)> g1 <- 4/(1+x^2)> (int1 <- sum(g1)/n)

(IIMAS-UNAM) Simulación 19 de agosto de 2014 36 / 38

Page 40: Simulacion

Métodos Monte Carlo Integración Monte Carlo

Integración Monte Carlo

En gral., considere el problema de aproximar la integral

J(y) =∫

f (y |x)g(x) dx = Eg [f (y |x)] < +∞

Si g(x) es una densidad, entonces por MC, J(y) es estimada como

J(y) = 1n

n∑i=1

f (y |xi)

donde x1, x2, . . . , xn ∼ iid g(x). El error estándar Monte Carlo estimado deJ(y) esta dado por

1√n

√∑ni=1[f (y |xi)− J(y)]2

n − 1

(IIMAS-UNAM) Simulación 19 de agosto de 2014 37 / 38

Page 41: Simulacion

Métodos Monte Carlo Integración Monte Carlo

Ejercicio 3

1 Calcule, via Monte Carlo, P(X ≤ 3), donde X ∼ N(0, 2)2 Calcule

α =

∫ ∞0

g(x)dx

para cualquier g usando variables de la distribucion uniforme en (0,1)3 Encuentre un valor aproximado para la integral∫ 1

0

√x +√

x dx

Calcule también el valor estimado de la varianza. (El valor exacto deesta integral es 1.045301308)

(IIMAS-UNAM) Simulación 19 de agosto de 2014 38 / 38