Correlação com R

Neste post escrevo sobre correlação entre duas variáveis, como encontrar e interpretar esse conceito.

Guilherme Bastos Gomes https://gbastosg.github.io/guilhermesportfolio/
2022-05-15

Olá!

Neste post irei trabalhar com correlações.

Correlação

Correlação é uma medida estatística que leva em consideração o grau de separação (ou união) de duas variáveis. É importante dizer que a correlação mede a associação entre duas variáveis, e não nos mostra se uma CAUSA a outra, ou vice-versa. Também não mostra se a associação está sendo causada por outro fator em nossos dados.

O que a correlação pode nos mostrar?

A partir de duas variáveis podemos obter um valor numérico conhecido como coeficiente de correlação, que varia de -1 até 1.

Esse coeficiente nos mostra a relação entre as duas distribuições, se for positivo estará perto de 1, se negativo, ou seja o incremento de uma variável causa efeito inverso na outra, então o valor do coeficiente se aproxima de -1. Se uma variação não afetar a outra, então não há correlação linear clara e o valor se aproxima de 0.

Existem várias formas e métodos de se obter o coeficiente de correlação em R, vamos testar algumas com o data set mpg

library(tidyverse)

Correlação no R

O coeficiente de correlação pode ser calculado usando as funções cor() ou cor.test(), onde:

Podemos usar as funções, juntamente com os diversos testes da seguinte forma:

Será que existe correlação entre a variável displ (deslocamento do motor) e cty (milhas por galão na cidade)?

O código:

mpg %>% 
  ggplot(aes(x = displ, y = cty, color = class)) +  
    geom_point() + 
    labs( 
      title = "Relação entre as variáveis tipo de motor e milhas por galão",
      subtitle = "by: Guilherme Bastos Gomes", 
      caption = "Source: mpg data set", 
      x = "Tipo de motor (deslocamento)",
      y = "Milhas por galão (na cidade)" 
    ) + 
    theme_classic() 

Perceba que existe uma tendência em nosso gráfico, que pode ser modelada como uma linha usando a função geom_smooth:

Observe como a linha explica (de certa forma) a relação entre as variáveis:

mpg %>% 
  ggplot(aes(x = displ, y = cty, color = class)) +  
    geom_point() + 
    labs( 
      title = "Relação entre as variáveis: tipo de motor e milhas por galão",
      subtitle = "by: Guilherme Bastos Gomes", 
      caption = "Source: mpg data set", 
      x = "Tipo de motor (deslocamento)",
      y = "Milhas por galão (na cidade)" 
    ) + 
    theme_classic() 

A linha aponta para o sentido da correlação, aqui temos:

Quanto maior o valor em tipo de motor, menor o valor em cty (milhas por galão na cidade)

Agora vamos usar testes de correlação para obter o coeficiente de correlação:

cor(mpg$displ, mpg$cty, method = c("pearson"))
[1] -0.798524

Perceba como o coeficiente de correlação está bem próximo de -1, evidenciando uma correlação negativa.

Existem 3 formas principais de se obter o coeficiente de correlação: “Pearson”, “Spearman” ou “Kendall”.

Para obtermos ainda mais evidencias sobre correlações podemos obter o coeficiente de correlação pelos outros métodos:

cor(mpg$displ, mpg$cty, method = c("spearman"))

cor(mpg$displ, mpg$cty, method = c("kendall"))
[1] -0.8809049
[1] -0.7210828

Perceba como o teste de Spearman dos deu um coeficiente de correlação ainda mais próximo de -1! É importante dizer que correlação nos mostra um padrão na relação entre as variáveis, mas não indica que uma causa a outra. Nos nossos dados estamos mostrando uma relação negativa entre tamanho do motor (1.4, 1.6, 3.5…) e as milhas percorridas por galão de combustível numa cidade, ou seja, quanto maior o tamanho do motor, menos milhas por galão um carro tende a percorrer. A explicação para este tipo de correlação pode parecer óbvia, mas ela nos mostra que motores potentes tendem a gastar mais combustível, o que pode afetar diretamente quem paga por esse produto.

Teste de correlação de Pearson

No último post investigamos a correlação entre as variáveis Largura da Sépala e Comprimento da Sépala, de cada espécie do data set iris:

iris %>% 
   ggplot(aes(x = Petal.Length, y = Petal.Width, color = Species)) +  
     geom_point() + 
     labs( 
       title = "Medidas em centímetros do tamanho das sépalas de flores de 3 espécies",
       subtitle = "by: Guilherme Bastos Gomes", 
       caption = "Source: Edgar Anderson's Iris Data set", 
       x = "Comprimento da Pétala",
       y = "Largura da Pétala" 
     ) +
     theme_classic() +
   facet_grid(~Species) +
   geom_smooth(method = "lm")

Vamos agora fazer um teste de correlação entre as variáveis Petal.Lengthe Petal.Width:

cor.test(iris$Petal.Length, iris$Petal.Width, 
                    method = "pearson")

Pearson’s product-moment correlation

data: iris$Petal.Length and iris$Petal.Width t = 43.387, df = 148, p-value < 2.2e-16 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: 0.9490525 0.9729853 sample estimates: cor 0.9628654

Nos resultados que obtivemos a partir do teste podemos interpretar:

Temos uma correlação positiva forte, com fortes evidências de que as medidas influenciam uma a outra positivamente, nos permitindo ter ideias a respeito do tipo de folha que podemos encontrar de cada uma dessas três espécies na natureza.

Interpretando os resultados

Voltando ao data set mpg onde temos uma correlação negativa entre duas variáveis:

ct <- cor.test(mpg$displ, mpg$cty, 
                    method = "pearson")
                    
ct

Pearson’s product-moment correlation

data: mpg$displ and mpg$cty t = -20.205, df = 232, p-value < 2.2e-16 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: -0.8406782 -0.7467508 sample estimates: cor -0.798524

A função cor.test() nos retorna uma lista contendo:

ct$p.value

ct$estimate

Em estatística, o p-value é a probabilidade de se obter resultados tão extremos quanto os resultados observados como resultado de um teste de hipótese, assumindo que a hipótese nula está correta. Sendo assim:

Não entrarei em muitos detalhes sobre p-value agora, escreverei mais sobre isso futuramente! ### Como fazer o teste de correlação:

cor.test(dataframe\$coluna1, dataframe\$coluna2, 
                    method = "pearson")

Espero ter ajudado! Obrigado por ter chegado até aqui! No próximo post falarei sobre p-value e hipótese nula.