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:
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.
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.
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.
Algumas aplicações são:
Resumir uma grande quantidade de dados em que o objetivo é encontrar padrões.
Verificar relação linear entre as variáveis e criar modelos de regressão univariado.
Uso em métodos multivariados como Análise fatorial ou Análise de Componentes Principais, sendo esse último, bastante usado em Machine Learning.
Ser usado como um diagnóstico ao verificar outras análises. Por exemplo, com a regressão linear multivariada, uma alta quantidade de correlações entre as variáveis preditoras sugere que as estimativas da regressão linear não serão confiáveis.
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)
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.
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!