Pacote GGally: Visualizações Avançadas para Análise Exploratória de Dados

O pacote GGally é uma extensão poderosa do ggplot2 que facilita a criação de gráficos complexos e matrizes de visualização para análise exploratória de dados. Desenvolvido para automatizar a criação de múltiplos gráficos relacionados, o GGally é especialmente útil quando você precisa entender rapidamente as relações entre múltiplas variáveis em seu conjunto de dados.

Primeiro, vamos instalar e carregar o pacote junto com suas dependências:

# Instalação (caso não tenha o pacote instalado)
install.packages("GGally")

# Carregamento dos pacotes necessários
library(GGally)
library(ggplot2)
library(dplyr)
Preparando os Dados

Para demonstrar as funcionalidades do GGally, utilizaremos o conjunto de dados mtcars, que contém informações sobre diferentes modelos de carros:

# Carregando e visualizando os dados
data(mtcars)

# Selecionando algumas variáveis para análise
dados <- mtcars |>
  select(mpg, disp, hp, wt, qsec, vs, am)

# Visualizando a estrutura dos dados
str(dados)
head(dados)
> str(dados)
'data.frame':	32 obs. of  7 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : Factor w/ 2 levels "Automático","Manual": 2 2 2 1 1 1 1 1 1 1 ...

> head(dados)
                   mpg disp  hp    wt  qsec vs         am
Mazda RX4         21.0  160 110 2.620 16.46  0     Manual
Mazda RX4 Wag     21.0  160 110 2.875 17.02  0     Manual
Datsun 710        22.8  108  93 2.320 18.61  1     Manual
Hornet 4 Drive    21.4  258 110 3.215 19.44  1 Automático
Hornet Sportabout 18.7  360 175 3.440 17.02  0 Automático
Valiant           18.1  225 105 3.460 20.22  1 AutomáticoCode language: JavaScript (javascript)
1. ggpairs(): A Matriz de Correlação Completa

A função ggpairs() é a principal funcionalidade do GGally. Ela cria automaticamente uma matriz de gráficos que mostra:

  • Diagonal superior: Correlações entre variáveis
  • Diagonal: Histogramas das variáveis
  • Diagonal inferior: Gráficos de dispersão
# Criando uma matriz de correlação básica
matriz_basica <- ggpairs(dados)
print(matriz_basica)
Personalizando a Matriz de Correlação

Podemos personalizar a matriz adicionando cores baseadas em uma variável categórica:

# Convertendo 'am' para fator para colorir os gráficos
dados$am <- factor(dados$am, labels = c("Automático", "Manual"))

# Matriz colorida por tipo de transmissão
matriz_colorida <- ggpairs(dados, 
                          aes(color = am),
                          title = "Matriz de Correlação - Dados de Carros",
                          upper = list(continuous = wrap("cor", size = 4)),
                          lower = list(continuous = wrap("points", alpha = 0.7)),
                          diag = list(continuous = wrap("densityDiag", alpha = 0.5)))

print(matriz_colorida)
2. ggcorr(): Mapa de Calor de Correlações

Para visualizar apenas as correlações em formato de mapa de calor:

# Criando um mapa de calor das correlações
mapa_correlacao <- ggcorr(dados[, 1:5], 
                         method = c("everything", "pearson"),
                         label = TRUE, 
                         label_size = 3,
                         hjust = 0.8,
                         layout.exp = 1,
                         palette = "RdYlBu")

print(mapa_correlacao)
3. ggscatmat(): Matriz de Gráficos de Dispersão

Para focar apenas nos gráficos de dispersão entre variáveis:

# Matriz de dispersão simples
dispersao_matriz <- ggscatmat(dados, 
                             columns = 1:5,
                             color = "am",
                             alpha = 0.7)

print(dispersao_matriz)
4. Gráficos de Redes com ggnet2()

O GGally também permite criar gráficos de rede. Vamos criar um exemplo com dados simulados:

# Criando dados de exemplo para rede
library(network)

