Correlação em R: Matriz de Correlação de Pearson e Spearman

Correlação Bivariada em R

Um relacionamento bivariado descreve um relacionamento -ou correlação- entre duas variáveis ​​em R. Neste tutorial, discutiremos o conceito de correlação e mostraremos como ele pode ser usado para medir o relacionamento entre quaisquer duas variáveis ​​em R.

Correlação na Programação R

Existem dois métodos principais para calcular a correlação entre duas variáveis ​​na programação R:

  • Pearson: Correlação paramétrica
  • Lanceiro: Correlação não paramétrica

Matriz de Correlação de Pearson em R

O método de correlação de Pearson é geralmente usado como verificação primária da relação entre duas variáveis.

A Coeficiente de correlação, , é uma medida da força do linear relação entre duas variáveis ​​e . É calculado da seguinte forma:

Matriz de Correlação de Pearson em R

com

  • Matriz de Correlação de Pearson em R, ou seja, desvio padrão de
  • Matriz de Correlação de Pearson em R, ou seja, desvio padrão de

A correlação varia entre -1 e 1.

  • Um valor próximo ou igual a 0 implica pouca ou nenhuma relação linear entre e .
  • Em contraste, quanto mais próximo de 1 ou -1, mais forte será a relação linear.

Podemos calcular o teste t como segue e verificar a tabela de distribuição com um grau de liberdade igual a:

Matriz de Correlação de Pearson em R

Correlação de classificação de Spearman em R

Uma correlação de classificação classifica as observações por classificação e calcula o nível de similaridade entre as classificações. Uma correlação de classificação tem a vantagem de ser robusta a valores discrepantes e não estar vinculada à distribuição dos dados. Observe que uma correlação de classificação é adequada para a variável ordinal.

A correlação de classificação de Spearman, está sempre entre -1 e 1, com um valor próximo à extremidade indica forte relacionamento. É calculado da seguinte forma:

Correlação de classificação de Spearman em R

com declarou as covariâncias entre classificação e . O denominador calcula os desvios padrão.

Em R, podemos usar a função cor(). São necessários três argumentos, e o método.

cor(x, y, method)

Argumentos:

  • x: Primeiro vetor
  • y: Segundo vetor
  • método: A fórmula usada para calcular a correlação. Três valores de string:
    • “Pearson”
    • “Kendall”
    • "lanceiro"

Um argumento opcional pode ser adicionado se os vetores contiverem valores ausentes: use = “complete.obs”

Usaremos o conjunto de dados BudgetUK. Este conjunto de dados relata a alocação orçamentária das famílias britânicas entre 1980 e 1982. Existem 1519 observações com dez características, entre elas:

  • wfood: compartilhe alimentos, compartilhe gastos
  • combustível: compartilhe gastos com combustível
  • pano: parcela do orçamento para gastos com roupas
  • walc: compartilhe gastos com álcool
  • wtrans: compartilhar gastos com transporte
  • importa: parcela de gastos com outros bens
  • totex: gasto total da família em libras
  • rendimentos de capitais: renda familiar líquida total
  • idade: idade da família
  • crianças: número de filhos

Exemplo

library(dplyr)
PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/british_household.csv"
data <-read.csv(PATH)
  filter(income < 500)
  mutate(log_income = log(income),
         log_totexp = log(totexp),
         children_fac = factor(children, order = TRUE, labels = c("No", "Yes")))
  select(-c(X,X.1, children, totexp, income))
glimpse(data)

Explicação do código

  • Primeiro importamos os dados e damos uma olhada na função vislumbre() da biblioteca dplyr.
  • Três pontos estão acima de 500K, então decidimos excluí-los.
  • É uma prática comum converter uma variável monetária em log. Ajuda a reduzir o impacto de valores discrepantes e diminui a assimetria no conjunto de dados.

Saída:

## Observations: 1,516## Variables: 10
## $ wfood        <dbl> 0.4272, 0.3739, 0.1941, 0.4438, 0.3331, 0.3752, 0...
## $ wfuel        <dbl> 0.1342, 0.1686, 0.4056, 0.1258, 0.0824, 0.0481, 0...
## $ wcloth       <dbl> 0.0000, 0.0091, 0.0012, 0.0539, 0.0399, 0.1170, 0...
## $ walc         <dbl> 0.0106, 0.0825, 0.0513, 0.0397, 0.1571, 0.0210, 0...
## $ wtrans       <dbl> 0.1458, 0.1215, 0.2063, 0.0652, 0.2403, 0.0955, 0...
## $ wother       <dbl> 0.2822, 0.2444, 0.1415, 0.2716, 0.1473, 0.3431, 0...
## $ age          <int> 25, 39, 47, 33, 31, 24, 46, 25, 30, 41, 48, 24, 2...
## $ log_income   <dbl> 4.867534, 5.010635, 5.438079, 4.605170, 4.605170,...
## $ log_totexp   <dbl> 3.912023, 4.499810, 5.192957, 4.382027, 4.499810,...
## $ children_fac <ord> Yes, Yes, Yes, Yes, No, No, No, No, No, No, Yes, ...

