Você está na página 1de 58

Introduo Simulao Estocstica usando R

Hlio Lopes

Departamento de Informtica PUC-Rio


lopes@inf.puc-rio.br

Parte III - Simulao Estocstica


Simulao Estocstica
Simulao Estocstica

I A simulao estocstica visa imitar ou replicar o


comportamento de sistemas complexos explorando a sua
aleatoriedade para obter cenrios das possveis sadas desses
sistemas.
I Devido a aleatoriedade envolvida, os mtodos de simulao so
tambm conhecidos como mtodos de Monte Carlo.
I O nome Monte Carlo uma referncia ao famoso cassino em
Mnaco e se tornou popular pelos pesquisadores Stanislaw
Ulam, Enrico Fermi, John von Neumann, e Nicholas Metropolis,
entre outros.
I A aleatoriedade e a repetio so as principais caractersticas
dos mtodos de Monte Carlo, que so anlogas as atividades
praticadas num cassino.
Mtodos de Monte Carlo

Os mtodos de Monte Carlo so teis para estudar:

I Sistemas no determinsticos.
I Sistemas determinsticos que so muito complicados para se
modelar analiticamente.
I Sistemas determinsticos com alta dimensionalidade que fazem
com que os mtodos de discretizao do espao se tornem
impraticveis computacionalmente (ex., Integrao por Monte
Carlo).
Mtodos de Monte Carlo

Os dois principais requisitos para os mtodos de simulao de


Monte Carlo so:

I Possuir o conhecimento das distribuio de probabilidade das


variveis de entrada do sistema.
I Possuir um gerador de nmeros aleatrios para gerar cenrios
das variveis de entrada do sistema.
Mtodos de Monte Carlo

I Simulando um grande nmero de cenrios, a distribuio de


probabilidade de todas as sadas da simulao podem ser
aproximados com preciso.
I Essa preciso aumenta medida que o nmero de cenrios
aumentam.
Aplicaes

I Aturia: Cenrios de vida de um indivduo


I Finanas: Cenrios econmicos e financeiros
I Avaliao de projetos: Opes reais
I Geologia: Cenrios para caracterizao de reservatrios
I Computao grfica e processamento de imagens: rendering e
remoo de rudos
I Jogos
I Aprendizado de mquina
Alatoriedade

I A aleatoriedade algo complicado de se definir, mas


geralmente ela associada a algo que difcil de se prever.
I Uma seqncia de nmeros aleatria quando a sua menor
representao ela mesma.
I Processos fsicos tais como jogar uma moeda para cima ou
jogar um dado podem ser considerados sistemas determinsticos
pelo fato de se conhecer as equaes que governam o seu
movimento e as condies iniciais que os geram.
I Porm o comportamento desses processos fsicos catico, pois
so extremamente sensveis s condies iniciais praticadas
numa jogada.
I Mesmo num caso determinstico, sistemas altamente
complicados so geralmente tratados por mtodos de simulao
estocstica.
Gerao de nmeros aleatrios

I A gerao de nmeros aleatrios o alicerce de qualquer


sistema de simulao estocstica.
I Porm, nos computadores digitais as conhecidas funes que
geram nmeros aleatrios no so efetivamente aleatrias.
I Nmeros realmente aleatrios so gerados por um processo
fsico. Para isso, so construdos dispositivos fsicos que
analisam fenmenos microscpicos ou qnticos e atravs de
um conversor digital conseguem gerar um nmero aleatrio.
I Na prtica o que se usa em simulao estocstica so os
geradores de nmeros pseudo-aleatrios.
Gerao de nmeros pseudo-aleatrios

I Esses geradores produzem uma sequncia determinstica de


nmeros inteiros ou em ponto flutuante na preciso do
computador, que imita uma sequncia de variveis aleatorias
independentes e uniformemente distribudas entre 0 e 1.
I A essncia de uma sequncia de nmeros pseudo-aleatrios a
sua imprevisibilidade, no sentido de que ningum capaz de,
ao v-la, dizer qual a regra determinstica que a produz e
conseguir prever qual o prximo nmero da sequncia.
Gerao de nmeros pseudo-aleatrios