# Criando uma matriz de adjacência simples
set.seed(123)
matriz_adj <- matrix(sample(0:1, 25, replace = TRUE, prob = c(0.7, 0.3)), 5, 5)
diag(matriz_adj) <- 0

# Criando o objeto de rede
rede <- network(matriz_adj, directed = FALSE)

# Visualizando a rede
grafico_rede <- ggnet2(rede, 
                      node.size = 10,
                      node.color = "lightblue",
                      edge.size = 1,
                      edge.color = "gray")

print(grafico_rede)

PS: Eu sei que esse grago ficou mirradinho mas prometo fazer um outro post aqui sobre criação de grafos em larga escala com R e Python.

5. Gráficos de Sobrevivência com ggsurv()

Para análise de sobrevivência (requer o pacote survival):

# Exemplo com dados de sobrevivência
library(survival)

# Criando um objeto de sobrevivência
sobrevivencia <- survfit(Surv(time, status) ~ sex, data = lung)

# Plotando a curva de sobrevivência
curva_sobrevivencia <- ggsurv(sobrevivencia) +
  labs(title = "Curva de Sobrevivência por Sexo",
       x = "Tempo (dias)",
       y = "Probabilidade de Sobrevivência")

print(curva_sobrevivencia)
6. Personalizações Avançadas
Modificando Tipos de Gráficos na Matriz
# Função personalizada para a diagonal superior
minha_cor <- function(data, mapping, ...) {
  # Extraindo os nomes das variáveis do mapeamento
  x_var <- as.character(mapping$x)[2]
  y_var <- as.character(mapping$y)[2]
  
  # Calculando a correlação
  correlacao <- cor(data[[x_var]], data[[y_var]], use = "complete.obs")
  
  # Criando o gráfico com o valor da correlação
  ggplot(data = data, mapping = mapping) +
    geom_text(aes(x = mean(range(!!mapping$x)), 
                  y = mean(range(!!mapping$y))),
              label = round(correlacao, 3), 
              size = 4, 
              color = "black") +
    theme_minimal() +
    theme(axis.text = element_blank(),
          axis.ticks = element_blank())
}

# Função personalizada para a diagonal inferior
meu_scatter <- function(data, mapping, ...) {
  ggplot(data = data, mapping = mapping) +
    geom_point(alpha = 0.6, size = 2) +
    geom_smooth(method = "lm", color = "red", se = FALSE) +
    theme_minimal()
}

# Aplicando personalizações
matriz_personalizada <- ggpairs(dados,
                               aes(color = am),
                               upper = list(continuous = minha_cor),
                               lower = list(continuous = meu_scatter),
                               diag = list(continuous = wrap("densityDiag", alpha = 0.7)),
                               title = "Análise Personalizada dos Dados de Carros")

print(matriz_personalizada)
Salvando Gráficos com Alta Qualidade
# Salvando a matriz de correlação
ggsave("matriz_correlacao.png", 
       plot = matriz_colorida, 
       width = 12, 
       height = 10, 
       dpi = 300)

# Salvando o mapa de calor
ggsave("mapa_calor_correlacao.png", 
       plot = mapa_correlacao, 
       width = 8, 
       height = 6, 
       dpi = 300)
Vantagens do GGally
  1. Automatização: Cria múltiplos gráficos automaticamente
  2. Flexibilidade: Permite personalização completa usando sintaxe ggplot2
  3. Eficiência: Ideal para análise exploratória rápida
  4. Integração: Funciona perfeitamente com o ecossistema tidyverse
  5. Variedade: Suporta diferentes tipos de visualização em um único pacote
Dicas Importantes
  • Use ggpairs() para uma visão geral completa dos seus dados
  • Para datasets grandes, considere usar uma amostra ou selecionar variáveis específicas
  • Sempre ajuste os parâmetros de transparência (alpha) para melhor visualização
  • Combine com dplyr para preparar os dados antes da visualização

O GGally é uma ferramenta essencial para qualquer cientista/analista de dados que trabalhe com R. Sua capacidade de criar visualizações complexas com código simples torna a análise exploratória muito mais eficiente e intuitiva.

