Sie sind auf Seite 1von 46

Métodos para geração de

variáveis aleatórias
Cristiano de Carvalho Santos
cristcarvalhosan@gmail.com

Departamento de Estatística,
Universidade Federal de Minas Gerais (UFMG)
Introdução

Por que é necessário saber gerar variáveis aleatórias?


I Gerar bancos de dados para avaliar o desempenho de modelos
propostos;
I Aproximar integrais. Ex.: algoritmo EM Monte Carlo;

I Estatística Bayesiana: Gerar amostras da distribuição a


posteriori quando a mesma não tem expressão fechada
conhecida para sua função de densidade ou função massa de
probabilidade.
Geração de números pseudo-aleatórios

Definição: Os números pseudo-aleatórios constituem uma


sequência de valores que, apesar de serem gerados de forma
determinística, tem a aparência de serem variáveis aleatórias
independentes com distribuição uniforme entre 0 e 1.
Método Congruente Linear Multiplicativo
I Definir um valor inicial x0 (semente);

I Calcule recursivamente os sucessivos valores xn , n ≥ 1, por

xn = axn−1 mod m,

em que a e m são números positivos inteiros;


I A quantidade xn /m é uma aproximação para uma variável
Uniforme(0, 1).

Exemplo: Se x0 = 11, a = 2, m = 16, então

x1 = 2(11) mod 16 = 6

e x1 /m = 6/16 = 0, 375.
Note que, xn assume um valor entre 0, 1, · · · , m − 1, então, após
um número finito de valores gerados, a sequência se repete.

As constantes a e m são escolhidas satisfazendo três critérios:


1. Para uma semente inicial, a sequência resultante tem a
“aparência” de ser uma sequência de uniformes(0, 1)
independentes;

2. O número variáveis que podem ser geradas antes da repetição


inicial é muito grande;

3. Os valores podem ser calculados eficientemente em um


computador digital.

Exemplo: m deve ser escolhido como o maior número primo que


mode ser guardado no computador, em um computador com 32
bits, m = 231 − 1 e a = 75 .
Método de integração Monte Carlo

Uma aplicação de números aleatórios é o cálculo de integrais. Seja


g(x ) uma função e suponha que nos queremos calcular θ tal que
Z 1
θ= g(x )dx .
0

Note que
θ = E [g(U)],
em que U tem distribuição uniforme sobre (0, 1).

I Se U1 , . . . , Uk são iid, segue que g(U1 ), . . . , g(Uk ) são iid com


média θ.
Lei Forte dos Grandes Números
Sejam X1 , X2 , . . . variáveis aleatórias independentes, identica-
mente distribuídas e integráveis, com E [Xn ] = µ. Então

X1 + · · · + Xn
→ µ quase certamente.
n

Pela lei dos grandes números, segue que, com probabilidade 1,


k
X g(U)
→ E [g(U)] = θ.
i=1 k

Então, para aproximar θ basta gerar um grande número de


números aleatórios ui e calcular a média das quantidades g(ui ).
Rb
I Se queremos calcular θ = a g(x )dx :
Fazemos a substituição y = (x − a)/(b − a),
dy = dx /(b − a), e obtemos que
Z 1 Z 1
θ= g(a + [b − a]y )(b − a)dy = h(y )dy ,
0 0

em que h(y ) = (b − a)g(a + [b − a]y ).


R∞
I Similarmente, se queremos calcular θ = 0 g(x )dx :
Fazemos a substituição y = 1/(x + 1),
dy = −dx /(x + 1)2 = −y 2 dx , e obtemos que
Z 1
θ= h(y )dy ,
0
 
1
em que h(y ) = g y
− 1 /y 2 .
Exemplo:
Como podemos calcular aproximadamente a área de um círculo
com raio igual a 1 e centro na origem?
Esta área é dada por
Z Z 1 Z 1
A= dxdy = I{x 2 + y 2 ≤ 1}dxdy ,
x 2 +y 2 ≤1 −1 −1

em que I{x 2 + y 2 ≤ 1} denota uma função indicadora tal que



1 se x 2 + y 2 ≤ 1
I{x 2 + y 2 ≤ 1} =
0 caso contrário.

Note que
Z 1 Z 1
1
A = 4 I{x 2 + y 2 ≤ 1} dxdy
−1 −1 4
" k #
I{xi2 yi2
X
= 4 + ≤ 1}/k ,
i=1

em que xi e yi são amostras iid de Unif(-1, 1), i = 1, . . . , k.


No R:

k = 1000
x <- runif(k,-1,1)
y <- runif(k,-1,1)
A <- 4*sum(x^2+y^2<=1)/k
Transformada inversa - variáveis discretas
Suponha que queremos gerar um valor de uma variável aleatória X
tendo função de massa de probabilidade
X
P(X = xj ) = pj , j = 0, 1, . . . , e pj = 1.
j