As propriedades desejveis de um bom gerador de nmeros


pseudo-aleatrios so:

I Possuir um padro aleatrio : ele deve passar em testes


estatsticos de aleatoriedade;
I Possuir um perodo longo;
I Ser eficiente : ele deve ser executado rapidamente e requerer
um baixo armazenamento;
I Ser de fcil reproduo : a partir de determinadas condies
iniciais ele deve produzir sempre a mesma seqncia;
I Ser portvel : a partir de determinadas condies iniciais a
seqncia gerada deve ser a mesma em qualquer computador.
Gerao de nmeros pseudo-aleatrios

I Linear Congruential Generator (LCG) um gerador de


nmero pseudo-aleatrio muito famoso.
I Ele gera uma seqencia de nmeros inteiros atravs da seguinte
frmula de recorrncia:

xn+1 = (a xn + c)modM,

onde M, a e c so inteiros dados.


I A condio inicial x0 chamada semente do gerador.
I O inteiro M aproximadamente o maior inteiro representvel
na mquina.
I A qualidade de tal gerador depende da escolha de a e c, e em
qualquer caso o perodo no menor do que M.
Gerao de nmeros pseudo-aleatrios

M = 53 # modulus
a = 20 # multiplier
c = 0 # shift
s = 21 # seed
m = 60 # length of run (counting seed as #1)
r = numeric(m) # initialize vector for random integers
r[1] = s # set seed
for (i in 1:(m-1)) r[i+1] = (a * r[i] + c) %% M
# generates random integers
r # list of random integers generated

## [1] 21 49 26 43 12 28 30 17 22 16 2 40 5 47 39 38 18
## [24] 7 34 44 32 4 27 10 41 25 23 36 31 37 51 13 48 6
## [47] 20 29 50 46 19 9 21 49 26 43 12 28 30 17
Gerao de nmeros pseudo-aleatrios

# Initialize
a = 1093; c = 18257; M = 86436; s = 7
m = 1000; r = numeric(m); r[1] = s
# Generate
for (i in 1:(m-1)) {r[i+1] = (a*r[i] + c) %% M}
u = (r + 1/2)/M # values fit in (0,1)
Gerao de nmeros pseudo-aleatrios

Histogram of u

1.0
100

0.8
80

0.6
Frequency

60

u2

0.4
40

0.2
20

0.0
0

0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0

u u1
Gerao de nmeros pseudo-aleatrios

# Initialize
a = 65539; c = 0; M = 2^31; s = 10
m = 20000; r = numeric(m); r[1] = s
# Generate
for (i in 1:(m-1)) {r[i+1] = (a*r[i] + c) %% M}
u = (r - 1/2)/(M - 1)
u1 = u[1:(m-2)]; u2 = u[2:(m-1)]; u3 = u[3:m]
Gerao de nmeros pseudo-aleatrios
0.10

1.0
0.08

0.8
0.06

u2[u3 < 0.01]

0.6
u2

0.04

0.4
0.02

0.2
0.00

0.0
0.00 0.02 0.04 0.06 0.08 0.10 0.0 0.2 0.4 0.6 0.8 1.0

u1 u1[u3 < 0.01]


Linear Congruential Generator

Se c = 0 e M primo, o perodo mximo da seqncia para


qualquer condio inicial x0 se:

I aM1 1 mltiplo de M;
I aj 1 mltiplo de M para j = 1, 2, . . . , m 2.
Linear Congruential Generator

I Na realidade, em simulao estocstica, nos interessa ter um


gerador que pseudo-aleatoriamente gere uma uniforme entre 0
e 1.
I Para isso podemos criar uma outra seqncia a partir da
seqencia gerada pelo LCG, por exemplo:

Ui = (xi 1/2)/(M 1)
Funes de distribuio: Exemplo