Código Final Completo
# Carregamento dos pacotes
library(GGally)
library(ggplot2)
library(dplyr)
library(survival)
library(network)

# Preparação dos dados
data(mtcars)
dados <- mtcars |>
  select(mpg, disp, hp, wt, qsec, vs, am) |>
  mutate(am = factor(am, labels = c("Automático", "Manual")))

# 1. Matriz de correlação básica
matriz_basica <- ggpairs(dados)

# 2. Matriz de correlação personalizada
matriz_colorida <- ggpairs(dados, 
                          aes(color = am),
                          title = "Matriz de Correlação - Dados de Carros",
                          upper = list(continuous = wrap("cor", size = 4)),
                          lower = list(continuous = wrap("points", alpha = 0.7)),
                          diag = list(continuous = wrap("densityDiag", alpha = 0.5)))

# 3. Mapa de calor das correlações
mapa_correlacao <- ggcorr(dados[, 1:5], 
                         method = c("everything", "pearson"),
                         label = TRUE, 
                         label_size = 3,
                         hjust = 0.8,
                         layout.exp = 1,
                         palette = "RdYlBu")

# 4. Matriz de dispersão
dispersao_matriz <- ggscatmat(dados, 
                             columns = 1:5,
                             color = "am",
                             alpha = 0.7)

# 5. Gráfico de rede
set.seed(123)
matriz_adj <- matrix(sample(0:1, 25, replace = TRUE, prob = c(0.7, 0.3)), 5, 5)
diag(matriz_adj) <- 0
rede <- network(matriz_adj, directed = FALSE)

grafico_rede <- ggnet2(rede, 
                      node.size = 10,
                      node.color = "lightblue",
                      edge.size = 1,
                      edge.color = "gray")

# 6. Curva de sobrevivência
sobrevivencia <- survfit(Surv(time, status) ~ sex, data = lung)
curva_sobrevivencia <- ggsurv(sobrevivencia) +
  labs(title = "Curva de Sobrevivência por Sexo",
       x = "Tempo (dias)",
       y = "Probabilidade de Sobrevivência")

# 7. Personalizações avançadas
minha_cor <- function(data, mapping, ...) {
  # Extraindo os nomes das variáveis do mapeamento
  x_var <- as.character(mapping$x)[2]
  y_var <- as.character(mapping$y)[2]
  
  # Calculando a correlação
  correlacao <- cor(data[[x_var]], data[[y_var]], use = "complete.obs")
  
  # Criando o gráfico com o valor da correlação
  ggplot(data = data, mapping = mapping) +
    geom_text(aes(x = mean(range(!!mapping$x)), 
                  y = mean(range(!!mapping$y))),
              label = round(correlacao, 3), 
              size = 4, 
              color = "black") +
    theme_minimal() +
    theme(axis.text = element_blank(),
          axis.ticks = element_blank())
}

meu_scatter <- function(data, mapping, ...) {
  ggplot(data = data, mapping = mapping) +
    geom_point(alpha = 0.6, size = 2) +
    geom_smooth(method = "lm", color = "red", se = FALSE) +
    theme_minimal()
}

matriz_personalizada <- ggpairs(dados,
                               aes(color = am),
                               upper = list(continuous = minha_cor),
                               lower = list(continuous = meu_scatter),
                               diag = list(continuous = wrap("densityDiag", alpha = 0.7)),
                               title = "Análise Personalizada dos Dados de Carros")

# Visualizando os gráficos
print(matriz_basica)
print(matriz_colorida)
print(mapa_correlacao)
print(dispersao_matriz)
print(grafico_rede)
print(curva_sobrevivencia)
print(matriz_personalizada)

# Salvando os gráficos
ggsave("matriz_correlacao.png", plot = matriz_colorida, width = 12, height = 10, dpi = 300)
ggsave("mapa_calor_correlacao.png", plot = mapa_correlacao, width = 8, height = 6, dpi = 300)

Comentários

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *