Curso de Programação Estatística
Curso de Programação Estatística

Este é o material da disciplina Programação Estatística, da graduação em Estatística da UFSCar. O livro trata de uma ideia que atravessa boa parte da Estatística moderna: quando uma quantidade de interesse — uma probabilidade, uma esperança, uma integral, a distribuição de um estimador — não tem fórmula fechada, ainda assim podemos estimá-la repetindo o fenômeno muitas vezes no computador e olhando para o que acontece.
Enunciar essa ideia é fácil; executá-la exige responder a três perguntas, e é isso que os capítulos fazem, nesta ordem: de onde o computador tira números aleatórios, como transformar esses números na distribuição que nos interessa, e o que fazer com a amostra obtida.
Objetivo Geral
Este curso visa explorar o uso do computador como ferramenta de análise estatística, com atenção ao impacto das representações numéricas sobre os resultados dos algoritmos. O foco será na programação, visualização e preparação de dados, além de discutir tópicos importantes como aleatoriedade, pseudoaleatoriedade, erros de truncamento e arredondamento, entre outros. O curso inclui ainda uma introdução à inferência por simulação estocástica, utilizando métodos como Monte Carlo e integrações numéricas. O material do curso foi amplamente baseado nas discussões apresentadas em Ross (2006).
A quem se destina
O livro supõe que você já cursou uma disciplina de probabilidade: usamos variáveis aleatórias, funções de densidade e de distribuição acumulada, esperança e variância, e os dois teoremas que sustentam tudo o que faremos — a Lei dos Grandes Números e o Teorema Central do Limite.
Já de programação, não supomos nada. Os dois primeiros capítulos (Python e R) revisam o necessário do zero, incluindo onde instalar e escrever o código; eles não fazem parte do conteúdo do curso propriamente dito, e servem de consulta. Se você já programa em uma das duas linguagens, pode ir direto para Por que Simular? e voltar a esses capítulos quando precisar.
Como o livro está organizado
A aleatoriedade e sua origem. O primeiro capítulo mostra a simulação funcionando, sem ainda justificar nada, para estabelecer o que queremos ser capazes de fazer. O segundo abre a caixa-preta do runif/np.random.uniform e mostra como um algoritmo determinístico produz números que parecem aleatórios.
- Por que Simular? — quatro exemplos que motivam o restante do livro
- Números Pseudoaleatórios — o Gerador Linear Congruente e a noção de semente
De \(\text{Unif}(0,1)\) para qualquer distribuição. Este é o coração do livro. A partir daqui, supomos resolvido o problema de gerar números uniformes em \([0,1)\), e a pergunta passa a ser: dada uma distribuição qualquer, como construir uma amostra dela usando apenas uniformes? Há mais de uma resposta, e cada capítulo apresenta um método, com suas hipóteses e seu custo.
- Inversão: caso discreto e caso contínuo — quando sabemos inverter a f.d.a.
- Rejeição: caso discreto e caso contínuo — quando não sabemos, mas temos uma distribuição auxiliar fácil de simular
- Transformações e Misturas — construindo distribuições novas a partir de outras já conhecidas
- Método de Box-Muller — o caso da normal, que escapa dos métodos anteriores
O que fazer com a amostra. Ter a amostra é meio caminho. Os capítulos finais tratam de usá-la para estimar quantidades, de medir o erro dessa estimativa e de reduzi-lo sem simplesmente aumentar o número de simulações.
- Método de Monte Carlo — estimação, erro padrão e intervalos de confiança
- Redução de Variância — variáveis antitéticas, variáveis de controle, condicionamento e amostragem estratificada
- Amostragem por Importância — simulando de uma distribuição para aprender sobre outra, útil sobretudo para eventos raros
Como usar o livro
Todo exemplo executável aparece em R e em Python, em versões que fazem exatamente a mesma coisa. Você não precisa saber as duas linguagens: escolha uma e siga por ela.
- As abas R e Python ficam sincronizadas: ao escolher uma delas em qualquer ponto do livro, todos os demais blocos passam a exibir a mesma linguagem.
- O código vem recolhido por padrão. Clique em Mostrar código para vê-lo.
- Vale a pena tentar escrever o código antes de abrir o bloco: todos os métodos são apresentados como um pseudo-algoritmo em português, logo antes da implementação, e é justamente a passagem de um para o outro que se pretende ensinar aqui.
Os capítulos com simulação começam fixando uma semente (set.seed no R, np.random.seed no Python). Isso faz com que o código gere sempre os mesmos números, e é o que permite que os resultados que você obtém coincidam com os impressos no livro. Ao mudar a semente, os valores mudam — mas as conclusões, não; fazer isso de propósito é um bom teste de que a ideia foi entendida.
Cada capítulo termina com uma lista de exercícios. Alguns trazem a marcação (Desafio): são exercícios substancialmente mais difíceis que os demais — pedem uma demonstração, uma otimização analítica ou um argumento que o capítulo não desenvolveu — e ficam sempre ao final da lista.
Notação
O livro segue estas convenções:
| Símbolo | Significado |
|---|---|
| v.a. | variável aleatória |
| f.d.a. | função de distribuição acumulada |
| \(\mathbb{P}(A)\), \(\mathbb{E}[X]\), \(\text{Var}(X)\) | probabilidade, esperança e variância |
| \(\text{Unif}(0,1)\), \(\text{Exp}(\lambda)\), \(N(\mu,\sigma^2)\) | as distribuições usuais |
| \(\hat{\theta}_n\) | um estimador de \(\theta\) |
| \(B\) | número de simulações de Monte Carlo |
| \(n\) | tamanho de uma amostra de dados reais |
A distinção entre \(B\) e \(n\) é proposital e importante: \(n\) é o tamanho da amostra que você tem, e não se pode escolher; \(B\) é quantas vezes você decidiu rodar a simulação, e aumentá-lo custa apenas tempo de computador.
Autores
Andressa Cerqueira, Danilo Lourenço Lopes, Rafael Izbicki, Thiago Rodrigo Ramos.
Encontrou um erro ou tem uma sugestão? O material é aberto e vive em https://github.com/thiagorr162/prog-estat.