M a Referncia

2147483647 16807 Park & Miller


2147483647 39373 LEcuyer
2147483647 742938285 Fishman & Moore
2147483647 950706376 Fishman & Moore
2147483647 1226874159 Fishman & Moore
2147483399 40692 LEcuyer
2147483563 40014 LEcuyer
Mersenne Twister

I Mersenne Twister um gerador de nmeros pseudo-aleatrio


desenvolvido em 1997 por Makoto Matsumoto e Takuji
Nishimura que baseado em uma recurso linear.
I Ele fornece uma gerao rpida com alta qualidade de
aleatoriedade. Ele tem perodo de 219937 1.
I Ele est presente nas linguagens Python, R, MATLAB, entre
outras.
Mtodo da Inverso

Teorema: Sejam F : R [0, 1] a funo de distribuio acumulada


de uma varivel aleatria X e F a sua inversa generalizada, dada
por F (t) = inf {x : t = F (x )}. Se U uma varivel aleatria que
segue uma lei uniforme no intervalo (0, 1) ento F a funo de
distribuio acumulada da varivel aleatria resultante da
transformao V = F (U).

P(X x ) = P(F (U) x ) = P(U F (x )) = F (x ).


Mtodo da Inverso

Lema: Quando a varivel aleatria de interesse contnua vale que


F (t) = F 1 (t) para todo t em R.
Distribuio de Bernoulli

I Uma jogada de Bernoulli um experimento aleatrio com duas


sadas: sucesso e fracasso.
I Dizemos que uma v.a. X obedece a lei de Bernouli quando o
sucesso, X = 1, tem probabilidade p, e o fracasso, X = 0,
tem probabilidade 1 p.
I E [X ] = 0 (1 p) + 1 (p) = p.
I Var [X ] = E [X 2 ](E [X ])2 = 02 (1p)+12 (p)p 2 = p(1p)
Distribuio de Bernoulli

rBernoulli<-function(nc,p)
{
X<-c(1:nc)
p1<-(1-p)
for(i in 1:nc)
{
if (runif(1)<p1)
X[i] <- 0
else
X[i] <- 1
}
X
}
Distribuio de Bernoulli
X <- rBernoulli(1000,0.5)
table(X)

## X
## 0 1
## 500 500

mean(X)

## [1] 0.5

var(X)

## [1] 0.2503
Distribuio Binomial

I Uma v.a. Binomial(n, p) representa o nmero de sucessos


obtidos em n jogadas de Bernoulli com probabilidade p de
sucesso.
!n " k nk , com k {0, . . . , n}.
I P(X = k) = k p (1 p)
I E [X ] = n p.
I Var [X ] = n p (1 p)
Distribuio Binomial

rBinomial1<-function(nc,n,p)
{
X<-c(1:nc)
for (i in 1:nc)
{
X[i]<-sum(rBernoulli(n,p))
}
X
}
Distribuio Binomial
X <- rBinomial1(1000,4,0.5)
table(X)

## X
## 0 1 2 3 4
## 69 232 394 246 59

mean(X)

## [1] 1.994

var(X)

## [1] 0.991
Distribuio Binomial

A B
n
P(X = k + 1) = p k+1 (1 p)nk1 =
k +1

n! p p k (1 p)(nk)
=
(k + 1)!(n k 1)! (1 p)

(n k) p
P(X = k).
(k + 1) (1 p)
Distribuio Binomial
rBinomial<-function(nc,n,p){
P <- (1-p)^n
F<-c(1:(n+1))
F[1]<-P
for (i in 1:n){
P <- P * (n-i+1) * p /((1-p) * i)
F[i+1] <- F[i] + P
}
X<-c(1:nc)
for (i in 1:nc){
U <- runif(1)
for (j in 1:(n+1))
if (U < F[j]) {
X[i]<-j-1
break
}}
X
}
Distribuio Binomial
X <- rBinomial(1000,4,0.5)
table(X)

## X
## 0 1 2 3 4
## 68 248 405 210 69

mean(X)

## [1] 1.964

var(X)

## [1] 1.006
Distribuio Geomtrica

I Uma v.a. Geomtrica(p) conta o nmero de jogadas de


Bernoulli necessrias at se obter o primeiro sucesso. Cada
jogada de Bernoulli tem probabilidade p de sucesso.
I P(X = k) = p (1 p)k1 , com k {0, 1, 2, . . .}.
I E [X ] = p1 .
I Var [X ] = (1p)
p2
.
Distribuio Geomtrica

rGeometric1<-function(nc,p)
{
X<-c(1:nc)
for (i in 1:nc)
{
k <- 0
while(rBernoulli(1,p)!=1)
k <- k+1
X[i]<-k+1
}
X
}
Distribuio Geomtrica
X <- rGeometric1(1000,0.5)
table(X)

## X
## 1 2 3 4 5 6 7 8 9 10 11
## 510 259 125 52 29 14 5 2 1 2 1

mean(X)

## [1] 1.931

var(X)

## [1] 1.78
Distribuio Geomtrica

P(X = k + 1) = p (1 p)k = (1 p)P(X = k)


Distribuio Geomtrica
rGeometric<-function(nc,p){
X<-c(1:nc)
for (i in 1:nc) {
U <- runif(1)
P <- p
F <- P
k <- 1
while(U >= F) {
P <- (1-p) * P
F <- F + P
k <- k+1
}
X[i] <- k
}
X
}
Distribuio Geomtrica
X <- rGeometric(1000,0.5)
table(X)

## X
## 1 2 3 4 5 6 7 8 9 10 12 14
## 498 224 129 66 40 25 11 2 2 1 1 1

mean(X)

## [1] 2.094

var(X)

## [1] 2.398
Distribuio de Poisson

I Uma v.a. Poisson(), R+ , representa a probabilidade de


um dado nmero de eventos que ocorrem em um intervalo fixo
de tempo ou espao.
I P(X = k) = k! e

, com k {0, 1, 2, . . .}.
I E [X ] = .
I Var [X ] = .
Distribuio de Poisson
rPoisson<-function(nc,lambda){
X<-c(1:nc)
for (i in 1:nc) {
U <- runif(1)
P <- exp(-lambda)
F <- P
k <- 0
while(U >= F) {
P <- lambda * P / (k+1)
F <- F + P
k <- k+1
}
X[i] <- k
}
X
}
Distribuio de Poisson
X <- rPoisson(1000,10)
table(X)

## X
## 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## 2 8 15 40 56 92 121 129 132 122 85 64 56 30
## 20 21
## 2 2

mean(X)

## [1] 9.963

var(X)

## [1] 9.553
Exerccios

I Desenvolva dois algoritmos para a simulao das seguintes v.a.:


I Binomial negativa
I Hipergeomtrica
Distribuio Exponencial

I A funo densidade de probabilidade (pdf) de uma v.a.


exponencial com taxa > 0 dada por:

f (x ) = e x , com x [0, ).

I A sua funo distribuio acumulada dada por:

F (x ) = 1 e x , com x [0, ).
Distribuio Exponencial

I Para utilizarmos o mtodo da inversa temos que resolver


X = F 1 (U).
I Mas,

X = F 1 (U) = F (X ) = U = 1 e x = U =

1
e x = 1 U = X = log (1 U).

Distribuio Exponencial

rExponential<-function(nc,lambda)
{
X<--log(runif(nc))/lambda
}

X <- rExponential(1000,0.1)
mean(X)

## [1] 10.13

var(X)

## [1] 93.2
Distribuio Exponencial
hist(X)

Histogram of X
400
300
Frequency

200
100
0

0 10 20 30 40 50 60 70

X
Exerccios

I Desenvolva um algoritmo para a simulao das seguintes v.a.:


I Weibull
I Pareto
I Cauchy
Mtodo da Rejeio

