Teoria dos Coeficientes de Correlação

A correlação mede a força e a direção da relação linear ou monotônica entre duas variáveis quantitativas. O valor do coeficiente de correlação, frequentemente representado por r (amostra) ou ρ (população), varia entre −1 e 1.

valor de r Significado Teórico
r=1 Correlação Perfeita Positiva (Diretamente Proporcional). À medida que uma variável aumenta, a outra aumenta na mesma proporção.
r>0 Correlação Positiva. À medida que uma variável aumenta, a outra tende a aumentar.
r≈0 Ausência de Correlação Linear. As variáveis não têm uma relação linear clara.
r<0 Correlação Negativa (Inversamente Proporcional). À medida que uma variável aumenta, a outra tende a diminuir.
r=−1 Correlação Perfeita Negativa. À medida que uma variável aumenta, a outra diminui na mesma proporção.

Os três principais tipos de coeficientes de correlação:

  1. Pearson (Paramétrica): Mede a relação linear e pressupõe que os dados são contínuos, têm uma distribuição aproximadamente normal e não possuem outliers significativos.

  2. Spearman (Não Paramétrica): Mede a relação monotônica (a tendência de as variáveis mudarem juntas) e é baseado nos postos (ordem) dos dados. É robusto para dados não-normais, relações não-lineares e variáveis ordinais.

  3. Kendall (Não Paramétrica): Semelhante ao Spearman, mede a força de dependência entre pares de variáveis (concordância) e é também uma alternativa não paramétrica, útil para dados ordinais ou contínuos com outliers.

Iremos utilizar o dataset embutido do R, mtcars (Motor Trend Car Road Tests), que contém dados de 32 automóveis.

1. Pacotes Utilizados

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   4.0.0     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library (dplyr)
library(ggcorrplot)
Comando Descrição
library(tidyverse) Carrega um conjunto de pacotes (como dplyr e ggplot2) que são essenciais para manipulação, análise e visualização de dados.
library(ggplot2) Pacote fundamental para a criação de gráficos estatísticos (já incluído no tidyverse, mas listado separadamente).
library(dplyr) Pacote para manipulação de dados, como filtragem, seleção e sumarização (já incluído no tidyverse, mas listado separadamente).
library(ggcorrplot) Pacote especializado para visualizar a matriz de correlação em formato de mapa de calor (heatmap).

2. Banco de Dados e Gráfico de Dispersão Simples

Comando Descrição
mtcars Exibe o conjunto de dados.
?mtcars Abre a documentação (ajuda) do conjunto de dados para entender as variáveis.
mtcars %>% ggplot(aes(x=wt, y=mpg)) + geom_point() Cria um gráfico de dispersão simples. Ele plota as Milhas por Galão (mpg) em função do Peso do Carro (wt). A visualização é o primeiro passo para confirmar se a relação é linear e negativa (carro mais pesado → menor milhagem).
# grafico de dispersão simples
mtcars %>% 
  ggplot(aes(x=wt, y=mpg)) + geom_point()

3. Coeficientes de Correlação (Entre Duas Variáveis)

Estes comandos aplicam a teoria descrita acima às variáveis mpg e wt para demonstrar a aplicação de cada método.

Comando Descrição
cor(mtcars$mpg, mtcars$wt, method = c("pearson")) Calcula o coeficiente de Pearson entre as duas variáveis. Espera-se um valor negativo próximo de −1, indicando uma forte relação linear inversa.
cor(mtcars$mpg, mtcars$wt, method = c("spearman")) Calcula o coeficiente de Spearman. Uma alternativa robusta, que geralmente fornece resultados similares ao Pearson para relações lineares fortes.
cor(mtcars$mpg, mtcars$wt, method = c("kendall")) Calcula o coeficiente de Kendall. Outra medida não paramétrica de dependência.
cor(mtcars$mpg, mtcars$wt, method = c("pearson"))
## [1] -0.8676594
cor(mtcars$mpg, mtcars$wt, method = c("spearman"))
## [1] -0.886422
cor(mtcars$mpg, mtcars$wt, method = c("kendall"))
## [1] -0.7278321

4. Matriz de Correlação

Em vez de calcular a correlação entre apenas duas variáveis, a matriz de correlação calcula o coeficiente para todos os pares possíveis de variáveis no dataset mtcars.

