Espero que no final desse artigo você entenda o que é uma matriz de correlação e seja capaz de fazer visualizações de uma matriz de correlação no R como da figura abaixo:

Introducão

No trabalho com análise de dados, muitas vezes precisamos construir uma matriz de correlação para descrever se há alguma associação entre as variáveis do seu conjunto de análise. Uma matriz de correlação é uma tabela mostrando coeficientes de correlação entre variáveis. Cada célula na tabela mostra a correlação entre duas variáveis.

O que é correlação?

No sentido mais amplo, correlação é qualquer associação estatística, embora, no uso comum, na maioria das vezes se refira a quão próximas duas variáveis estão de ter uma relação linear entre si que é a forma de correlação mais conhecida e chamada de correlação de Pearson. Essa correlação é a que tratamos aqui. Exemplos familiares de fenômenos dependentes incluem a correlação entre a estatura física dos pais e seus descendentes e a correlação entre a demanda por um produto de oferta limitada e seu preço.

Como interpretar o resultado?

A correlação é um número que varia entre -1 e 1. Em estatística é representado pela letra r.

A fórmula é:

\[\mathbf{r} = \frac{\sum_{} (x - \bar{x}) (y - \bar{y}) }{\sqrt{\sum_{}(x - \bar{x})^2 \sum_{}(y - \bar{y})^2}} \]

Uma correlação pode ser positiva(r > 0), o que significa que ambas as variáveis se movem na mesma direção ou são negativas(r < 0), o que significa que se movem em direções opostas, ou seja, quando o valor de uma variável aumenta, o valor da outra variávei diminui. A correlação também pode ser nula ou zero, o que significa que as variáveis não estão relacionadas.

Pela fórmula a correlação é um número entre -1 e 1 e interpretamos da seguinte maneira: quanto mais o r estiver próximo de 1 ou -1 mais forte será a correlação.

Aplicações de uma matriz de correlação

Algumas aplicações são:

Usando o R

Usaremos a biblioteca corrplot para visualização das correlações. Além disso usaremos o datatrame “mtcars”, que significa “Motor Trend Car Road Tests”. Esse dataframe tem 32 observações de 11 variáveis numéricas e já está instalado no R.

Nesse dataframe temos as seguintes variáveis:

# Biblioteca:

library(corrplot)

Leitura dos dados

Vamos verificar a estrutura dos dados, ver que tipo de dados temos

# estrutura

str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ 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  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

Vamos verificar se há dados ausentes para que possamos iniciar nossa visualização. Para isso vamos usar a função is.na que retorna “TRUE” se houver valor faltante(“na”) e retorna “FALSE” se não houver.

# verificar se há dados faltantes

is.na(mtcars)
##                       mpg   cyl  disp    hp  drat    wt  qsec    vs    am
## Mazda RX4           FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Mazda RX4 Wag       FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Datsun 710          FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Hornet 4 Drive      FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Hornet Sportabout   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Valiant             FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Duster 360          FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Merc 240D           FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Merc 230            FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Merc 280            FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Merc 280C           FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Merc 450SE          FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Merc 450SL          FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Merc 450SLC         FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Cadillac Fleetwood  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Lincoln Continental FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Chrysler Imperial   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Fiat 128            FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Honda Civic         FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Toyota Corolla      FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Toyota Corona       FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Dodge Challenger    FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## AMC Javelin         FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Camaro Z28          FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Pontiac Firebird    FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Fiat X1-9           FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Porsche 914-2       FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Lotus Europa        FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Ford Pantera L      FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Ferrari Dino        FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Maserati Bora       FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## Volvo 142E          FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##                      gear  carb
## Mazda RX4           FALSE FALSE
## Mazda RX4 Wag       FALSE FALSE
## Datsun 710          FALSE FALSE
## Hornet 4 Drive      FALSE FALSE
## Hornet Sportabout   FALSE FALSE
## Valiant             FALSE FALSE
## Duster 360          FALSE FALSE
## Merc 240D           FALSE FALSE
## Merc 230            FALSE FALSE
## Merc 280            FALSE FALSE
## Merc 280C           FALSE FALSE
## Merc 450SE          FALSE FALSE
## Merc 450SL          FALSE FALSE
## Merc 450SLC         FALSE FALSE
## Cadillac Fleetwood  FALSE FALSE
## Lincoln Continental FALSE FALSE
## Chrysler Imperial   FALSE FALSE
## Fiat 128            FALSE FALSE
## Honda Civic         FALSE FALSE
## Toyota Corolla      FALSE FALSE
## Toyota Corona       FALSE FALSE
## Dodge Challenger    FALSE FALSE
## AMC Javelin         FALSE FALSE
## Camaro Z28          FALSE FALSE
## Pontiac Firebird    FALSE FALSE
## Fiat X1-9           FALSE FALSE
## Porsche 914-2       FALSE FALSE
## Lotus Europa        FALSE FALSE
## Ford Pantera L      FALSE FALSE
## Ferrari Dino        FALSE FALSE
## Maserati Bora       FALSE FALSE
## Volvo 142E          FALSE FALSE