I O mtodo prope gerar amostras de uma varivel aleatria X ,


com densidade p, atravs de amostras de uma outra varivel
aleatria Y com densidade de probabilidade h. Vale observar
que as duas variveis X e Y devem ter o mesmo suporte k.
Mtodo da Rejeio

I A funo de densidade h chamada de densidade proposta e


definida pelo usurio do mtodo. Cada amostra y de Y
aceita ou rejeitada como uma amostra de X de acordo com um
critrio definido pelo mtodo, tal que no fim do processo de
gerao obtm-se uma sequncia de amostras x que respeitam
a distribuio p.
Mtodo da Rejeio

I Sejam p e h as funes de densidades de X e Y ,


respectivamente. E, seja c uma constante real tal que:

p(x ) c h(x ), para todo x k.


Mtodo da Rejeio

I Uma amostra x de X pode ser gerada atravs dos seguintes


passos:
I Passo 1: gere uma amostra y de Y com densidade h;
I Passo 2: gere uma amostra u de U com densidade
Uniforme(0,1);
I Passo 3: se u <= p(y )/(c h(y )), ento retorne x como sendo
o valor de y , seno volte ao Passo 1.
Mtodo da Rejeio

p(Y )
p(Y ) P(Y x , U ch(Y ))
P(Y x |U )= =
c h(Y ) p(Y
P(U ch(Y ) )
)

p(y )
sx s
0 1 h(y )dudy
ch(y )

s p(y ) =
ch(y ) h(y )dy

sx p(y )
ch(y ) h(y )dy
1 s =
c p(x )dx

1 sx x
c p(y )dy
1 = p(y )dy = P(X x ).
c
Mtodo da Rejeio

Teorema: O nmero de iteraes que so necessrias para a


convegncia do mtodo de rejeio uma v.a. geomtrica com
mdia c.
Mtodo da Rejeio

Suponha que deseja-se gerar amostras de uma varivel aleatria X


com funo densidade de probabilidade Normal(0,1). (Sugesto:
use Y como Exponencial(1), mas cuidado com o suporte).

2
p(x ) = exp(x 2 /2)
2

h(x ) = exp(x ), com x > 0.


Mtodo Polar

Sejam X e Y duas variveis aleatrias Normais(0,1) e


indenpendentes. Considere ainda que R e sejam as coordenadas
polares do vetor (X , Y ): R 2 = X 2 + Y 2 e tan() = Y /X ,
Como X e Y so independentes a sua densidade conjunta o
produto de suas densidades individuais, assim:

1 1
f (x , y ) = exp(x 2 /2) exp(y 2 /2) =
sqrt2 2

1
f (x , y ) = exp((x 2 + y 2 )/2).
(2
Mtodo Polar

Para determinar a densidade conjunta de R 2 e , f (R 2 , ), devemos


fazer a mudana de variveis: d = R 2 = x 2 + y 2 e = arctan(y /x ).
Como a Jacobiana da transformao - o determinante da matriz
composta pelas derivadas de d e em relao a x e y igual a 2,
segue:

1 1
f (d, ) = exp(d/2), com d > 0 e 0 < < 2.
2 2
Observe que essa densidade o produto de uma densidade
Exponencial(1/2) com uma Uniforme(0,2pi).
Mtodo Polar

I Para gerar um par de v.a. Normais(0,1) independentes entre si,


X e Y , siga o seguinte algoritmo:
I Passo 1: Gere independentemente duas uniformes: U1 e U2 ;
I Passo 2: R 2 = 2 log(U1 ) e = 2 U2 ;
I Passo 3: Faa X = R cos() e Y = R sin().
Bibliografia

I S. Ross, Simulation, Academic Press, (2006)


I E. Suess, B. E. Trumbo, Introduction to Probability Simulation
and Gibbs Sampling with R, Springer (2010)
I C. Robert, G. Casella, Introducing Monte Carlo Methods with
R, Springer (2010)

Você também pode gostar