library(ggplot2)
library(dplyr)
# Carregar dados de morfometria de passeriformes
sparrows <- read.table(
"https://raw.githubusercontent.com/FCopf/prob-est-2026/refs/heads/main/_bibliography/zuur-2009/zuur-2009-data-sets/Sparrows.txt",
header = TRUE, sep = "\t"
)
# Histograma do peso corporal
ggplot(sparrows, aes(x = wt)) +
geom_histogram(bins = 30, fill = "#1a9988", color = "white") +
labs(
x = "Peso corporal (g)",
y = "Frequência"
) +
theme_bw()Leitura Prévia - Aula 07
Análise exploratória e visualização de dados
1 Introdução
As primeiras cinco aulas dedicaram-se aos fundamentos da inferência bayesiana: o contraste entre hipóteses, a atualização de crenças com evidências, os modelos generativos, as distribuições de probabilidade contínua e a estimação da distribuição a posteriori. Com a Prova 1 concluída, o curso entra em uma nova fase, voltada à construção e interpretação de modelos de regressão.
A regressão descreve como uma variável resposta muda em função de uma ou mais covariáveis. Antes de especificar qualquer modelo, é necessário examinar os dados. Essa etapa, chamada de análise exploratória de dados, combina resumos numéricos e visualizações para revelar a estrutura presente nas observações. A visualização é a ferramenta central desse exame inicial.
Um gráfico bem construído mostra a forma de uma distribuição, a curvatura de uma relação, a presença de agrupamentos e de valores atípicos. Essas informações orientam a escolha do modelo e a seleção de preditores. Omitir a etapa exploratória expõe a análise ao risco de ajustar um modelo inadequado para a estrutura real dos dados.
2 Por que visualizar antes de modelar
2.1 A insuficiência dos resumos numéricos
Média, variância e correlação descrevem aspectos importantes de um conjunto de dados, mas não o caracterizam completamente. Um exemplo histórico demonstra essa limitação: o Quarteto de Anscombe, publicado em 1973, consiste em quatro conjuntos de dados com resumos numéricos quase idênticos. Os quatro conjuntos têm a mesma média e variância para as variáveis \(x\) e \(y\), o mesmo coeficiente de correlação de Pearson (\(r \approx 0{,}82\)) e praticamente a mesma equação de regressão linear. Apesar disso, os quatro diagramas de dispersão revelam estruturas completamente diferentes: uma relação linear com variação aleatória, uma relação parabólica, uma relação linear com um único valor atípico influente e uma relação degenerada em que todos os valores de \(x\) são iguais, exceto um.
2.2 O que gráficos revelam
Descritores numéricos como média e desvio padrão resumem bem distribuições simétricas sem valores atípicos. Fora dessas condições, eles podem ser enganosos. Gráficos revelam:
- Forma da distribuição: assimetria, multimodalidade e caudas pesadas não são detectáveis pela média e desvio padrão isolados.
- Valores atípicos: pontos afastados do padrão geral influenciam estimativas de forma desproporcional quando não são identificados.
- Não linearidade: uma relação com curvatura produz coeficiente de correlação abaixo do esperado para o grau real de associação entre as variáveis.
- Agrupamentos: subgrupos com características distintas geram distribuições multimodais e associações aparentes que desaparecem ao examinar os grupos separadamente.
- Variação entre unidades amostrais: diferenças sistemáticas entre locais, épocas ou grupos podem estar presentes mesmo quando a tendência global é consistente.
3 Seleção do tipo de gráfico
A escolha do tipo de gráfico depende do número e da natureza das variáveis envolvidas e do objetivo da visualização. A tabela a seguir resume os casos mais comuns:
| Objetivo | Tipo de variável | Gráfico indicado |
|---|---|---|
| Distribuição univariada | 1 variável contínua | Histograma, curva de densidade |
| Comparação entre grupos | 1 contínua + 1 categórica | Diagrama de caixa, violino |
| Relação bivariada | 2 variáveis contínuas | Diagrama de dispersão |
| Estrutura multivariada | 3 ou mais contínuas | Gráfico de pares |
| Relação com variável de grupo | 2 contínuas + 1 categórica | Diagrama de dispersão com cor ou facetas |
Cada linha corresponde a uma pergunta analítica específica. A pergunta determina o gráfico. Todos os gráficos apresentados nesta leitura são produzidos com o pacote ggplot2, disponível no ecossistema tidyverse.
4 Exploração univariada: histogramas e curvas de densidade
4.1 O histograma
O histograma divide o intervalo de uma variável contínua em classes de igual largura e conta o número de observações em cada classe. Ele permite visualizar:
- A localização central dos dados.
- A dispersão (amplitude do intervalo coberto).
- A simetria ou assimetria da distribuição.
- A presença de mais de um modo (multimodalidade).
- Valores atípicos, que aparecem como barras isoladas nas extremidades.
O dataset de morfometria de passeriformes de Zuur et al. (2009), arquivo Sparrows.txt, contém medidas de comprimento de asa (wingcrd), comprimento do tarso (tarsus), comprimento do crânio (head), peso corporal (wt) e variáveis categóricas de sexo (Sex) e classe etária (Age) coletadas em um conjunto de indivíduos. Esse conjunto de dados é adequado para explorar todos os tipos de gráficos: possui múltiplas variáveis morfométricas contínuas e variáveis categóricas que permitem comparações entre grupos.
Código
4.2 A curva de densidade
A curva de densidade é uma versão suavizada do histograma. Em vez de barras, ela representa a distribuição como uma curva contínua, com área total igual a 1. A curva de densidade é útil quando se deseja comparar a distribuição de uma variável entre dois ou mais grupos na mesma visualização, sem que as barras de grupos diferentes se sobreponham.
Código
# Curva de densidade do peso corporal por sexo
ggplot(sparrows, aes(x = wt, fill = factor(Sex))) +
geom_density(alpha = 0.4) +
labs(
x = "Peso corporal (g)",
y = "Densidade",
fill = "Sexo"
) +
theme_bw()5 Comparações entre grupos: diagrama de caixa
5.1 Estrutura do diagrama de caixa
O diagrama de caixa resume a distribuição de uma variável contínua por meio de cinco descritores: o valor mínimo, o primeiro quartil (\(Q_1\)), a mediana, o terceiro quartil (\(Q_3\)) e o valor máximo. A caixa propriamente dita se estende de \(Q_1\) a \(Q_3\), abrangendo o intervalo interquartílico (\(\text{IIQ} = Q_3 - Q_1\)). A linha interna marca a mediana.
As hastes se estendem a partir das bordas da caixa até o ponto mais distante que ainda se encontra dentro de 1,5 vezes o intervalo interquartílico acima de \(Q_3\) ou abaixo de \(Q_1\). Pontos além das hastes são representados individualmente e identificam observações que podem ser valores atípicos.
5.2 Comparação entre grupos
O diagrama de caixa é especialmente útil para comparar a distribuição de uma variável contínua entre grupos categóricos. Ele permite identificar diferenças na mediana, na dispersão e na simetria entre os grupos em um único gráfico.
Código
# Comparação do peso corporal entre sexos
ggplot(sparrows, aes(x = factor(Sex), y = wt, fill = factor(Sex))) +
geom_boxplot() +
labs(
x = "Sexo",
y = "Peso corporal (g)",
fill = "Sexo"
) +
theme_bw()5.3 Diagrama de caixa com pontos individuais sobrepostos
Em amostras de tamanho moderado (dezenas a algumas centenas de observações), é possível sobrepor os pontos individuais ao diagrama de caixa. Essa combinação mostra ao mesmo tempo o resumo distribuicional e a distribuição real das observações, evidenciando agrupamentos ou padrões que a caixa isolada não revela.
Código
# Diagrama de caixa com pontos individuais sobrepostos
ggplot(sparrows, aes(x = factor(Sex), y = wt, fill = factor(Sex))) +
geom_boxplot(outlier.shape = NA, alpha = 0.6) +
geom_jitter(width = 0.15, alpha = 0.3, size = 1) +
labs(
x = "Sexo",
y = "Peso corporal (g)",
fill = "Sexo"
) +
theme_bw()6 Relações bivariadas: diagrama de dispersão
6.1 Estrutura e interpretação
O diagrama de dispersão representa duas variáveis contínuas nos eixos horizontal e vertical. Cada ponto corresponde a uma observação. O conjunto de pontos mostra a relação entre as duas variáveis: sua direção (positiva ou negativa), sua força (pontos próximos de uma linha versus amplamente dispersos) e sua forma (linear ou curvilínea).
Código
# Relação entre comprimento do tarso e comprimento de asa
ggplot(sparrows, aes(x = tarsus, y = wingcrd)) +
geom_point(alpha = 0.4, color = "#2c5f7c") +
labs(
x = "Tarso (mm)",
y = "Comprimento de asa (mm)"
) +
theme_bw()6.2 Diagrama de dispersão com variável de grupo
O mapeamento de uma variável categórica para a cor dos pontos acrescenta uma terceira dimensão ao gráfico. Isso permite verificar se a relação entre as duas variáveis contínuas varia entre os grupos.
Código
# Relação tarso-asa com separação por sexo
ggplot(sparrows, aes(x = tarsus, y = wingcrd, color = factor(Sex))) +
geom_point(alpha = 0.4) +
labs(
x = "Tarso (mm)",
y = "Comprimento de asa (mm)",
color = "Sexo"
) +
theme_bw()7 Estrutura multivariada: gráfico de pares
7.1 Explorando múltiplas variáveis simultaneamente
Quando o conjunto de dados contém três ou mais variáveis contínuas, o gráfico de pares organiza todos os diagramas de dispersão possíveis em uma grade. Cada célula da grade mostra a relação entre duas variáveis. A diagonal principal exibe a distribuição de cada variável individualmente.
O gráfico de pares permite identificar quais pares de variáveis apresentam relação mais forte, quais são praticamente independentes e se há variáveis com distribuições assimétricas que podem requerer transformação antes da modelagem. Essa inspeção visual orienta a seleção de preditores e a especificação inicial do modelo.
Instalação do pacote GGally
O gráfico de pares no ggplot2 é produzido pela função ggpairs() do pacote GGally. Caso o pacote não esteja instalado no ambiente R, execute:
# Instalar GGally no ambiente do projeto (executar uma única vez)
renv::install("GGally")The following package(s) will be installed:
- GGally [2.4.0]
These packages will be installed into "~/work/prob-est-2026/prob-est-2026/renv/library/linux-ubuntu-noble/R-4.5/x86_64-pc-linux-gnu".
# Installing packages --------------------------------------------------------
- Installing GGally 2.4.0 ... OK [linked from cache]
Successfully installed 1 package in 5.9 milliseconds.
Código
library(GGally)
# Gráfico de pares para variáveis morfométricas de passeriformes
sparrows |>
select(wingcrd, tarsus, head, wt) |>
ggpairs(aes(alpha = 0.3))7.2 Gráfico de pares com variável categórica
O ggpairs() aceita mapeamentos estéticos do ggplot2. Mapear a variável Sex para a cor separa as observações por grupo em todos os gráficos da grade simultaneamente.
Código
# Gráfico de pares com separação por sexo
sparrows |>
select(wingcrd, tarsus, head, wt, Sex) |>
ggpairs(aes(color = factor(Sex), alpha = 0.3))8 Transformações logarítmicas
8.1 Relações alométricas
Em ecologia e biologia marinha, muitas relações entre variáveis morfológicas e fisiológicas seguem uma lei de potência: a variável resposta cresce proporcionalmente a uma potência da variável preditora. Um exemplo clássico é a relação entre comprimento e biomassa em organismos marinhos.
Para mariscos, a biomassa (medida como massa seca livre de cinzas, AFD) aumenta com o comprimento corporal seguindo a forma:
\[\text{AFD} = \beta_0 \cdot \text{comprimento}^{\beta_1}\]
em que \(\beta_0\) é um coeficiente de escala e \(\beta_1\) é o coeficiente alométrico. Na escala original, essa equação gera uma curva com crescimento acelerado. Visualizar a relação nessa escala dificulta a avaliação da força e da regularidade da associação.
8.2 A transformação logarítmica lineariza a relação de potência
Aplicando o logaritmo natural em ambos os lados da equação de potência:
\[\ln(\text{AFD}) = \ln(\beta_0) + \beta_1 \cdot \ln(\text{comprimento})\]
A relação de potência se converte em uma equação linear na escala logarítmica. O coeficiente \(\beta_1\) torna-se a inclinação da reta ajustada no gráfico log-log, e \(\ln(\beta_0)\) é o intercepto. Um gráfico de \(\ln(\text{AFD})\) contra \(\ln(\text{comprimento})\) deve mostrar uma nuvem de pontos próxima de uma linha reta se a relação de potência descrever adequadamente os dados.
8.3 Aplicação ao dataset de mariscos
O dataset de Zuur et al. (2009), arquivo Clams.txt, contém comprimento (LENGTH), biomassa (AFD) e suas versões já transformadas (LNLENGTH, LNAFD), além do mês de coleta (MONTH). A comparação dos gráficos na escala original e na escala logarítmica permite visualizar diretamente o efeito da transformação.
Código
# Carregar dados de mariscos
clams <- read.table(
"https://raw.githubusercontent.com/FCopf/prob-est-2026/refs/heads/main/_bibliography/zuur-2009/zuur-2009-data-sets/Clams.txt",
header = TRUE, sep = "\t"
)
# Relação comprimento-biomassa na escala original
ggplot(clams, aes(x = LENGTH, y = AFD)) +
geom_point(alpha = 0.4, color = "#2c5f7c") +
labs(
x = "Comprimento (mm)",
y = "Biomassa - AFD (g)"
) +
theme_bw()Código
# Relação comprimento-biomassa na escala logarítmica
ggplot(clams, aes(x = LNLENGTH, y = LNAFD)) +
geom_point(alpha = 0.4, color = "#2c5f7c") +
geom_smooth(method = "lm", se = FALSE, color = "#e6a073") +
labs(
x = "ln(Comprimento)",
y = "ln(Biomassa - AFD)"
) +
theme_bw()8.4 Variação sazonal com facetas
A variável MONTH indica o mês de coleta de cada marisco. O uso de facet_wrap() permite verificar se a relação alométrica é consistente ao longo do ano ou varia sazonalmente. Facetas dividem o gráfico em painéis separados, um por nível da variável de agrupamento, mantendo as escalas comparáveis entre os painéis.
Código
# Variação da relação alométrica por mês
ggplot(clams, aes(x = LNLENGTH, y = LNAFD)) +
geom_point(alpha = 0.3, size = 1.2) +
geom_smooth(method = "lm", se = FALSE, color = "#e6a073") +
facet_wrap(~ MONTH) +
labs(
x = "ln(Comprimento)",
y = "ln(Biomassa - AFD)"
) +
theme_bw()9 Variação entre unidades amostrais
9.1 Padrões espaciais na bioluminescência oceânica
Conjuntos de dados ecológicos frequentemente incluem observações coletadas em múltiplos locais, épocas ou indivíduos. Antes de ajustar um modelo global, é importante examinar se o padrão de interesse é consistente entre as unidades amostrais ou se há variação sistemática entre elas.
O dataset de bioluminescência oceânica de Zuur et al. (2009), arquivo ISIT.txt, registra contagens de fontes bioluminescentes (Sources) em diferentes profundidades de amostragem (SampleDepth) ao longo de estações no Atlântico Norte. Cada estação corresponde a um local geográfico com múltiplas amostras coletadas em diferentes profundidades. A relação entre profundidade e bioluminescência pode variar entre estações em função de diferenças de temperatura, salinidade e produtividade primária.
Código
# Carregar dados de bioluminescência oceânica
isit <- read.table(
"https://raw.githubusercontent.com/FCopf/prob-est-2026/refs/heads/main/_bibliography/zuur-2009/zuur-2009-data-sets/ISIT.txt",
header = TRUE, sep = "\t"
)
# Relação geral profundidade-bioluminescência
ggplot(isit, aes(x = SampleDepth, y = Sources)) +
geom_point(alpha = 0.3, size = 1) +
labs(
x = "Profundidade de amostragem (m)",
y = "Fontes bioluminescentes"
) +
theme_bw()9.2 Variação entre estações com facetas
O uso de facet_wrap(~ Station) cria um painel separado para cada estação amostral, permitindo comparar a relação profundidade–bioluminescência entre locais.
Código
# Variação da relação por estação amostral
ggplot(isit, aes(x = SampleDepth, y = Sources)) +
geom_point(alpha = 0.3, size = 1) +
facet_wrap(~ Station) +
labs(
x = "Profundidade de amostragem (m)",
y = "Fontes bioluminescentes"
) +
theme_bw()10 Valores atípicos e decisões analíticas
10.1 O que são valores atípicos
Um valor atípico é uma observação que se afasta marcadamente do padrão formado pelas demais. Gráficos mostram valores atípicos de formas distintas: como pontos isolados além das hastes em diagramas de caixa, como pontos afastados da nuvem em diagramas de dispersão e como barras isoladas nas extremidades de histogramas.
A identificação visual de um valor atípico é o primeiro passo. O analista precisa verificar se o valor resulta de erro de registro (passível de correção), de uma observação biologicamente real de um indivíduo incomum (a ser mantida na análise) ou de uma combinação de covariáveis que torna esse ponto altamente influente sobre as estimativas do modelo.