Correlação

A seguir, você deseja testar a correlação com outras variáveis (pseudo-métricas). No Bloco de Aprendizagem 3, você já conheceu pairs.panel() da biblioteca psych e corrplot() da biblioteca corrplot. Agora, em vez de usar a biblioteca psych, vamos primeiro criar um gráfico com a biblioteca GGally, pois ele é gerado seguindo a mesma lógica de todos os ggplots. Para isso, você usará a função ggpairs().

Um gráfico com ggpairs() é estruturado da mesma forma que um gráfico com pairs.panel():

Exemplo de gráfico ggpairs É essencialmente uma representação matricial. Há um terço inferior lower, um terço superior upper e uma diagonal diag. Para cada uma dessas partes, você pode definir configurações, dependendo se o par de valores na célula da matriz são ambas variáveis contínuas (continuous), ambas variáveis discretas (discrete) ou uma combinação (combo).

Pense rapidamente: Todas essas três combinações também podem ocorrer na diagonal?

Antes de começar o desafio, uma breve introdução ao GGally. Você pode simplesmente usar a função ggpairs() da biblioteca.

install.packages("GGally")
library("GGally")

Você pode criar um painel de pares facilmente com a função ggpairs(): No primeiro argumento, insira o conjunto de dados e no argumento columns, você pode restringir a seleção a variáveis específicas. Aqui, vamos começar com stfdem, agea e gndr. Sim, você também pode incluir variáveis categóricas!

ggpairs(
  pss, 
  columns = c(
    "stfdem",
    "agea",
    "gndr"
    )
)
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).

Assim, você obterá as configurações padrão do gráfico. Na diagonal, a densidade é exibida se a variável for contínua ou um gráfico de barras se a variável for discreta. No terço superior, se ambas as variáveis forem contínuas, a correlação é exibida. Se houver uma combinação (ou seja, uma variável contínua e a outra discreta), você verá um boxplot. Se ambas as variáveis forem discretas (o que não se aplica aqui), as frequências agrupadas são simplesmente exibidas em um gráfico de barras. Portanto, você terá uma visão geral direta das variáveis.

Também é possível ajustar as áreas individuais: Vamos começar com lower, pois queremos alterar a binwidth. No argumento lower, nomeamos uma lista: que contém o que queremos representar especificamente em continuous, combo ou discrete. Se você deseja fazer alterações na representação, deve colocá-las na função wrap() e lá você pode fazer alterações como nos ggplots normais. Agora, vamos definir que em pares de valores contínuos, um gráfico de dispersão deve ser exibido (points) e em pares de valores mistos (contínuo - discreto), histogramas em um Facet (facethist), onde definimos a binwidth como \(1\). Além disso, definimos que a cor deve variar de acordo com a categoria da variável gndr (mapping = aes(color = gndr)).

ggpairs(
  pss, 
  columns = c(
    "stfdem",
    "agea",
    "gndr"
    ),
  lower = list(
    continuous = "points",
    combo = wrap(
      "facethist",
      binwidth = 1
      ),
    mapping = aes(color = gndr)
  )
)
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).

Vemos que o gráfico de dispersão ainda não está totalmente otimizado, pois uma variável é pseudo-métrica. Portanto, vamos adicionar jitter:

ggpairs(
  pss, 
  columns = c(
    "stfdem",
    "agea",
    "gndr"
    ),
  lower = list(
    continuous = wrap(
      "points",
      position = position_jitter(width = 0.5)
    ),
    combo = wrap(
      "facethist",
      binwidth = 1
      ),
    mapping = aes(color = gndr)
  )
)
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).

Agora o gráfico já está melhor e mostra que provavelmente não há uma relação entre idade e satisfação com a democracia.

Agora vamos ajustar o terço superior upper. Vamos definir que a correlação deve ser exibida para pares contínuos e um boxplot para pares combo. Também vamos definir que as cores devem ser diferentes por gênero.

ggpairs(
  pss, 
  columns = c(
    "stfdem",
    "agea",
    "gndr"
    ),
  lower = list(
    continuous = wrap(
      "points",
      position = position_jitter(width = 0.5)
    ),
    combo = wrap(
      "facethist",
      binwidth = 1
      ),
    mapping = aes(color = gndr)
  ),
  upper = list(
    continuous = "cor",
    combo = "box_no_facet",
    mapping = aes(color = gndr)
  )
)
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).

Existem boas opções de representação para continuous em lower e upper (uma visão geral completa está disponível aqui):

  • points
  • cor
  • density
  • smooth / smooth_lm

Para combo, existem opções recomendadas em lower e upper: - box_no_facet / box - facethist

A seguir, vamos ajustar a diagonal!

pp1 <- ggpairs(
  pss, 
  columns = c(
    "stfdem",
    "agea",
    "gndr"
    ),
  lower = list(
    continuous = wrap(
      "points",
      position = position_jitter(width = 0.5)
    ),
    combo = wrap(
      "facethist",
      binwidth = 1
      ),
    mapping = aes(color = gndr)
  ),
  upper = list(
    continuous = "cor",
    combo = "box_no_facet",
    mapping = aes(color = gndr)
  ),
  diag = list(
    continuous = wrap("densityDiag", bw = 1),
    discrete = "barDiag",
    mapping = aes(
      color = gndr, 
      alpha = 1
    )
  )
)

pp1
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).

No argumento diag, há menos opções:

  • barDiag
  • densityDiag
  • blankDiag (diagonal está vazia)

Experimente no código e brinque com as opções disponíveis.

Agora, por fim, vamos ajustar as cores novamente e usar a biblioteca beyonce: Lembre-se de que você pode ajustar as cores manualmente com scale_color_manual() ou scale_fill_manual()!

library("beyonce")

pp1 +
  scale_color_manual(values = beyonce_palette(72)) +
  scale_fill_manual(values = beyonce_palette(72))
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 249 rows containing missing values
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 249 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 95 rows containing non-finite outside the scale range
## (`stat_bin()`).
## Warning: Removed 157 rows containing non-finite outside the scale range
## (`stat_bin()`).

Na próxima página, vamos para o desafio!