Comando Descrição
cor(mtcars, method = "spearman") Calcula a matriz usando o método Spearman (baseado em postos) para todas as colunas.
cor(mtcars, method = "pearson") Calcula a matriz usando o método Pearson.
cor(mtcars, method = "kendall") Calcula a matriz usando o método Kendall.
correl <- cor(mtcars, method = "spearman") Armazena a matriz de correlação de Spearman na variável correl para uso nos gráficos de heatmap.
## Matriz de correlaçao
cor(mtcars, method = "spearman")
##             mpg        cyl       disp         hp        drat         wt
## mpg   1.0000000 -0.9108013 -0.9088824 -0.8946646  0.65145546 -0.8864220
## cyl  -0.9108013  1.0000000  0.9276516  0.9017909 -0.67888119  0.8577282
## disp -0.9088824  0.9276516  1.0000000  0.8510426 -0.68359210  0.8977064
## hp   -0.8946646  0.9017909  0.8510426  1.0000000 -0.52012499  0.7746767
## drat  0.6514555 -0.6788812 -0.6835921 -0.5201250  1.00000000 -0.7503904
## wt   -0.8864220  0.8577282  0.8977064  0.7746767 -0.75039041  1.0000000
## qsec  0.4669358 -0.5723509 -0.4597818 -0.6666060  0.09186863 -0.2254012
## vs    0.7065968 -0.8137890 -0.7236643 -0.7515934  0.44745745 -0.5870162
## am    0.5620057 -0.5220712 -0.6240677 -0.3623276  0.68657079 -0.7377126
## gear  0.5427816 -0.5643105 -0.5944703 -0.3314016  0.74481617 -0.6761284
## carb -0.6574976  0.5800680  0.5397781  0.7333794 -0.12522294  0.4998120
##             qsec         vs          am       gear        carb
## mpg   0.46693575  0.7065968  0.56200569  0.5427816 -0.65749764
## cyl  -0.57235095 -0.8137890 -0.52207118 -0.5643105  0.58006798
## disp -0.45978176 -0.7236643 -0.62406767 -0.5944703  0.53977806
## hp   -0.66660602 -0.7515934 -0.36232756 -0.3314016  0.73337937
## drat  0.09186863  0.4474575  0.68657079  0.7448162 -0.12522294
## wt   -0.22540120 -0.5870162 -0.73771259 -0.6761284  0.49981205
## qsec  1.00000000  0.7915715 -0.20333211 -0.1481997 -0.65871814
## vs    0.79157148  1.0000000  0.16834512  0.2826617 -0.63369482
## am   -0.20333211  0.1683451  1.00000000  0.8076880 -0.06436525
## gear -0.14819967  0.2826617  0.80768800  1.0000000  0.11488698
## carb -0.65871814 -0.6336948 -0.06436525  0.1148870  1.00000000
cor(mtcars, method = "pearson")
##             mpg        cyl       disp         hp        drat         wt
## mpg   1.0000000 -0.8521620 -0.8475514 -0.7761684  0.68117191 -0.8676594
## cyl  -0.8521620  1.0000000  0.9020329  0.8324475 -0.69993811  0.7824958
## disp -0.8475514  0.9020329  1.0000000  0.7909486 -0.71021393  0.8879799
## hp   -0.7761684  0.8324475  0.7909486  1.0000000 -0.44875912  0.6587479
## drat  0.6811719 -0.6999381 -0.7102139 -0.4487591  1.00000000 -0.7124406
## wt   -0.8676594  0.7824958  0.8879799  0.6587479 -0.71244065  1.0000000
## qsec  0.4186840 -0.5912421 -0.4336979 -0.7082234  0.09120476 -0.1747159
## vs    0.6640389 -0.8108118 -0.7104159 -0.7230967  0.44027846 -0.5549157
## am    0.5998324 -0.5226070 -0.5912270 -0.2432043  0.71271113 -0.6924953
## gear  0.4802848 -0.4926866 -0.5555692 -0.1257043  0.69961013 -0.5832870
## carb -0.5509251  0.5269883  0.3949769  0.7498125 -0.09078980  0.4276059
##             qsec         vs          am       gear        carb
## mpg   0.41868403  0.6640389  0.59983243  0.4802848 -0.55092507
## cyl  -0.59124207 -0.8108118 -0.52260705 -0.4926866  0.52698829
## disp -0.43369788 -0.7104159 -0.59122704 -0.5555692  0.39497686
## hp   -0.70822339 -0.7230967 -0.24320426 -0.1257043  0.74981247
## drat  0.09120476  0.4402785  0.71271113  0.6996101 -0.09078980
## wt   -0.17471588 -0.5549157 -0.69249526 -0.5832870  0.42760594
## qsec  1.00000000  0.7445354 -0.22986086 -0.2126822 -0.65624923
## vs    0.74453544  1.0000000  0.16834512  0.2060233 -0.56960714
## am   -0.22986086  0.1683451  1.00000000  0.7940588  0.05753435
## gear -0.21268223  0.2060233  0.79405876  1.0000000  0.27407284
## carb -0.65624923 -0.5696071  0.05753435  0.2740728  1.00000000
cor(mtcars, method = "kendall")
##             mpg        cyl       disp         hp        drat         wt
## mpg   1.0000000 -0.7953134 -0.7681311 -0.7428125  0.46454879 -0.7278321
## cyl  -0.7953134  1.0000000  0.8144263  0.7851865 -0.55131785  0.7282611
## disp -0.7681311  0.8144263  1.0000000  0.6659987 -0.49898277  0.7433824
## hp   -0.7428125  0.7851865  0.6659987  1.0000000 -0.38262689  0.6113081
## drat  0.4645488 -0.5513178 -0.4989828 -0.3826269  1.00000000 -0.5471495
## wt   -0.7278321  0.7282611  0.7433824  0.6113081 -0.54714953  1.0000000
## qsec  0.3153652 -0.4489698 -0.3008155 -0.4729061  0.03272155 -0.1419881
## vs    0.5896790 -0.7710007 -0.6033059 -0.6305926  0.37510111 -0.4884787
## am    0.4690128 -0.4946212 -0.5202739 -0.3039956  0.57554849 -0.6138790
## gear  0.4331509 -0.5125435 -0.4759795 -0.2794458  0.58392476 -0.5435956
## carb -0.5043945  0.4654299  0.4137360  0.5959842 -0.09535193  0.3713741
##             qsec         vs          am        gear        carb
## mpg   0.31536522  0.5896790  0.46901280  0.43315089 -0.50439455
## cyl  -0.44896982 -0.7710007 -0.49462115 -0.51254349  0.46542994
## disp -0.30081549 -0.6033059 -0.52027392 -0.47597955  0.41373600
## hp   -0.47290613 -0.6305926 -0.30399557 -0.27944584  0.59598416
## drat  0.03272155  0.3751011  0.57554849  0.58392476 -0.09535193
## wt   -0.14198812 -0.4884787 -0.61387896 -0.54359562  0.37137413
## qsec  1.00000000  0.6575431 -0.16890405 -0.09126069 -0.50643945
## vs    0.65754312  1.0000000  0.16834512  0.26974788 -0.57692729
## am   -0.16890405  0.1683451  1.00000000  0.77078758 -0.05859929
## gear -0.09126069  0.2697479  0.77078758  1.00000000  0.09801487
## carb -0.50643945 -0.5769273 -0.05859929  0.09801487  1.00000000

5. Gráfico da Matriz de Correlação (Heatmap)

Esta seção aplica o pacote ggcorrplot para visualizar a matriz de correlação, tornando a interpretação de muitas relações de pares muito mais fácil.

Comando Descrição
ggcorrplot(correl) Cria o heatmap básico da matriz armazenada.
ggcorrplot(correl, method = "circle") Define a forma dos elementos (neste caso, círculos) para representar a magnitude da correlação.
ggcorrplot(correl, method = "circle", hc.order = TRUE) Ordena as variáveis usando um método de agrupamento hierárquico (hc.order = TRUE), o que agrupa visualmente variáveis com correlações similares.
ggcorrplot(..., type = "lower") Exibe apenas a metade inferior da matriz, pois a matriz é simétrica (a correlação de A com B é a mesma de B com A), simplificando a visualização.
ggcorrplot(..., lab = TRUE, lab_size = 3.5) Adiciona os valores numéricos (lab = TRUE) dos coeficientes de correlação diretamente no gráfico.
ggcorrplot(..., p.mat = cor_pmat(mtcars), insig = "blank") O comando mais avançado: Ele calcula os valores-p (p.mat) de cada correlação e, em seguida, deixa em branco (insig = "blank") aquelas correlações que não são estatisticamente significativas. Isso foca a atenção apenas nas correlações que não são devidas ao acaso (nível de significância padrão α=0.05).
correl <- cor(mtcars, method = "spearman")
ggcorrplot(correl)
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the ggcorrplot package.
##   Please report the issue at <https://github.com/kassambara/ggcorrplot/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

ggcorrplot(correl, method = "circle")

ggcorrplot(correl, method = "circle", hc.order = TRUE)

ggcorrplot(correl, method = "circle", hc.order = TRUE, type = "lower")

ggcorrplot(correl, method = "square", hc.order = TRUE, type = "lower",
           lab = TRUE, lab_size = 3.5)

ggcorrplot(
  correl,
  method = "square",
  hc.order = TRUE,
  type = "lower",
  lab = TRUE,
  lab_size = 3.5,
  p.mat = cor_pmat(mtcars), 
                   insig = "blank"
  )