Geração de números pseudoaleatórios
ESTAT0090 – Estatística Computacional
Prof. Dr. Sadraque E. F. Lucena
sadraquelucena@academico.ufs.br
Você está desenvolvendo um novo algoritmo para prever o comportamento do mercado financeiro ou o desempenho de uma nova vacina. Para ter certeza de que seu algoritmo é robusto e confiável, você precisa testá-lo com dados. No entanto, obter dados reais em grande volume pode ser demorado, caro ou inviável. Em vez de esperar por dados reais, você precisa de uma forma de simular esses dados. Isso permite que você:
Crie bancos de dados sintéticos que imitam as características do mundo real.
Avalie o desempenho do seu algoritmo sob diversas condições controladas.
Implemente métodos estatísticos avançados (como Bootstrap ou Monte Carlo) que exigem muitas repetições ou amostras.
Desenvolva e valide modelos complexos onde as distribuições de probabilidade não são facilmente observáveis ou manipuláveis.
Com o conhecimento sobre como gerar números pseudoaleatórios, você terá a ferramenta fundamental para criar seus próprios cenários de dados, testar suas ideias rapidamente e validar seus modelos de forma eficiente e reproduzível, sem depender exclusivamente da realidade.
Na aula de hoje aprenderemos a:
Distinguir números aleatórios de pseudoaleatórios.
Compreender e aplicar os Métodos Congruencial Linear Multiplicativo e Congruencial Misto para gerar sequências numéricas.
Há duas classes fundamentais de geração de número aleatórios:
Neste curso focaremos na geração de números pseudoaletórios.
Formalmente, definimos números pseudoaleatórios como uma sequência de valores gerados por um processo determinístico (ou seja, previsível e baseado em um conjunto de regras), mas que aparenta ser obtida de variáveis genuinamente aleatórias e independentes com distribuição uniforme entre 0 e 1.
Essa sequência de números são obtidas por meio de expressões matemáticas aplicadas de forma recursiva, podendo ser utilizados diferentes métodos.
Nota
A partir de uma sequência de números com distribuição uniforme podemos gerar realizações de variáveis aleatórias de qualquer outra distribuição de probabilidade.
Para esse método precisamos definir:
Algoritmo
Passo 1: Calcule recursivamente o próximo valor \(x_n\), \(n>1\), usando \[ x_n = a x_{n-1} ~\text{ mod }~ m. \] Passo 2: Obtenha um valor entre 0 e 1 fazendo \(y_n = x_n/m\).
Considere \(x_0=11\), \(a=2\) e \(m=16\) Os três primeiros valores da sequência (\(y_1, y_2, y_3\)) gerada pelo Método Congruencial Linear Multiplicativo são:
Os três primeiros valores da sequência são \(0.375\), \(0.75\) e \(0.5\).
Outros geradores de números pseudoaleatórios usam recursão do tipo \[ x_n = (a x_{n-1} + c) ~\text{ mod }~ m. \]
Além do multiplicador \(a\) e do módulo \(m\), chamamos \(c\) de incremento.
O período de um gerador congruencial misto é no máximo \(m\).
Quando um gerador consegue gerar todos os valores de \(0\) a \(m-1\), dizemos que ele tem período completo. Esse gerador terá um período completo para todas as sementes se, e somente se,
set.seed()
(verifique o help desta função).Gere os seis primeiros valores de uma sequência de números pseudoaleatórios usando o Método Congruencial Misto considerando a semente \(x_0=11\), o multiplicador \(a=7\), o incremento \(c=5\) e o módulo \(m=20\).
Escreva uma função em R que gere uma sequência de \(n\) números aleatórios usando o método congruencial misto. Em seguida teste para \(n=10\), \(x_0=11\), \(a=7\), \(c=5\) e \(m=20\).
Compreensão do que são números aleatórios e pseudoaleatórios.
Conhecimento dos principais métodos para gerar sequências numéricas (Congruencial Linear Multiplicativo e Misto).
Pratique o que aprendeu! Resolva os exercícios complementares que estão disponíveis junto com este material.
Esta aula foi baseada no capítulo 3 – Random Numbers, do livro Simulation (Sixth Edition), de Sheldon M. Ross, 2023.