Corelație în R: Pearson & Spearman cu Matrix Exemplu

O relație bivariantă descrie o relație - sau corelație - între două variabile și. În acest tutorial, discutăm conceptul de corelație și arătăm cum poate fi folosit pentru a măsura relația dintre oricare două variabile.

Există două metode principale pentru a calcula corelația dintre două variabile.

  • Pearson: corelație parametrică
  • Spearman: corelație non-parametrică

În acest tutorial, veți învăța

  • Corelația Pearson
  • Corelația Spearman Rank
  • Matricea de corelație
  • Vizualizați Matricea de corelație

Corelația Pearson

Metoda de corelație Pearson este de obicei utilizată ca verificare primară pentru relația dintre două variabile.

Coeficientul de corelație , este o măsură a rezistenței liniare relația dintre cele două variabile și. Se calculează după cum urmează:

cu

  • , adică abaterea standard a
  • , adică abaterea standard a

Corelația variază între -1 și 1.

  • O valoare apropiată sau egală cu 0 implică o relație liniară mică sau deloc între și.
  • În schimb, cu cât se apropie de 1 sau -1, cu atât relația liniară este mai puternică.

Putem calcula testul t după cum urmează și putem verifica tabelul de distribuție cu un grad de libertate egal cu:

Corelația Spearman Rank

O corelație de rang ordonează observațiile după rang și calculează nivelul de asemănare dintre rang. O corelație de rang are avantajul de a fi robustă pentru valorile aberante și nu este legată de distribuirea datelor. Rețineți că, o corelație de rang este potrivită pentru variabila ordinală.

Corelația rangului lui Spearman,, este întotdeauna între -1 și 1 cu o valoare apropiată de extremitate indică o relație puternică. Se calculează după cum urmează:

cu afirmate covarianțele dintre rang și. Numitorul calculează abaterile standard.

În R, putem folosi funcția cor (). Este nevoie de trei argumente și metodă.

cor(x, y, method)

Argumente :

  • x: Primul vector
  • y: Al doilea vector
  • metoda: Formula utilizată pentru a calcula corelația. Trei valori de șir:
    • „pearson”
    • "kendall"
    • "spearman"

Un argument opțional poate fi adăugat dacă vectorii conțin valoare lipsă: use = "complete.obs"

Vom folosi setul de date BudgetUK. Acest set de date raportează alocarea bugetară a gospodăriilor britanice între 1980 și 1982. Există 1519 observații cu zece caracteristici, printre care:

  • wfood: împărtășiți alimentele, împărțiți cheltuielile
  • wfuel: împărțiți cheltuielile de combustibil
  • wcloth: cota bugetară pentru cheltuielile de îmbrăcăminte
  • walc: împărtășiți cheltuielile cu alcoolul
  • wtrans: împărțiți cheltuielile de transport
  • wother: cota din alte bunuri cheltuite
  • totexp: cheltuielile totale ale gospodăriei în lire sterline
  • venituri venituri nete totale ale gospodăriei
  • vârstă: vârsta gospodăriei
  • copii: numărul copiilor
Exemplu
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)

Explicarea codului

  • Mai întâi importăm datele și aruncăm o privire cu funcția glimpse () din biblioteca dplyr.
  • Trei puncte sunt peste 500.000, așa că am decis să le excludem.
  • Este o practică obișnuită să se convertească o variabilă monetară în jurnal. Ajută la reducerea impactului valorilor aberante și scade asimetria din setul de date.

Ieșire:

## 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,… 

Putem calcula coeficientul de corelație dintre veniturile și variabilele wfood cu metodele „pearson” și „spearman”.

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

ieșire:

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

Ieșire:

## [1] -0.2501252 

Matricea de corelație

Corelația bivariată este un început bun, dar putem obține o imagine mai largă cu analiza multivariată. O corelație cu multe variabile este prezentată într-o matrice de corelație . O matrice de corelație este o matrice care reprezintă corelația pereche a tuturor variabilelor.

Funcția cor () returnează o matrice de corelație. Singura diferență cu corelația bivariantă este că nu trebuie să specificăm ce variabile. În mod implicit, R calculează corelația dintre toate variabilele.