Parece que não há valores faltantes. Para confirmar vamos aplicar a função sum e usar o fato de que a sentença lógica TRUE é igual a 1.

# verificar se há dados faltantes

sum(is.na(mtcars))
## [1] 0

Como o resultado da soma foi 0, confirmamos que não há valores faltantes.

Agora podemos continuar.Usando a função summary verificamos algumas estatisticas.

# Descriptive statistics of dataset
summary(mtcars)
##       mpg             cyl             disp             hp       
##  Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0  
##  1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5  
##  Median :19.20   Median :6.000   Median :196.3   Median :123.0  
##  Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7  
##  3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0  
##  Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0  
##       drat             wt             qsec             vs        
##  Min.   :2.760   Min.   :1.513   Min.   :14.50   Min.   :0.0000  
##  1st Qu.:3.080   1st Qu.:2.581   1st Qu.:16.89   1st Qu.:0.0000  
##  Median :3.695   Median :3.325   Median :17.71   Median :0.0000  
##  Mean   :3.597   Mean   :3.217   Mean   :17.85   Mean   :0.4375  
##  3rd Qu.:3.920   3rd Qu.:3.610   3rd Qu.:18.90   3rd Qu.:1.0000  
##  Max.   :4.930   Max.   :5.424   Max.   :22.90   Max.   :1.0000  
##        am              gear            carb      
##  Min.   :0.0000   Min.   :3.000   Min.   :1.000  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.:2.000  
##  Median :0.0000   Median :4.000   Median :2.000  
##  Mean   :0.4062   Mean   :3.688   Mean   :2.812  
##  3rd Qu.:1.0000   3rd Qu.:4.000   3rd Qu.:4.000  
##  Max.   :1.0000   Max.   :5.000   Max.   :8.000

Agora podemos visualizar a matriz de correlação:

# Create correlation matrix of data
res <- cor(mtcars) # Corr matrix
round(res, 2)
##        mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
## mpg   1.00 -0.85 -0.85 -0.78  0.68 -0.87  0.42  0.66  0.60  0.48 -0.55
## cyl  -0.85  1.00  0.90  0.83 -0.70  0.78 -0.59 -0.81 -0.52 -0.49  0.53
## disp -0.85  0.90  1.00  0.79 -0.71  0.89 -0.43 -0.71 -0.59 -0.56  0.39
## hp   -0.78  0.83  0.79  1.00 -0.45  0.66 -0.71 -0.72 -0.24 -0.13  0.75
## drat  0.68 -0.70 -0.71 -0.45  1.00 -0.71  0.09  0.44  0.71  0.70 -0.09
## wt   -0.87  0.78  0.89  0.66 -0.71  1.00 -0.17 -0.55 -0.69 -0.58  0.43
## qsec  0.42 -0.59 -0.43 -0.71  0.09 -0.17  1.00  0.74 -0.23 -0.21 -0.66
## vs    0.66 -0.81 -0.71 -0.72  0.44 -0.55  0.74  1.00  0.17  0.21 -0.57
## am    0.60 -0.52 -0.59 -0.24  0.71 -0.69 -0.23  0.17  1.00  0.79  0.06
## gear  0.48 -0.49 -0.56 -0.13  0.70 -0.58 -0.21  0.21  0.79  1.00  0.27
## carb -0.55  0.53  0.39  0.75 -0.09  0.43 -0.66 -0.57  0.06  0.27  1.00

Essa é a matriz de correlação. Não está fácil de entender, não é? Vamos melhorar a visualização dessa matriz de correlação com a função corrplot:

corrplot(cor(mtcars), method = "circle")

Agora ficou bem visual. Observe que quanto maior o círculo maior a correlação entre as variaveis. Além disso, quanto mais azul escuro, mais próxima a correlação fica de 1, que significa que além de forte a correlação é positiva. Equivalentemente quanto mais próximo de vermelho escuro, mais próxima a correlação fica de -1, que significa que além de forte a correlação é negativa.

Podemos mudar o formato da exibição mudando “method” :

corrplot(cor(mtcars), method = "square")

corrplot(cor(mtcars), method = "color")

corrplot(cor(mtcars), method ='number')

corrplot(cor(mtcars), method ='pie')

corrplot(cor(mtcars), method ='shade')

A interpretação dessas matrizes é semelhante a da primeira.

Conclusão

Vimos que o R melhora muito a visualização de correlações e matrizes de correlações. Além do que, isso é feito de uma forma rápida, com uma linha de código e usando o pacote corrplot fica mais fácil ainda visualizar as correlações! Esse é só um exemplo de biblioteca, existem outras no R que também auxiliam na visualização da correlação entre as variáveis. Espero que você tenha entendido melhor o que é matriz de correlação e como fazer visualizar no R.

Keep calm and analysing data!