Podemos calcular o coeficiente de correlação entre as variáveis ​​renda e wfood com os métodos “pearson” e “spearman”.

cor(data$log_income, data$wfood, method = "pearson")

Saída:

## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")

Saída:

## [1] -0.2501252

Matriz de Correlação em R

A correlação bivariada é um bom começo, mas podemos ter uma visão mais ampla com a análise multivariada. Uma correlação com muitas variáveis ​​é retratada dentro de um matriz de correlação. Uma matriz de correlação é uma matriz que representa a correlação de pares de todas as variáveis.

A função cor() retorna uma matriz de correlação. A única diferença com a correlação bivariada é que não precisamos especificar quais variáveis. Por padrão, R calcula a correlação entre todas as variáveis.

Observe que uma correlação não pode ser calculada para uma variável de fator. Precisamos ter certeza de que eliminaremos o recurso categórico antes de passarmos o quadro de dados dentro de cor().

Uma matriz de correlação é simétrica, o que significa que os valores acima da diagonal têm os mesmos valores que o valor abaixo. É mais visual mostrar metade da matriz.

Excluímos children_fac porque é uma variável de nível de fator. cor não realiza correlação em uma variável categórica.

# the last column of data is a factor level. We don't include it in the code
mat_1 <-as.dist(round(cor(data[,1:9]),2))
mat_1

Explicação do código

  • cor(dados): Exibe a matriz de correlação
  • rodada (dados, 2): Arredonde a matriz de correlação com duas casas decimais
  • como.dist(): Mostra apenas a segunda metade

Saída:

##            wfood wfuel wcloth  walc wtrans wother   age log_income
## wfuel       0.11                                                  
## wcloth     -0.33 -0.25                                            
## walc       -0.12 -0.13  -0.09                                     
## wtrans     -0.34 -0.16  -0.19 -0.22                               
## wother     -0.35 -0.14  -0.22 -0.12  -0.29                        
## age         0.02 -0.05   0.04 -0.14   0.03   0.02                 
## log_income -0.25 -0.12   0.10  0.04   0.06   0.13  0.23           
## log_totexp -0.50 -0.36   0.34  0.12   0.15   0.15  0.21       0.49

Nível de significância

O nível de significância é útil em algumas situações quando utilizamos o método Pearson ou Spearman. A função rcorr() da biblioteca Hmisc calcula para nós o valor p. Podemos baixar a biblioteca de município e copie o código para colá-lo no terminal:

conda install -c r r-hmisc

O rcorr() requer que um quadro de dados seja armazenado como uma matriz. Podemos converter nossos dados em uma matriz antes de calcular a matriz de correlação com o valor p.

library("Hmisc")
data_rcorr <-as.matrix(data[, 1: 9])

mat_2 <-rcorr(data_rcorr)
# mat_2 <-rcorr(as.matrix(data)) returns the same output

O objeto de lista mat_2 contém três elementos:

  • r: Saída da matriz de correlação
  • n: Número de observações
  • P: valor p

Estamos interessados ​​no terceiro elemento, o valor p. É comum mostrar a matriz de correlação com o valor p em vez do coeficiente de correlação.

p_value <-round(mat_2[["P"]], 3)
p_value

Explicação do código

  • mat_2[[“P”]]: Os valores p são armazenados no elemento chamado P
  • rodada(mat_2[[“P”]], 3): Arredonde os elementos com três dígitos

Saída:

           wfood wfuel wcloth  walc wtrans wother   age log_income log_totexp
wfood         NA 0.000  0.000 0.000  0.000  0.000 0.365      0.000          0
wfuel      0.000    NA  0.000 0.000  0.000  0.000 0.076      0.000          0
wcloth     0.000 0.000     NA 0.001  0.000  0.000 0.160      0.000          0
walc       0.000 0.000  0.001    NA  0.000  0.000 0.000      0.105          0
wtrans     0.000 0.000  0.000 0.000     NA  0.000 0.259      0.020          0
wother     0.000 0.000  0.000 0.000  0.000     NA 0.355      0.000          0
age        0.365 0.076  0.160 0.000  0.259  0.355    NA      0.000          0
log_income 0.000 0.000  0.000 0.105  0.020  0.000 0.000         NA          0
log_totexp 0.000 0.000  0.000 0.000  0.000  0.000 0.000      0.000         NA

