aula 5 - dcc.ufrj.brsadoc/ad20142/adaula05.pdf · como gerar amostras de uma distribuição...
TRANSCRIPT
1
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 pseudo-
aleatórios e com a inversa da função . Precisaremos, para isso, de estudar as funções de variáveis
aleatórias.
2
Funções de Variáveis Aleatórias
Assuma que é uma variável aleatória com e conhecidos.
Queremos obter a pdf e a CDF de , tal que , onde é uma função qualquer.
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.
(
) ( )
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) ⇒
{ √ }
{ √ } (√ )
(√ )
(√ ) (
⁄ )
√ (√ )
I
II
III
3
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 , .
4
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 , analiticamente,
graficamente ou algoritmicamente.
5
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.
7
Obtenha amostra de U(0,1) = RAND()
Para , determine inteiro, tal que
(
)
⌈
⌉ ⌈
⌉
Atenção: O valor de q varia entre 0 e 1, de forma que é negativo.
Dividir por força a inversão do sinal da inequação!
é também uma uniforme!
Retorne
8
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!
9
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!)
10
Interessante uso da CDF:
∫ ( )
∫
[ ] ∫ ( )
∫
Ver prova na página 49 da apostila, seção 13.1.
_________
1
2
1
2
11
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: Gerador Congruencial
Exemplo: c=0, b=9, Z0 = 1
O gerador depende da escolha dos parâmetros. Para m primo e escolha adequada de b produz período de (m-1). IBM /360 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 no. aleatório entre 0 e 1 faz-se
, para período = m-1.
1 1 9 9 2 9 81 17 3 17 153 25 4 25 225 33 5 33 297 41 6 41 369 49 7 49 441 57 8 57 513 1
9 1 9 9
Período de oito!
Você acha que estes números parecem ser aleatórios? Sempre crescentes. Não parece.
12
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