Rețineți că, o corelație nu poate fi calculată pentru variabila factor. Trebuie să ne asigurăm că eliminăm caracteristica categorică înainte de a trece cadrul de date în interiorul cor ().

O matrice de corelație este simetrică, ceea ce înseamnă că valorile de deasupra diagonalei au aceleași valori ca și cea de mai jos. Este mai vizual să arăți jumătate din matrice.

Excludem children_fac deoarece este o variabilă la nivel de factor. cor nu realizează corelație asupra unei variabile categorice.

# 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

Explicarea codului

  • cor (date): Afișați matricea de corelație
  • rotund (date, 2): rotunjiți matricea de corelație cu două zecimale
  • as.dist (): Afișează doar a doua jumătate

Ieșire:

## 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

Nivelul de semnificație

Nivelul de semnificație este util în unele situații când folosim metoda Pearson sau Spearman. Funcția rcorr () din biblioteca Hmisc calculează pentru noi valoarea p. Putem descărca biblioteca de la conda și putem copia codul pentru al lipi în terminal:

conda install -c r r-hmisc 

Rcorr () necesită ca un cadru de date să fie stocat ca matrice. Ne putem converti datele într-o matrice înainte de a calcula matricea de corelație cu valoarea 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

Obiectul list mat_2 conține trei elemente:

  • r: ieșirea matricei de corelație
  • n: Numărul de observații
  • P: valoarea p

Ne interesează al treilea element, valoarea p. Este obișnuit să se arate matricea de corelație cu valoarea p în loc de coeficientul de corelație.

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

Explicarea codului

  • mat_2 [["P"]]: valorile p sunt stocate în elementul numit P
  • round (mat_2 [["P"]], 3): rotunjiți elementele cu trei cifre

Ieșire:

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

Vizualizați Matricea de corelație

O hartă de căldură este un alt mod de a arăta o matrice de corelație. Biblioteca GGally este o extensie a ggplot2. În prezent, nu este disponibil în biblioteca conda. Putem instala direct în consolă.

install.packages("GGally")

Biblioteca include diferite funcții pentru a afișa statisticile rezumative, cum ar fi corelația și distribuția tuturor variabilelor într-o matrice.

Funcția ggcorr () are o mulțime de argumente. Vom introduce doar argumentele pe care le vom folosi în tutorial:

Funcția ggcorr

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

Argumente:

  • df : set de date utilizat
  • metoda : Formula pentru a calcula corelația. În mod implicit, pairwise și Pearson sunt calculate
  • nbreaks : Returnează un interval categoric pentru colorarea coeficienților. În mod implicit, nu există pauze și gradientul de culoare este continuu
  • cifre : rotunjiți coeficientul de corelație. În mod implicit, setați la 2
  • scăzut : controlați nivelul inferior al colorării
  • mid : Controlează nivelul mediu al colorării
  • ridicat : Controlați nivelul ridicat de colorare
  • geom : Controlează forma argumentului geometric. În mod implicit, „țiglă”
  • etichetă : valoare booleană. Afișați sau nu eticheta. În mod implicit, setați la „FALS”

Harta de căldură de bază

Cel mai de bază complot al pachetului este o hartă de căldură. Legenda graficului arată o culoare de gradient de la - 1 la 1, cu o culoare fierbinte care indică o corelație puternică pozitivă și o culoare rece, o corelație negativă.

library(GGally)ggcorr(data)

Explicarea codului

  • ggcorr (date): este necesar un singur argument, care este numele cadrului de date. Variabilele la nivel de factor nu sunt incluse în complot.

Ieșire:

Adăugați control la harta de căldură

Putem adăuga mai multe controale în grafic.

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

Explicarea codului

  • nbreaks = 6: rupe legenda cu 6 ranguri.
  • low = "steelblue": utilizați culori mai deschise pentru corelație negativă
  • mid = "alb": utilizați culori albe pentru corelarea intervalelor medii
  • high = "darkred": folosiți culori închise pentru corelație pozitivă
  • geom = "cerc": folosiți cercul ca formă a ferestrelor din harta de căldură. Mărimea cercului este proporțională cu valoarea absolută a corelației.

Ieșire:

