Como gerar amostras de uma distribuição qualquer a partir de sua

Propaganda
Aula 5
Como gerar amostras de uma distribuição qualquer a partir de
sua CDF e de um gerador de números aleatórios?
Processo de chegada:
o Chegadas em grupo ocorrem segundo um processo
Poisson com taxa .
O tamanho do grupo é uma variável aleatória discreta
Assuma que
possa ser estimada para
.
o Se uma simulação se inicia no instante ZERO e queremos
programar a próxima chegada do grupo, qual o tamanho
do grupo neste instante?
o Quando uma determinada pessoa da fila é colocada em
serviço, sabendo que o serviço é dado por uma variável
aleatória
com
conhecida (gráfica ou
analiticamente), qual o serviço a ser alocado a essa
pessoa?
Veremos que amostra de uma variável aleatória
poderá
sempre ser gerada com uso de um gerador de números pseudoaleatórios e com a inversa da função
.
Precisaremos, para isso, de estudar as funções de variáveis
aleatórias.
1
Funções de Variáveis Aleatórias
Assuma que
é uma variável aleatória com
e
Queremos obter a pdf e a CDF de , tal que
função qualquer.
conhecidos.
, onde
é uma
O que isso quer dizer?
Se
é uma amostra de X, então
é uma amostra de .
Além disso,
e também
Como obter
?
.
Resposta: 3 passos.
I
II
(
III
)
(
)
Observe que
[ ]
∫
[
∫
]
que é o Teorema Fundamental da Esperança.
⇒ Os 3 passos permitem relacionar as pdf’s de
e
.
Exemplos (outros existem na apostila):
a)
⇒
{
{
(√ )
√ }
(√ ) (
√ }
(√ )
⁄
)
√
(√ )
2
b)
Lembrar que
é uma função
não decrescente e que tende a 1.
Então,
.
(
)
Ou seja, Y é uma variável aleatória com
Distribuição Uniforme entre 0 e 1.
Y é a uniforme unitária, representada por
.
Sabemos que
e que
e
.
No caso acima,
e
e
.
Como
pode ser obtido com um gerador de números aleatórios entre 0
e 1,
, então, dado ,
.
3
Graficamente,
Como obter uma amostra de X qualquer?
 Obtenha
amostra da uniforme unitária U(0,1) com uso de
um gerador pseudo-aleatório [qualquer linguagem de
programação fornece uma chamada de função – RAND() ou
RANDOM() – que retorna um valor aleatório entre 0 e 1
(pseudo-aleatório, como veremos mais adiante)].
 Faça a inversa, calculando
graficamente ou algoritmicamente.
,
analiticamente,
4
Exemplo: Amostra da exponencial
Então, dado
amostra de U(0,1):
Observação:
Na prática,
é também um valor aleatório, de modo que podemos
calcular a amostra de X com Distribuição Exponencial com taxa como:
economizando uma operação de subtração.
5
Exemplo: Amostra de uma geométrica
Observação:
∑
∑
∑
∑
⏟
Recordando Progressão Geométrica…
6
 Obtenha
 Para
amostra de U(0,1) = RAND()
, determine
inteiro, tal que
(
⌈
)
⌉
Atenção: O valor de q varia entre 0 e 1, de forma que
Dividir por
força a inversão do sinal da inequação!
⌈
⌉
é negativo.
é também uma uniforme!
 Retorne
7
Os procedimentos vistos se aplicam a qualquer variável
aleatória, seja ela discreta, contínua ou mista.
Exemplo:
Exponencial Truncada
Muito simples gerar a amostra de uma v.a. qualquer!
Fazer a inversa é a única dificuldade!
8
Exponencial truncada
Algoritmo
U = RAND();
Se U
, retorna x=a;
Se U
, retorna x=b;
Caso contrário, retorna x = -(ln(1-U))/ . (neste caso não pode eliminar a
subtração!)
9
Interessante uso da CDF:
1
1
∫ (
2
2
∫
[ ]
)
∫ (
)
∫
Ver prova na página 49 da apostila, seção 13.1.
_________
10
Geração de números pseudo-aleatórios
Referência: ver apostila (capítulo 16), capítulo 3 Knuth (69), etc.
Como gerar uma seqüência de números que se repetem num
determinado ciclo – daí a denominação de pseudo – e que seguem uma
aparente aleatoriedade?
Método Básico:
Exemplo:
Período de
oito!
Gerador Congruencial
c=0, b=9, Z0 = 1
1
2
3
4
5
6
7
8
9
1
9
17
25
33
41
49
57
1
9
81
153
225
297
369
441
513
9
9
17
25
33
41
49
57
1
9
Você acha que estes
números parecem ser
aleatórios?
Sempre crescentes.
Não parece.
O gerador depende da escolha dos parâmetros.
Para m primo e escolha adequada de b produz período de (m-1).
IBM 1360 palavra de 32 bits, 1 bit de sinal
(maior inteiro primo)
Pacote SIMSCRIPTH II (pacote estatístico)
Trabalho dos estatísticos e não nosso!
Para gerar um número aleatório entre 0 e 1 faz-se
o período de m-1.
, se temos
11
Lembrar que a seqüência pseudo-aleatória é totalmente
determinística. Com precisão estendida em máquinas de 32 ou 64 bits o
período é enorme.
S0
semente inicial
S0
repete no final do período
SRAND(S0)
função para fixar a semente inicial
RAND() retorna próximo número (dependendo da linguagem pode
ser no intervalo 0 e 1 ou não, sendo necessário dividir pelo módulo
utilizado. Veja a definição da função geradora).
Fixar a semente serve para garantir que estamos percorrendo uma
parte determinada da seqüência pseudo-aleatória.
Se quiser percorrer seqüências distintas uso sementes bastante
afastadas, que garantem independência de comportamento estatístico.
S0
S1
S0
12
Download