Correlação em R: Pearson & Lanceiro com Exemplo de Matriz

Uma relação bivariada descreve uma relação - ou correlação - entre duas variáveis, e. Neste tutorial, discutimos o conceito de correlação e mostramos como ele pode ser usado para medir a relação entre quaisquer duas variáveis.

Existem dois métodos principais para calcular a correlação entre duas variáveis.

  • Pearson: correlação paramétrica
  • Spearman: correlação não paramétrica

Neste tutorial, você aprenderá

  • Correlação de Pearson
  • Correlação de classificação de Spearman
  • Matriz de correlação
  • Visualize Matriz de Correlação

Correlação de Pearson

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

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

com

  • , ou seja, desvio padrão de
  • , 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 chegar 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:

Correlação de classificação de Spearman

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

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

com declaradas as covariâncias entre posto e. O denominador calcula os desvios padrão.

Em R, podemos usar a função cor (). Leva 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 valor ausente: use = "complete.obs"

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

  • wfood: compartilhar gastos com alimentos
  • wfuel: compartilhe o gasto de combustível
  • wcloth: participação no orçamento para gastos com roupas
  • walc: compartilhar gastos com álcool
  • wtrans: compartilhar gastos com transporte
  • wother: participação nos gastos com outros bens
  • totexp: gasto familiar total em libras
  • renda renda familiar líquida total
  • idade: idade da família
  • filhos: 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 examinamos a função glimpse () 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. Isso ajuda a reduzir o impacto de outliers e diminui a assimetria no conjunto de dados.

Resultado:

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

Podemos calcular o coeficiente de correlação entre as variáveis ​​de renda e wfood com os métodos "Pearson" e "Spearman".

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

resultado:

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

Resultado:

## [1] -0.2501252 

Matriz de correlação

A correlação bivariada é um bom começo, mas podemos obter um quadro mais amplo com a análise multivariada. Uma correlação com muitas variáveis ​​é representada dentro de uma matriz de correlação . Uma matriz de correlação é uma matriz que representa a correlação de par 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 a variável de fator. Precisamos ter certeza de eliminar o recurso categórico antes de passar 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 os abaixo. É mais visual mostrar metade da matriz.

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

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

Explicação do código

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

Resultado:

## 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 usamos o método Pearson ou Spearman. A função rcorr () da biblioteca Hmisc calcula para nós o valor p. Podemos baixar a biblioteca do conda e copiar 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ção
  • 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
  • round (mat_2 [["P"]], 3): Arredonda os elementos com três dígitos

Resultado:

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

Visualize Matriz de Correlação

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")

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

A função ggcorr () tem 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, em pares e Pearson são calculados
  • nbreaks : Retorna um intervalo categórico para a coloração dos coeficientes. Por padrão, sem quebra e o gradiente de cor é contínuo
  • dígitos : Arredonde o coeficiente de correlação. Por padrão, defina como 2
  • baixo : controla o nível inferior de coloração
  • mid : controla o nível médio da coloração
  • alto : controla o alto nível de coloração
  • geom : controla a forma do argumento geométrico. Por padrão, "tile"
  • 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 uma cor gradiente 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. Variáveis ​​de nível de fator não são incluídas no gráfico.

Resultado:

Adicionar 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

  • nbreaks = 6: quebra a legenda com 6 classificações.
  • low = "steelblue": Use cores mais claras para correlação negativa
  • mid = "white": Use cores brancas para correlação de faixas intermediárias
  • high = "darkred": Use cores escuras para correlação positiva
  • geom = "circle": use o círculo como a forma das janelas no mapa de calor. O tamanho do círculo é proporcional ao valor absoluto da correlação.

Resultado:

Adicionar 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 = TRUE: Adicione os valores dos coeficientes de correlação dentro do mapa de calor.
  • color = "grey50": Escolha a cor, ou seja, cinza
  • label_size = 3: Defina o tamanho do rótulo igual a 3

Resultado:

ggpairs

Finalmente, apresentamos outra função da biblioteca GGaly. Ggpair. Ele produz um gráfico em formato de matriz. Podemos exibir três tipos de computação em um gráfico. A matriz é uma dimensão, 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 : inclua um título
  • superior : controla as caixas acima da diagonal do gráfico. Precisa fornecer o tipo de cálculos 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.
  • Inferior : Controle as caixas abaixo da diagonal.
  • Mapeamento : indica a estética do gráfico. Por exemplo, podemos calcular o gráfico para grupos diferentes.

Análise bivariada com ggpair com agrupamento

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

  • A matriz de correlação entre log_totexp, log_income, age e variável wtrans agrupada de acordo com se o domicílio tem um filho ou não.
  • Trace a distribuição de cada variável por grupo
  • Mostra 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 ​​para mostrar no gráfico
  • title = "Análise bivariada de despesas de receita da família britânica": Adicione um título
  • upper = list (): controla a parte superior do gráfico. Ou seja, acima da diagonal
  • contínuo = envoltório ("cor", tamanho = 3)): Calcula 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 = envoltório ("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 (color = children_fac): Queremos que cada parte do gráfico seja empilhada pela variável children_fac, que é uma variável categórica tomando o valor de 1 se a família não tiver filhos e 2 caso contrário

Resultado:

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.

Resultado:

Resumo

Podemos resumir a função na tabela abaixo:

biblioteca

Objetivo

método

código

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 P

rcorr(as.matrix(data[,1:9]))[["P"]]

Ggally

mapa de calor

ggcorr(df)

Gráficos multivariados

cf code below

Artigos interessantes...