Visualizando Matriz de Correlação em R

Um mapa de calor é outra maneira de mostrar uma matriz de correlação. A biblioteca GGally é uma extensão do ggplot2. Atualmente, não está disponível na biblioteca conda. Podemos instalar diretamente no console.

install.packages("GGally")

Visualizando Matriz de Correlação

A biblioteca inclui diferentes funções para mostrar as estatísticas resumidas, como a correlação e distribuição de todas as variáveis ​​em um matriz.

A função ggcorr() possui muitos argumentos. Apresentaremos apenas os argumentos que usaremos no tutorial:

A função ggcorr

ggcorr(df, method = c("pairwise", "pearson"),
  nbreaks = NULL, digits = 2, low = "#3B9AB2",
  mid = "#EEEEEE", high = "#F21A00",
  geom = "tile", label = FALSE,
  label_alpha = FALSE)

Argumentos:

  • df: Conjunto de dados usado
  • método: Fórmula para calcular a correlação. Por padrão, pairwise e Pearson são calculados
  • nbreaks: Retorna um intervalo categórico para a coloração dos coeficientes. Por padrão, não há quebra e o gradiente de cores é contínuo
  • dígitos: Arredonde o coeficiente de correlação. Por padrão, defina como 2
  • baixo: Controla o nível inferior da coloração
  • médio: Controla o nível médio da coloração
  • Alto: Controle o alto nível da coloração
  • geometria: controla a forma do argumento geométrico. Por padrão, “bloco”
  • rótulo: Valor booleano. Exibir ou não o rótulo. Por padrão, defina como `FALSE`

Mapa de calor básico

O gráfico mais básico do pacote é um mapa de calor. A legenda do gráfico mostra um gradiente de cor de –1 a 1, com a cor quente indicando forte correlação positiva e a cor fria, uma correlação negativa.

library(GGally)
ggcorr(data)

Explicação do código

  • ggcorr(dados): apenas um argumento é necessário, que é o nome do quadro de dados. As variáveis ​​de nível de fator não são incluídas no gráfico.

Saída:

Mapa de calor básico

Adicionando controle ao mapa de calor

Podemos adicionar mais controles ao gráfico:

ggcorr(data,
    nbreaks = 6,
    low = "steelblue",
    mid = "white",
    high = "darkred",
    geom = "circle")

Explicação do código

  • npausas=6: quebre a lenda com 6 classificações.
  • baixo = “azul aço”: Use cores mais claras para correlação negativa
  • meio = “branco”: Use cores brancas para correlação de intervalos intermediários
  • alto = “vermelho escuro”: Use cores escuras para correlação positiva
  • geom = “círculo”: use o círculo como o formato das janelas no mapa de calor. O tamanho do círculo é proporcional ao valor absoluto da correlação.

Saída:

Adicionando controle ao mapa de calor

Adicionando rótulo ao mapa de calor

GGally nos permite adicionar um rótulo dentro das janelas:

ggcorr(data,
    nbreaks = 6,
    label = TRUE,
    label_size = 3,
    color = "grey50")

Explicação do código

  • rótulo = VERDADEIRO: Adicione os valores dos coeficientes de correlação dentro do mapa de calor.
  • cor = “cinza50”: Escolha a cor, ou seja, cinza
  • tamanho_da_rótulo = 3: Defina o tamanho da etiqueta como 3

Saída:

Adicionando rótulo ao mapa de calor

A função ggpairs

Finalmente, apresentamos outra função da biblioteca GGaly. Ggpar. Ele produz um gráfico em formato de matriz. Podemos exibir três tipos de cálculo em um gráfico. A matriz é uma dimensão, com igual ao número de observações. A parte superior/inferior exibe janelas e na diagonal. Podemos controlar quais informações queremos mostrar em cada parte da matriz. A fórmula para ggpair é:

ggpair(df, columns = 1: ncol(df), title = NULL,
    upper = list(continuous = "cor"),
    lower = list(continuous = "smooth"),
    mapping = NULL)		

