6  Distribuições de probabilidade e normalidade

6.1 Fundamentos de probabilidade

Probabilidade é uma medida numérica da chance de ocorrência de um evento, variando de 0 (impossível) a 1 (certeza). Uma distribuição de probabilidade descreve como as probabilidades se distribuem entre os possíveis valores de uma variável aleatória.

Para variáveis contínuas, usamos a função densidade de probabilidade (PDF). Para variáveis discretas, usamos a função massa de probabilidade (PMF).

6.2 A distribuição normal

A distribuição normal (gaussiana) é a distribuição de probabilidade mais importante em estatística. Caracterizada por dois parâmetros, \(\mu\) (média) e \(\sigma\) (desvio padrão), sua função densidade é:

\[f(x) = \frac{1}{\sigma\sqrt{2\pi}}\,e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}\]

6.2.1 Propriedades fundamentais

  • Simétrica em torno de \(\mu\): média = mediana = moda
  • Forma de sino: decresce suavemente em ambas as direções
  • Área total = 1: a probabilidade total de todos os eventos é 1
  • Assintótica: as caudas se aproximam do eixo horizontal sem tocá-lo

6.2.2 Regra empírica (68-95-99,7)

Para qualquer distribuição normal:

Intervalo Proporção dos dados
\(\bar{x} \pm 1s\) ≈ 68%
\(\bar{x} \pm 1{,}96s\) ≈ 95%
\(\bar{x} \pm 3s\) ≈ 99,7%

6.2.3 Por que a distribuição normal importa?

  1. Ocorrência natural: altura, peso, erros de medição, rendimentos agrícolas tendem a ser normalmente distribuídos
  2. Teorema Central do Limite (TCL): a distribuição das médias amostrais converge para a normal conforme \(n\) aumenta, independentemente da distribuição original
  3. Fundamento dos testes paramétricos: teste t, ANOVA e regressão linear assumem normalidade dos resíduos
Conceito

O TCL justifica o uso de testes paramétricos mesmo quando os dados individuais não são perfeitamente normais, desde que o tamanho amostral seja adequado (geralmente n ≥ 30 por grupo).

6.2.4 Padronização - Z-score

Qualquer variável normal pode ser convertida para a escala padrão (μ = 0, σ = 1):

\[Z = \frac{X - \mu}{\sigma}\]

O Z-score indica quantos desvios padrão um valor está acima (Z > 0) ou abaixo (Z < 0) da média. Valores com |Z| > 3 são extremamente raros em distribuições normais.

# Demonstração: distribuição normal com diferentes parâmetros
x <- seq(-4, 4, length.out = 300)

df_normal <- data.frame(
  x     = rep(x, 3),
  y     = c(dnorm(x, 0, 1),
             dnorm(x, 0, 0.5),
             dnorm(x, 1, 1)),
  Curva = rep(c("N(0,1) - padrão",
                "N(0, 0.5) - menor DP",
                "N(1,1) - média deslocada"),
              each = 300))

ggplot(df_normal, aes(x = x, y = y, color = Curva)) +
  geom_line(linewidth = 1.4) +
  scale_color_manual(values = c("#224573", "#4A6FA5", "#6B4F4F")) +
  labs(title    = "Distribuições normais com diferentes parâmetros",
       subtitle = "Efeito da média e do desvio padrão na forma da curva",
       x = "x", y = "Densidade", color = NULL,
      caption = "Jennifer Luz Lopes | Café com R") +
  theme_classic(base_size = 13) +
  theme(plot.title      = element_text(color = "#224573", face = "bold"),
        legend.position = "bottom")

6.3 Por que testar normalidade?

A verificação da normalidade é necessária porque muitos testes paramétricos assumem que os dados (ou, mais precisamente, os resíduos do modelo) seguem distribuição normal. Violações severas desse pressuposto podem:

  • Distorcer os níveis de significância (p-valores incorretos)
  • Reduzir o poder estatístico
  • Invalidar intervalos de confiança
Mercado e pesquisa

Na prática, testa-se a normalidade dos resíduos do modelo, não dos dados brutos. Isso é especialmente verdadeiro para ANOVA e regressão. Testar apenas os dados originais antes de qualquer modelagem é um passo preliminar útil, mas insuficiente.

6.4 Métodos gráficos

6.4.1 Q-Q Plot

O gráfico quantil-quantil (Q-Q plot) compara os quantis observados com os quantis esperados de uma distribuição normal teórica. Se os pontos seguirem de perto a linha de referência, os dados são consistentes com a normalidade.

ggplot(CO2, aes(sample = uptake)) +
  stat_qq(color = "#4A6FA5", size = 2, alpha = 0.7) +
  stat_qq_line(color = "#224573", linewidth = 1) +
  labs(title    = "Q-Q Plot: absorção de CO₂",
       subtitle = "Pontos próximos à linha indicam normalidade",
       x = "Quantis teóricos",
       y = "Quantis amostrais",
      caption = "Jennifer Luz Lopes | Café com R") +
  theme_classic(base_size = 13) +
  theme(plot.title    = element_text(color = "#224573", face = "bold"),
        plot.subtitle = element_text(color = "#6B4F4F"))

6.4.2 Histograma com curva normal teórica

media_up <- mean(CO2$uptake)
dp_up    <- sd(CO2$uptake)