Para tal, geramos um valor u de uma variável aleatória


U ∼ Unif (0, 1) e fazemos



 x0 se u < p0

x1 se p0 ≤ u < p0 + p1




.

X= ..

 Pj−1 Pj



 xj se l=0 pl ≤ u < l=0 pl
..



.
Observações:
1. O procedimento pode ser descrito pelo seguinte algoritmo
Gere u de uma distribuição uniforme entre 0 e 1
Se u < p0 faça X = x0 e pare
Se u < p0 + p1 faça X = x1 e pare
Se u < p0 + p1 + p2 faça X = x2 e pare
..
.

2. Se xj , j ≥ 0, estão ordenados tal que x0 < x1 < x2 < · · · então

X = xj se F (xj−1 ) ≤ u < F (Xj ),

em que F (xj ) é a função de distribuição de X no ponto xj .


3. O tempo de algoritmo pode ser otimizado se os possíveis
valores xj de X estiverem em ordem decrescente do pj .

4. Se a variável tiver distribuição Uniforme discreta não é


necessário buscar a qual intervalo o número aleatório pertence
através de condições.
Suponha que P(X = j) = 1/n para j = 1, . . . , n. Neste caso,

j −1 j
X = xj se ≤u< ,
n n
então podemos escrever X = Int(nu) + 1, em que Int(x ) é a
parte inteira de x .
Exemplo

Suponha que queremos simular de uma variável aleatória X tal que

p1 = 0, 2 p2 = 0, 15 p3 = 0, 25 p4 = 0, 4,

em que pj = P(X = j).


Podemos gerar U ∼ Unif (0, 1) e fazer
Alternativa 1
Se U < 0, 20 faça X = 1 e pare
Se U < 0, 35 faça X = 2 e pare
Se U < 0, 60 faça X = 3 e pare
caso contrário faça X = 4
Alternativa 2
Se U < 0, 40 faça X = 4 e pare
Se U < 0, 65 faça X = 3 e pare
Se U < 0, 85 faça X = 1 e pare
caso contrário faça X = 2
Outro exemplo: Permutação

Suponha que queremos gerar uma permutação dos números


1, 2, . . . , n em que todas as n! possíveis ordenações são igualmente
prováveis.

I Uma alternativa é escolher um número aleatoriamente e


colocar na posição n, escolher outro número entre os n − 1
números restantes e colocar na posição n − 1, assim por
diante.
I É conveniente e eficiente colocar os números em um lista
ordenada e escolher aleatoriamente a posição do número ao
invés do próprio número.
Algoritmo

Passo 1: Seja P1 , P2 , . . . , Pn uma permutação de 1, 2, . . . , n;


Passo 2: Faça k = n;
Passo 3: Gere um número aleatório I de uma uniforme discreta
em 1, . . . , k;
Passo 4: Troque os valores de PI e Pk ;
Passo 5: Faça k = k − 1 e se k > 1 vá para o Passo 3.
Passo 6: A nova ordenação P1 , P2 , . . . , Pn é a ordenação
desejada.
Observações:
I Este algoritmo pode ser utilizado para gerar um subconjunto
de tamanho r do conjunto original.
I Para ter maior eficiência podemos sempre considerar r ≤ n/2,
pois se isso não ocorrer podemos escolher os elementos que
não pertencem ao subconjunto.
Mais um exemplo: Calculando médias

Suponha que desejamos aproximar ā = ni=1 a(i)


P
n
, em que n é
grande e os valores a(i), i = 1, . . . , n, são complicados e difíceis de
calcular.

Note que se X é uma variável aleatória uniforme discreta nos


inteiros 1, . . . , n, então a variável aleatória a(X ) tem média dada
por
n n
X X a(i)
E [a(X )] = a(i)P(X = i) = = ā.
i=1 i=1 n

Então, pela Lei Forte dos Grandes Números segue que, quando k é
grande, temos
k
X a(Xi )
ā ≈ .
i=1 k
Sempre cabe mais um exemplo: Geométrica
A variável aleatória X é dito ter distribuição Geométrica com
parâmetro p se

P(X = i) = pq i−1 , i ≥ 1, em que q = 1 − p.

Note que
j−1
X
P(X ≤ j − 1) = P(X = i) = 1 − P(X > j − 1)
i=1
= 1 − q j−1 , j ≥ 1.

Geramos X por gerar U ∼ Unif (0, 1) e fazer X igual ao j que

1 − q j−1 ≤ U < 1 − q j .
Equivalentemente,
q j < 1 − U ≤ q j−1 .
Ou ainda,

X = min{j : q j < 1 − U}
( )
log(1 − U)
= min j : j >
log(q)
!
log(1 − U)
= Int +1
log(q)
!
log(U)
= Int +1
log(q)
Tranformação inversa - variáveis contínuas