Argumentos:

  • df: Conjunto de dados usado
  • colunas: Selecione as colunas para desenhar o gráfico
  • título: Incluir um título
  • superior: Controle as caixas acima da diagonal do gráfico. É necessário fornecer o tipo de cálculo ou gráfico a ser retornado. Se contínuo = “cor”, pedimos a R para calcular a correlação. Observe que o argumento precisa ser uma lista. Outros argumentos podem ser usados, consulte a [vinheta](“http://ggobi.github.io/ggally/#custom_functions”) para obter mais informações.
  • Abaixe: Controle as caixas abaixo da diagonal.
  • Mapeamento: Indica a estética do gráfico. Por exemplo, podemos calcular o gráfico para diferentes grupos.

Análise bivariada com ggpair com agrupamento

O próximo gráfico representa três informações:

  • A matriz de correlação entre as variáveis ​​log_totexp, log_income, idade e wtrans agrupadas de acordo com o fato de o domicílio ter filho ou não.
  • Trace a distribuição de cada variável por grupo
  • Exibir o gráfico de dispersão com a tendência por grupo
library(ggplot2)
ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor",
        size = 3)),
    lower = list(continuous = wrap("smooth",
        alpha = 0.3,
        size = 0.1)),
    mapping = aes(color = children_fac))

Explicação do código

  • colunas = c(“log_totexp”, “log_income”, “idade”, “wtrans”): Escolha as variáveis ​​a serem mostradas no gráfico
  • title = “Análise bivariada das receitas e despesas da família britânica”: Adicione um título
  • superior = lista(): controla a parte superior do gráfico. Ou seja, acima da diagonal
  • contínuo = wrap(“cor”, tamanho = 3)): Calcule o coeficiente de correlação. Envolvemos o argumento contínuo dentro da função wrap() para controlar a estética do gráfico (ou seja, tamanho = 3) -lower = list(): Controla a parte inferior do gráfico. Ou seja, abaixo da diagonal.
  • contínuo = wrap(“suave”,alfa = 0.3,tamanho=0.1): adicione um gráfico de dispersão com uma tendência linear. Envolvemos o argumento contínuo dentro da função wrap() para controlar a estética do gráfico (ou seja, tamanho = 0.1, alfa = 0.3)
  • mapeamento = aes(cor = filhos_fac): Queremos que cada parte do gráfico seja empilhada pela variável children_fac, que é uma variável categórica que assume o valor 1 se a família não tiver filhos e 2 caso contrário

Saída:

Análise Bivariada com ggpair com Agrupamento

Análise bivariada com ggpair com agrupamento parcial

O gráfico abaixo é um pouco diferente. Mudamos a posição do mapeamento dentro do argumento superior.

ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"),
    title = "Bivariate analysis of revenue expenditure by the British household",
    upper = list(continuous = wrap("cor",
            size = 3),
        mapping = aes(color = children_fac)),
    lower = list(
        continuous = wrap("smooth",
            alpha = 0.3,
            size = 0.1))
)

Explicação do código

  • Exatamente o mesmo código do exemplo anterior, exceto por:
  • mapeamento = aes(color = children_fac): Mova a lista em upper = list(). Queremos apenas o cálculo empilhado por grupo na parte superior do gráfico.

Saída:

Análise bivariada com ggpair com agrupamento parcial

Resumo

  • Um relacionamento bivariado descreve um relacionamento -ou correlação- entre duas variáveis ​​em R.
  • Existem dois métodos principais para calcular a correlação entre duas variáveis ​​em Programação R: Pearson e Spearman.
  • O método de correlação de Pearson é geralmente usado como verificação primária da relação entre duas variáveis.
  • Uma correlação de classificação classifica as observações por classificação e calcula o nível de similaridade entre as classificações.
  • A correlação de classificação de Spearman, está sempre entre -1 e 1, com um valor próximo à extremidade indica forte relacionamento.
  • Uma matriz de correlação é uma matriz que representa a correlação de pares de todas as variáveis.
  • O nível de significância é útil em algumas situações quando utilizamos o método Pearson ou Spearman.

Podemos resumir todas as funções de correlação em R na tabela abaixo:

Biblioteca Objetivo Forma Code
Base correlação bivariada Pearson
cor(dfx2, method = "pearson")
Base correlação bivariada Lanceiro
cor(dfx2, method = "spearman")
Base Correlação multivariada Pearson
cor(df, method = "pearson")
Base Correlação multivariada Lanceiro
cor(df, method = "spearman")
Hmisc Valor de p
rcorr(as.matrix(data[,1:9]))[["P"]]
Ggally mapa de calor
ggcorr(df)
Gráficos multivariados
cf code below