ggplot(CO2, aes(x = uptake)) +
  geom_histogram(aes(y = after_stat(density)),
                 bins  = 15,
                 fill  = "#4A6FA5",
                 color = "#224573",
                 alpha = 0.7) +
  stat_function(fun  = dnorm,
                args = list(mean = media_up, sd = dp_up),
                color     = "#6B4F4F",
                linewidth = 1.5) +
  geom_vline(xintercept = media_up,
             color = "#224573", linetype = "dashed", linewidth = 1) +
  labs(title    = "Distribuição observada vs normal teórica",
       subtitle = paste("Média:", round(media_up, 2),
                        "| DP:", round(dp_up, 2)),
       x = "Absorção de CO₂ (μmol/m²s)",
       y = "Densidade",
      caption = "Jennifer Luz Lopes | Café com R") +
  theme_classic(base_size = 13) +
  theme(plot.title = element_text(color = "#224573", face = "bold"))

6.5 Testes de normalidade

6.5.1 Shapiro-Wilk

O teste de Shapiro-Wilk é o mais recomendado para amostras de até 5.000 observações.

Hipóteses:

  • H₀: os dados seguem distribuição normal
  • H₁: os dados não seguem distribuição normal

Critério: se p-valor > 0,05, não há evidência para rejeitar a normalidade.

shapiro_resultado <- shapiro.test(CO2$uptake)

data.frame(
  Estatistica_W = round(shapiro_resultado$statistic, 4),
  P_valor       = round(shapiro_resultado$p.value, 4),
  Conclusao     = ifelse(shapiro_resultado$p.value > 0.05,
                         "Não rejeita H0 (evidência de normalidade)",
                         "Rejeita H0 (evidência contra normalidade)")) |>
  kable(caption = "Teste de Shapiro-Wilk - absorção de CO₂")
Teste de Shapiro-Wilk - absorção de CO₂
Estatistica_W P_valor Conclusao
W 0.941 8e-04 Rejeita H0 (evidência contra normalidade)

6.5.2 Shapiro-Wilk por grupo

CO2 |>
  group_by(Type, Treatment) |>
  summarise(
    n         = n(),
    Shapiro_W = round(shapiro.test(uptake)$statistic, 4),
    p_valor   = round(shapiro.test(uptake)$p.value, 4),
    Normal    = ifelse(shapiro.test(uptake)$p.value > 0.05, "Sim", "Nao"),
    .groups   = "drop") |>
  kable(caption = "Teste de Shapiro-Wilk por grupo experimental")
Teste de Shapiro-Wilk por grupo experimental
Type Treatment n Shapiro_W p_valor Normal
Quebec nonchilled 21 0.8253 0.0016 Nao
Quebec chilled 21 0.8529 0.0048 Nao
Mississippi nonchilled 21 0.8552 0.0052 Nao
Mississippi chilled 21 0.9482 0.3147 Sim

6.5.3 Anderson-Darling e Kolmogorov-Smirnov

ad_resultado <- nortest::ad.test(CO2$uptake)
ks_resultado <- ks.test(CO2$uptake, "pnorm",
                        mean = mean(CO2$uptake),
                        sd   = sd(CO2$uptake))

data.frame(
  Teste       = c("Shapiro-Wilk", "Anderson-Darling", "Kolmogorov-Smirnov"),
  Estatistica = round(c(shapiro_resultado$statistic,
                         ad_resultado$statistic,
                         ks_resultado$statistic), 4),
  P_valor     = round(c(shapiro_resultado$p.value,
                         ad_resultado$p.value,
                         ks_resultado$p.value), 4)) |>
  kable(caption = "Comparação dos testes de normalidade")
Comparação dos testes de normalidade
Teste Estatistica P_valor
W Shapiro-Wilk 0.9410 0.0008
A Anderson-Darling 1.5793 0.0004
D Kolmogorov-Smirnov 0.1077 0.2842
Boas práticas

Use sempre o Q-Q plot junto com o teste numérico. Com amostras grandes, testes de normalidade tendem a rejeitar H₀ por desvios triviais e estatisticamente sem importância prática. Com amostras pequenas, o poder do teste é baixo, e pode não detectar desvios relevantes. O gráfico oferece uma avaliação mais informativa da magnitude do desvio.

6.6 Assimetria e curtose

6.6.1 Conceitos

Assimetria (skewness) mede o grau de simetria da distribuição:

  • Próximo de 0: simétrica
  • Positiva: cauda longa à direita (média > mediana)
  • Negativa: cauda longa à esquerda (média < mediana)

Curtose (kurtosis) mede o achatamento em relação à normal:

  • Mesocúrtica (≈ 0): similar à normal
  • Leptocúrtica (> 0): mais pontiaguda, caudas mais pesadas
  • Platicúrtica (< 0): mais achatada, caudas mais leves
skew_val <- DescTools::Skew(CO2$uptake)
kurt_val <- DescTools::Kurt(CO2$uptake)

data.frame(
  Medida        = c("Assimetria", "Curtose"),
  Valor         = round(c(skew_val, kurt_val), 4),
  Interpretacao = c(
    ifelse(abs(skew_val) < 0.5, "Simétrica",
           ifelse(skew_val > 0, "Assimétrica à direita", "Assimétrica à esquerda")),
    ifelse(abs(kurt_val) < 0.5, "Mesocúrtica",
           ifelse(kurt_val > 0, "Leptocúrtica", "Platicúrtica")))) |>
  kable(caption = "Medidas de forma da distribuição")
Medidas de forma da distribuição
Medida Valor Interpretacao
Assimetria -0.1041 Simétrica
Curtose -1.3483 Platicúrtica