Proposição

Seja U uma variável aleatória Uniforme(0, 1). Para qualquer


função de distribuição contínua F a variável aleatória X defi-
nida por
X = F −1 (U)
tem distribuição F .

Demonstração no quadro! (Página 67 do Ross)


Exemplo

Como amostrar de uma distribuição Normal com parâmetros µ e


σ 2 truncada no intervalo (a, b)?

f4 = function(n, mu, sigma, a, b){


Us = runif(n)
amostra <- qnorm(pnorm(a, mu, sigma)+
(pnorm(b, mu, sigma)-pnorm(a, mu, sigma))*Us,
mu, sigma)
}
Método da transformação
Suponha que desejamos gerar uma amostra aleatória de tamanho n
da distribuição Normal Assimétrica, com parâmetros µ, σ 2 e λ,
cuja densidade é dada por
2 x −µ x −µ
    
f (x ) = φ Φ λ , −∞ < x < ∞.
σ σ σ
0.6

0.6

● ●


Densidade

Densidade



0.4

0.4


0.2

0.2



● ●


● ●
● ● ●
0.0


0.0 ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

−4 −2 0 2 4 −4 −2 0 2 4

z z

Figura: Densidade da distribuição Skew -Normal padrão com diferentes


valores para o parâmetro λ.
A representação estocástica de Henze para a distribuição SN
estabelece que, se X ∼ SN(µ, σ 2 , λ) então
h i
d
X = µ + σ δ|V | + (1 − δ 2 )1/2 W ,

em que δ = λ(1 + λ2 )−1/2 , V e W são variáveis aleatórias i.i.d com


distribuição Normal padrão.

Algoritmo:
Gerar amostras v1 , . . . , vn e w1 , . . . , wn da distribuição normal
padrão;
h i
Calcular xi = µ + σ δ|vi | + (1 − δ 2 )1/2 wi , para i = 1, . . . , n.
Algoritmo da aceitação-rejeição

I Objetivo: Gerar uma amostra de uma distribuição f (x ) que


pode ser calculada (no pior caso sem a constante de
proporcionalidade).
I Estratégia: é amostrar candidatos de uma distribuição mais
simples e então corrigir a probabilidade de amostragem através
da rejeição de alguns candidatos.

Seja g uma função de densidade da qual sabemos amostrar (e fácil


de calcular g(x )) e e(x ) um envelope que tem a propriedade

e(x ) = g(x )/α ≥ f (x )

∀x em que f (x ) > 0 para uma dada constante α ≤ 1.


Algoritmo
Passo 1: Gere Y ∼ g.

Passo 2: Gere U ∼ Unif (0, 1).

Passo 3: Rejeite Y se U > f (Y )/e(Y ) e retorne ao passo 1.

Passo 4: Caso contrário, faça X = Y e considere X como um


elemento da amostra aleatória da distribuição alvo.
Retorne ao passo um até ter a amostra do tamanho
desejado.

Este algoritmo fornece uma amostra iid da densidade alvo f e


nenhuma aproximação é envolvida.
Demonstração no quadro! (Página 147 do Givens)
Figura: Ilustração do algoritmo de rejeição
Note que
I Em cada iteração, a probabilidade de valor gerado ser aceito é
α;

I O número de interações do algoritmo necessários para obter


um valor de X é uma variável Geométrica com média 1/α;
(Fazer conta para conferir)

I α pode ser visto como uma medida de eficiência do algoritmo;


I Suponha que f é conhecida sem a constante de
proporcionalidade c. Isto é, sabemos calcular apenas
q(x ) = f (x )/c, em que c é desconhecido.
Então, um valor candidato y deve ser rejeitado quando

U > q(y )/e(y ).

I Após escolher uma g, podemos otimizar a eficiência do


algoritmo encontrando o menor α tal que 1/α ≥ f (x )/g(x ).
Isto é equivalente a maximizar 1/α = max {f (x )/g(x )}.
Exemplo: Suponha que desejamos simular de uma distribuição
Beta(α = 2, β = 2) através do método de rejeição. Em média,
quantas iterações serão necessárias para gerar 1000 valores por este
método?
A densidade da Beta(2, 2) é dada por

f (x ) = 6x (1 − x ), 0 < x < 1.

Se escolhemos g(x ) como a distribuição Uniforme(0, 1), então


f (x )/g(x ) ≤ 6, escolhemos α = 1/6. Um candidato y gerado de
g(y ) é aceito se

f (y ) 6x (1 − x )
U≤ = = x (1 − x ).
g(y )/α 6

Em média, n ∗ α = 6000 iterações são necessárias!


Uma escolha mais eficiente para α seria maximizar
f (x )
g(x )
= 6x (1 − x ) e desta forma obtemos α = 2/3. Neste caso, um