Adăugați o etichetă pe harta de căldură

GGally ne permite să adăugăm o etichetă în interiorul ferestrelor.

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

Explicarea codului

  • etichetă = ADEVĂRAT: Adăugați valorile coeficienților de corelație din interiorul hărții de căldură.
  • color = "grey50": Alegeți culoarea, adică gri
  • label_size = 3: Setați dimensiunea etichetei la 3

Ieșire:

ggpairs

În cele din urmă, introducem o altă funcție din biblioteca GGaly. Ggpair. Produce un grafic într-un format matricial. Putem afișa trei tipuri de calcul într-un singur grafic. Matricea este o dimensiune, cu egal cu numărul de observații. Partea superioară / inferioară afișează ferestrele și în diagonală. Putem controla ce informații dorim să afișăm în fiecare parte a matricei. Formula pentru ggpair este:

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

Argumente :

  • df : set de date utilizat
  • coloane : Selectați coloanele pentru a desena complotul
  • title : Includeți un titlu
  • sus : Controlați casetele de deasupra diagonalei parcelei. Trebuie să furnizați tipul de calcul sau grafic pentru a reveni. Dacă continuu = "cor", îi cerem lui R să calculeze corelația. Rețineți că argumentul trebuie să fie o listă. Alte argumente pot fi folosite, consultați [vinetă] („http://ggobi.github.io/ggally/#custom_functions”) pentru mai multe informații.
  • Jos : Controlați casetele de sub diagonală.
  • Cartografiere : indică estetica graficului. De exemplu, putem calcula graficul pentru diferite grupuri.

Analiza bivariată cu ggpair cu grupare

Următorul grafic prezintă trei informații:

  • Matricea de corelație dintre log_totexp, log_income, vârstă și variabila wtrans grupate în funcție de faptul dacă gospodăria are sau nu un copil.
  • Trageți distribuția fiecărei variabile în funcție de grup
  • Afișați graficul de împrăștiere cu tendința în funcție de grup
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))

Explicarea codului

  • coloane = c ("log_totexp", "log_income", "age", "wtrans"): Alegeți variabilele de afișat în grafic
  • title = "Analiza bivariată a cheltuielilor de venituri de către gospodăria britanică": adăugați un titlu
  • upper = list (): Controlați partea superioară a graficului. Adică deasupra diagonalei
  • continuu = wrap ("cor", dimensiune = 3)): Calculați coeficientul de corelație. Înfășurăm argumentul continuu în interiorul funcției wrap () pentru a controla estetica graficului (adică mărimea = 3) -mai jos = list (): Controlăm partea inferioară a graficului. Adică sub diagonală.
  • continuu = wrap ("neted", alfa = 0,3, dimensiune = 0,1): Adăugați un grafic scatter cu o tendință liniară. Înfășurăm argumentul continuu în interiorul funcției wrap () pentru a controla estetica graficului (adică dimensiunea = 0,1, alfa = 0,3)
  • mapping = aes (color = children_fac): dorim ca fiecare parte a graficului să fie stivuită de variabila children_fac, care este o variabilă categorică care ia valoarea 1 dacă gospodăria nu are copii și 2 altfel

Ieșire:

Analiza bivariată cu ggpair cu grupare parțială

Graficul de mai jos este puțin diferit. Schimbăm poziția mapării în interiorul argumentului 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)))

Explicarea codului

  • Exact același cod ca și exemplul anterior, cu excepția:
  • mapping = aes (color = children_fac): Mutați lista în upper = list (). Vrem doar calculul stivuit pe grup în partea superioară a graficului.

Ieșire:

rezumat

Putem rezuma funcția în tabelul de mai jos:

bibliotecă

Obiectiv

metodă

cod

Baza

corelație bivariată

Pearson

cor(dfx2, method = "pearson")

Baza

corelație bivariată

Spearman

cor(dfx2, method = "spearman")

Baza

Corelație multivariată

Pearson

cor(df, method = "pearson")

Baza

Corelație multivariată

Spearman

cor(df, method = "spearman")

Hmisc

Valoarea P

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

Ggally

harta termografica

ggcorr(df)

Parcele multivariate

cf code below

Articole interesante...