✅ Distribuição Normal como modelo probabilístico para variáveis contínuas
✅ O modelo generativo de três níveis para alturas adultas:
✅ Distribuição preditiva a priori: verificação de que as distribuições a priori geram alturas biologicamente razoáveis
✅ O modelo ainda não viu nenhum dado real
Dataset: Howell1 (McElreath, 2020)
height (cm)O modelo especificado na Aula 04 assume $Y \sim \text{Normal}(\mu, \sigma)$.
A pergunta agora: quais valores de $\mu$ e $\sigma$ são mais compatíveis com esses 352 dados observados?
Pergunta que a verossimilhança responde: "Se os parâmetros fossem $(\mu, \sigma)$, qual seria a probabilidade de observar exatamente estes dados?"
Em R, usando dnorm() com log = TRUE:
alturas <- c(150, 154, 158, 162, 165)
sum(dnorm(alturas, mean = 155, sd = 8, log = TRUE))
# resultado: sempre negativo para variáveis contínuas
Dois modelos são ajustados com os mesmos dados:
Qual modelo é mais compatível com os dados?
(A) Modelo A, porque $-450 < -420$
(B) Modelo B, porque log-verossimilhança mais próxima de zero indica maior compatibilidade
(C) Ambos são igualmente compatíveis
(D) Depende do número de parâmetros de cada modelo
O símbolo $\propto$ ("proporcional a") indica que o produto ainda precisa ser normalizado para integrar 1.
Cada célula da grade é uma hipótese sobre os parâmetros $(\mu, \sigma)$. A grade calcula quão bem cada hipótese explica os dados (verossimilhança) e pondera pela crença prévia (distribuição a priori).
dados <- read.csv("https://raw.githubusercontent.com/FCopf/prob-est-2026/refs/heads/main/_bibliography/mcelreath-2019/mcelreath-2019-data-sets/Howell1.csv",
sep = ";")
alturas <- dados$height[dados$age >= 18] # n = 352 adultos
# Grade bidimensional de parâmetros
mu_grade <- seq(150, 160, length.out = 200)
sigma_grade <- seq(4, 12, length.out = 200)
grade <- expand.grid(mu = mu_grade, sigma = sigma_grade)
# Log-verossimilhança em cada célula
grade$log_lik <- sapply(seq_len(nrow(grade)), function(i) {
sum(dnorm(alturas, mean = grade$mu[i], sd = grade$sigma[i], log = TRUE))
})
# Log-distribuições a priori
grade$log_prior_mu <- dnorm(grade$mu, mean = 160, sd = 20, log = TRUE)
grade$log_prior_sigma <- dexp(grade$sigma, rate = 0.1, log = TRUE)
# Distribuição a posteriori: normalizada
grade$log_post <- grade$log_lik + grade$log_prior_mu + grade$log_prior_sigma
grade$prob_post <- exp(grade$log_post - max(grade$log_post))
grade$prob_post <- grade$prob_post / sum(grade$prob_post)
A grade produz uma tabela de probabilidades discretas. Para calcular resumos, amostra-se pares $(\mu, \sigma)$ com probabilidade proporcional à distribuição a posteriori:
set.seed(2026)
idx_amostras <- sample(nrow(grade), size = 6000, replace = TRUE,
prob = grade$prob_post)
amostras_grade <- grade[idx_amostras, c("mu", "sigma")]
# Resumos da distribuição a posteriori de μ
mean(amostras_grade$mu) # média a posteriori
median(amostras_grade$mu) # mediana a posteriori
quantile(amostras_grade$mu, c(0.055, 0.945)) # intervalo de credibilidade 89%
| Resumo | Definição | Código R |
|---|---|---|
| Estimativa MAP | Par $(\hat\mu, \hat\sigma)$ que maximiza $P(\mu, \sigma \mid \mathbf{y})$ | grade[which.max(grade$prob_post), ] |
| Média a posteriori | Média das amostras da distribuição a posteriori | mean(amostras_grade$mu) |
| Mediana a posteriori | Mediana das amostras da distribuição a posteriori | median(amostras_grade$mu) |
| Intervalo de credibilidade 89% | Intervalo que contém 89% da massa da distribuição a posteriori | quantile(amostras_grade$mu, c(0.055, 0.945)) |
Esta interpretação não está disponível para o intervalo de confiança frequentista.
A distribuição a posteriori de $\mu$ está centrada em 154,6 cm com desvio padrão de 0,4 cm.
O que esse desvio padrão de 0,4 cm representa?
(A) A variabilidade típica das alturas individuais na população.
(B) A incerteza residual sobre o valor da média populacional $\mu$, dado o modelo e os dados.
(C) O erro de medição das alturas no dataset.
A aproximação por grade avalia o produto verossimilhança × distribuições a priori em cada célula da grade.
Estrutura obrigatória do programa Stan:
data {
int<lower=0> N; // número de observações
vector[N] y; // alturas observadas
}
parameters {
real mu; // média populacional
real<lower=0> sigma; // desvio padrão
}
model {
// Distribuições a priori
mu ~ normal(160, 20);
sigma ~ exponential(0.1);
// Verossimilhança
y ~ normal(mu, sigma);
}
<lower=0> restringe $\sigma > 0$
library(rstan)
library(posterior)
# Preparar dados no formato esperado pelo Stan
dados_stan <- list(N = length(alturas), y = alturas)
# Ajustar o modelo (model_code: string com o programa Stan)
fit <- stan(model_code = model_code,
data = dados_stan,
chains = 4,
iter = 1000,
warmup = 500,
refresh = 0)
# Extrair amostras da distribuição a posteriori
amostras_stan <- as_draws_df(fit)
# Resumos
summarise_draws(amostras_stan, mean, median, sd,
~quantile(.x, c(0.055, 0.945)))
O rstan compila o programa Stan em C++, amostra com HMC e retorna um objeto stanfit com as amostras de todas as cadeias.
| Conceito matemático | Código R (grade) | Código Stan |
|---|---|---|
| $\sum \log P(y_i \mid \mu, \sigma)$ | sum(dnorm(..., log=TRUE)) |
y ~ normal(mu, sigma) |
| $\log P(\mu) = \log \text{Normal}(\mu; 160, 20)$ | dnorm(mu, 160, 20, log=TRUE) |
mu ~ normal(160, 20) |
| $\log P(\sigma) = \log \text{Exp}(\sigma; 0{,}1)$ | dexp(sigma, rate=0.1, log=TRUE) |
sigma ~ exponential(0.1) |
| Amostras da distribuição a posteriori | sample(..., prob=prob_post) |
as_draws_df(fit) |
Na grade, calculamos a distribuição a posteriori célula a célula. No Stan, o HMC amostra diretamente da distribuição a posteriori. O resultado, em ambos os casos, é um conjunto de amostras de $(\mu, \sigma)$.
Descreve a incerteza sobre os parâmetros após observar os dados.
Pergunta: "Onde está $\mu$?"
Descreve a distribuição esperada de novas observações, incorporando a incerteza sobre os parâmetros.
Pergunta: "Qual a altura esperada de um novo adulto?"
# Distribuição preditiva da posteriori (usando amostras do Stan)
y_post <- rnorm(nrow(amostras_stan),
mean = amostras_stan$mu,
sd = amostras_stan$sigma)
Após o ajuste do modelo, três distribuições de alturas podem ser comparadas:
A distribuição preditiva da posteriori é mais larga do que $\text{Normal}(\hat\mu, \hat\sigma)$, pois incorpora a incerteza residual sobre os parâmetros.
| Conceito | Definição | Ferramenta em R |
|---|---|---|
| Verossimilhança | Compatibilidade de $(\mu, \sigma)$ com os dados observados | sum(dnorm(..., log=TRUE)) |
| Distribuição a posteriori | $P(\mu, \sigma \mid \mathbf{y}) \propto \mathcal{L} \times P(\mu) \times P(\sigma)$ | grade$prob_post / as_draws_df(fit) |
| Estimativa MAP | Par $(\hat\mu, \hat\sigma)$ que maximiza a distribuição a posteriori | which.max(grade$prob_post) |
| Intervalo de credibilidade 89% | Intervalo com 89% da massa da distribuição a posteriori | quantile(amostras, c(0.055, 0.945)) |
| Stan / rstan | HMC como alternativa escalável à grade | stan(...) + as_draws_df() |
| Distribuição preditiva da posteriori | Distribuição de novas observações incorporando incerteza paramétrica | rnorm(n, amostras$mu, amostras$sigma) |