candidato y gerado de g(y ) é aceito se

f (y ) 6x (1 − x )
U≤ = = 4x (1 − x ).
g(y )/α 3/2

Em média, n ∗ α = 1500 iterações são necessárias!


Algoritmo no R

n <- 1000
k <- 0 # contador de valores aceitos
j <- 0 # iterações
y <- numeric(n)
while (k < n) {
u <- runif(1)
j<-j+1
x <- runif(1) #variável aleatória gerada de g
if (x * (1-x) > u) {
# Aceitou
k<-k+1
y[k] <- x
}
}
Reamostragem Ponderada

O algoritmo sampling importance resampling (SIR) simula


realizações aproximadas de alguma distribuição alvo.
Informalmente temos que:
I Amostras são geradas de uma função de amostragem por
importância g.

I Cada ponto na amostra é ponderado para corrigir a


probabilidade de amostragem de tal forma que a amostra
ponderada seja relacionada da densidade alvo f .
Para a densidade alvo f , os pesos usados para corrigir as
probabilidades de amostragem são chamados pesos de importância
padronizados e são definidos por

f (x i )/g(x i )
ω(x i ) = Pm ,
i=1 f (x i )/g(x i )

para uma coleção de valores x 1 , . . . , x m gerados de g.

Podemos ver este método como uma aproximação de f por uma


distribuição discreta tendo massa ω(x i ) em cada ponto observado
x i para i = 1, . . . , m.
Algoritmo
I Gere candidatos Y 1 , . . . , Y m iid de g.

I Calcule os pesos de importância padronizados


ω(Y 1 ), . . . , ω(Y m ).

I Reamostre, com reposição, X 1 , . . . , X n de Y 1 , . . . , Y m com


probabilidades ω(Y 1 ), . . . , ω(Y m ).

A variável aleatória X amostrada com o algoritmo SIR tem


distribuição que converge para f quando m → ∞.
Considerações:
I n/m → 0 para convergência em distribuição da amostra e,
para n fixo, a convergência ocorre quando m → ∞.
I A tolerância máxima para a razão n/m depende da qualidade
da densidade g. Algumas vezes n/m ≤ 1/10 é suficiente para
resultar em uma reamostra que não contenha muitas
replicações de valores.
I O suporte de g deve incluir todo o suporte de f e g deve ter
caudas mais pesadas que f , ou de forma mais geral, g ser
escolhida garantindo que f (x)/g(x) nunca cresça demais.
I Se g(x) está próximo de zero em um local onde f (x) é
positivo, então um valor gerado desta região acontecerá
muito raramente, mas quando isso acontecer receberá um
enorme peso.
Exemplo

A variável aleatória Y um uma distribuição Slash se Y = X /U em


que X ∼ N(0, 1) e U ∼ Unif (0, 1) são independentes. A função de
densidade da Slah é
{−y 2 /2}

 1−exp √ , y 6= 0
y 2 2π
f (y ) = 1
 √ , y = 0.
2 2π

Esta densidade tem caudas muito pesadas.

Vamos considerar
I Usar SIR com proposta Slash para gerar da Normal padrão.
I Usar SIR com proposta Normal padrão para gerar da Slash.
Misturas
Uma variável aleatória X é uma mistura discreta de distribuições se
X
FX (x ) = θi FXi (x )
i

para alguma sequência de variáveis aleatórias X1 , X2 , . . . e θi é tal


P
que i θi = 1. As constantes θi são chamadas pesos das misturas.

Uma variável aleatória X é uma mistura contínua de distribuições


se a distribuição de X é
Z ∞
FX (x ) = FX |Y =y fY (y )dy
−∞

para uma família de distribuições FX |Y =y indexada


R∞
por números
reais y e uma função de pesos fY tal que −∞ fY (y )dy = 1.
Exemplo

Seja a mistura dada por


5
X
FX (x ) = θi FXj (x ),
j=1

em que Xj ∼ Gama(3, λj = 1/j) são independentes e θj = j/15,


j = 1, . . . , 5.

Para simular um valor fazemos:


1. Geramos um inteiro k ∈ {1, 2, 3, 4, 5}, em que P(k) = θk ,
para k = 1, . . . , 5.
2. Gere um valor aleatório de Gama(3, λk ).
Outro exemplo

A distribuição binomial negativa é uma mistura de distribuições


Poisson(λ), em que λ tem distribuição Gama. Se

X |λ ∼ Poisson(λ)
λ ∼ Gama(r , β)

então, X tem distribuição binomial negativa com parâmetros r e


p = β/(1 + β).

Para gerar uma amostra de X basta fazer:

lambda <- rgamma(n, r, beta)


x <- rpois(n, lambda)

Das könnte Ihnen auch gefallen