Korelacija v R: Pearson & Primer Spearmana z matrico

Bivariatno razmerje opisuje razmerje - ali korelacijo - med dvema spremenljivkama in. V tej vadnici bomo razpravljali o konceptu korelacije in pokazali, kako ga lahko uporabimo za merjenje razmerja med katerima koli spremenljivkama.

Obstajata dve glavni metodi za izračun korelacije med dvema spremenljivkama.

  • Pearson: Parametrična korelacija
  • Spearman: Neparametrična korelacija

V tej vadnici boste izvedeli

  • Pearsonova korelacija
  • Korelacija Spearmanovega ranga
  • Korelacijska matrica
  • Vizualizirajte korelacijsko matrico

Pearsonova korelacija

Pearsonova korelacijska metoda se običajno uporablja kot primarni pregled razmerja med dvema spremenljivkama.

Koeficient korelacije , je merilo trdnosti linearnega odnosa med dvema spremenljivkama in. Izračuna se na naslednji način:

s

  • , tj. standardni odklon
  • , tj. standardni odklon

Korelacija se giblje med -1 in 1.

  • Vrednost blizu ali enaka 0 pomeni malo ali nič linearnega razmerja med in.
  • V nasprotju s tem, bližje kot je 1 ali -1, močnejši je linearni odnos.

T-test lahko izračunamo na naslednji način in preverimo distribucijsko tabelo s stopnjo svobode, ki je enaka:

Korelacija Spearmanovega ranga

Korelacija ranga razvrsti opažanja po rangu in izračuna stopnjo podobnosti med rangom. Korelacija ranga ima prednost, da je robustna za izstopajoče in ni povezana z distribucijo podatkov. Upoštevajte, da je za zaporedno spremenljivko primerna korelacija ranga.

Korelacija Spearmanovega ranga, je vedno med -1 in 1 z vrednostjo blizu okončine kaže na močno povezavo. Izračuna se na naslednji način:

z navedenimi kovariancami med činom in. Imenovalec izračuna standardna odstopanja.

V R lahko uporabimo funkcijo cor (). Potrebni so trije argumenti, in metoda.

cor(x, y, method)

Argumenti :

  • x: prvi vektor
  • y: Drugi vektor
  • metoda: Formula, uporabljena za izračun korelacije. Tri nizne vrednosti:
    • "biser"
    • "Kendall"
    • "suličar"

Neobvezen argument lahko dodamo, če vektorji vsebujejo manjkajočo vrednost: use = "complete.obs"

Uporabili bomo nabor podatkov BudgetUK. Ta nabor podatkov poroča o proračunski dodelitvi britanskih gospodinjstev med letoma 1980 in 1982. Obstaja 1519 opažanj z desetimi značilnostmi, med njimi:

  • wfood: delite porabo hrane delite
  • wfuel: delite porabo goriva
  • wcloth: proračunski delež za porabo oblačil
  • walc: delite porabo alkohola
  • wtrans: delite stroške prevoza
  • wother: delež porabe drugega blaga
  • totexp: skupna poraba gospodinjstva v funtih
  • dohodek skupaj neto dohodek gospodinjstva
  • starost: starost gospodinjstva
  • otroci: število otrok
Primer
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)

Razlaga kode

  • Najprej uvozimo podatke in si ogledamo funkcijo glimpse () iz knjižnice dplyr.
  • Tri točke so nad 500K, zato smo se jih odločili izključiti.
  • Običajna praksa je, da denarno spremenljivko pretvorimo v dnevnik. Pomaga zmanjšati vpliv izstopajočih in zmanjša neenakomernost nabora podatkov.

Izhod:

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

Korelacijski koeficient med spremenljivkama dohodka in hrano lahko izračunamo z metodama "pearson" in "spearman".

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

izhod:

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

Izhod:

## [1] -0.2501252 

Korelacijska matrica

Bivariatna korelacija je dober začetek, vendar lahko širšo sliko dobimo z multivariatno analizo. Korelacija s številnimi spremenljivkami je prikazana znotraj korelacijske matrice . Korelacijska matrica je matrika, ki predstavlja parno korelacijo vseh spremenljivk.

Funkcija cor () vrne korelacijsko matrico. Edina razlika pri bivariatni korelaciji je, da ni treba določiti, katere spremenljivke. Privzeto R izračuna korelacijo med vsemi spremenljivkami.

Upoštevajte, da korelacije ni mogoče izračunati za faktor spremenljivke. Prepričati se moramo, da spustimo kategorično funkcijo, preden prenesemo podatkovni okvir znotraj cor ().

Korelacijska matrika je simetrična, kar pomeni, da imajo vrednosti nad diagonalo enake vrednosti kot spodaj. Bolj vizualno je prikazati polovico matrice.

Izključujemo children_fac, ker gre za spremenljivko ravni faktorja. cor ne izvaja korelacije za kategorično spremenljivko.

# 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

Razlaga kode

  • cor (podatki): prikaže korelacijsko matrico
  • krog (podatki, 2): zaokroži korelacijsko matrico z dvema decimalnima mestoma
  • as.dist (): Prikaže samo drugo polovico

Izhod:

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

Stopnja pomembnosti

Stopnja pomembnosti je koristna v nekaterih situacijah, ko uporabljamo biserno ali koparsko metodo. Funkcija rcorr () iz knjižnice Hmisc nam izračuna vrednost p. Knjižnico lahko prenesemo iz conda in kopiramo kodo, da jo prilepimo v terminal:

conda install -c r r-hmisc 

Rcorr () zahteva, da se podatkovni okvir shrani kot matrika. Podatke lahko prej pretvorimo v matriko, da izračunamo korelacijsko matrico s p-vrednostjo.

library("Hmisc")data_rcorr <-as.matrix(data[, 1: 9])mat_2 <-rcorr(data_rcorr)# mat_2 <-rcorr(as.matrix(data)) returns the same output

Predmet seznama mat_2 vsebuje tri elemente:

  • r: izhod korelacijske matrice
  • n: Število opazovanj
  • P: p-vrednost

Zanima nas tretji element, vrednost p. Običajno je korelacijsko matrico prikazati z vrednostjo p namesto s koeficientom korelacije.

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

Razlaga kode

  • mat_2 [["P"]]: Vrednosti p so shranjene v elementu, imenovanem P
  • krog (mat_2 [["" P "]], 3): zaokroži elemente s tremi števkami

Izhod:

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

Vizualizirajte korelacijsko matrico

Toplotni zemljevid je še en način prikaza korelacijske matrice. Knjižnica GGally je razširitev ggplot2. Trenutno v knjižnici conda ni na voljo. Lahko namestimo neposredno v konzolo.

install.packages("GGally")

Knjižnica vključuje različne funkcije za prikaz povzetkov statističnih podatkov, kot sta korelacija in porazdelitev vseh spremenljivk v matriki.

Funkcija ggcorr () ima veliko argumentov. Predstavili bomo samo argumente, ki jih bomo uporabili v vadnici:

Funkcija ggcorr

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

Argumenti:

  • df : uporabljen nabor podatkov
  • metoda : Formula za izračun korelacije. Privzeto se računata v paru in Pearson
  • nbreaks : vrne kategorično območje za obarvanje koeficientov. Privzeto ni preloma in barvni gradient je neprekinjen
  • števke : zaokroži korelacijski koeficient. Privzeto nastavite na 2
  • nizka : nadzorujete nižjo stopnjo obarvanosti
  • sredina : nadzoruje srednjo stopnjo obarvanosti
  • visoka : nadzor nad visoko stopnjo obarvanosti
  • geom : nadzor oblike geometrijskega argumenta. Privzeto je "ploščica"
  • oznaka : logična vrednost. Prikazati ali ne oznako. Privzeto nastavite na "FALSE"

Osnovni toplotni zemljevid

Najosnovnejša ploskev paketa je toplotna karta. Legenda grafa prikazuje gradientno barvo od - 1 do 1, pri čemer vroča barva kaže močno pozitivno korelacijo, hladna barva pa negativno korelacijo.

library(GGally)ggcorr(data)

Razlaga kode

  • ggcorr (podatki): potreben je samo en argument, to je ime podatkovnega okvira. Spremenljivke na ravni faktorja niso vključene v grafikon.

Izhod:

Dodajte nadzor na toplotni zemljevid

Grafu lahko dodamo več kontrolnikov.

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

Razlaga kode

  • nbreaks = 6: prekinite legendo s 6 vrstami.
  • low = "steelblue": Za negativno korelacijo uporabite svetlejše barve
  • mid = "bela": Uporabite bele barve za korelacijo srednjega obsega
  • high = "darkred": Za pozitivno korelacijo uporabite temne barve
  • geom = "circle": Uporabite krog kot obliko oken na toplotni karti. Velikost kroga je sorazmerna z absolutno vrednostjo korelacije.

Izhod:

Dodajte oznako na toplotni zemljevid

GGally nam omogoča, da v okna dodamo oznako.

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

Razlaga kode

  • label = TRUE: dodajte vrednosti koeficientov korelacije znotraj toplotne karte.
  • color = "grey50": izberite barvo, torej sivo
  • label_size = 3: nastavite velikost nalepke na 3

Izhod:

ggpairs

Na koncu predstavimo še eno funkcijo iz knjižnice GGaly. Ggpair. Ustvari graf v matrični obliki. V enem grafu lahko prikažemo tri vrste izračuna. Matrica je dimenzija z enakim številom opazovanj. Zgornji / spodnji del prikazuje okna in v diagonali. Nadzorujemo lahko, katere informacije želimo prikazati v vsakem delu matrike. Formula za ggpair je:

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

Argumenti :

  • df : uporabljen nabor podatkov
  • stolpci : izberite stolpce za risanje ploskve
  • naslov : vključite naslov
  • zgornji : Nadzirajte polja nad diagonalo ploskve. Potrebno je navesti vrsto izračunov ali graf za vrnitev. Če je neprekinjeno = "cor", prosimo R, da izračuna korelacijo. Upoštevajte, da mora biti argument seznam. Uporabite lahko tudi druge argumente, za več informacij glejte [vinjeta] ("http://ggobi.github.io/ggally/#custom_functions").
  • Spodnje : Nadzirajte polja pod diagonalo.
  • Preslikava : Označuje estetiko grafa. Na primer, lahko izračunamo graf za različne skupine.

Bivariatna analiza z ggpair z razvrščanjem v skupine

Naslednji graf prikazuje tri informacije:

  • Korelacijska matrika med spremenljivko log_totexp, log_income, starostjo in wtransom, razvrščena po tem, ali ima gospodinjstvo otroka ali ne.
  • Izrišite porazdelitev vsake spremenljivke po skupinah
  • Prikaz razpršene ploskve s trendom po skupinah
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))

Razlaga kode

  • stolpci = c ("log_totexp", "log_income", "age", "wtrans"): izberite spremenljivke, ki bodo prikazane na grafu
  • title = "Dvostranska analiza odhodkov britanskega gospodinjstva": dodajte naslov
  • zgornji = seznam (): Nadzirajte zgornji del grafa. Tj. Nad diagonalo
  • neprekinjeno = zavijanje ("cor", velikost = 3)): Izračunajte koeficient korelacije. Argument neprekinjeno zavijemo v funkcijo wrap () za nadzor estetike grafa (tj. Velikost = 3) -lower = list (): Nadziramo spodnji del grafa. Tj. Pod diagonalo.
  • neprekinjeno = zavijanje ("gladko", alfa = 0,3, velikost = 0,1): dodajte razpršeni diagram z linearnim trendom. Argument neprekinjeno zavijemo v funkcijo wrap () za nadzor estetike grafa (tj. Velikost = 0,1, alfa = 0,3)
  • mapping = aes (color = children_fac): Želimo, da se vsak del grafa zloži s spremenljivko children_fac, ki je kategorična spremenljivka, ki ima vrednost 1, če gospodinjstvo nima otrok, 2 pa drugače

Izhod:

Bivariatna analiza z ggparom z delnim razvrščanjem v skupine

Spodnji graf je nekoliko drugačen. Spremenimo položaj preslikave znotraj zgornjega argumenta.

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

Razlaga kode

  • Natančno ista koda kot prejšnji primer, razen za:
  • mapping = aes (color = children_fac): Premaknite seznam v zgornji = seznam (). Želimo samo izračun, ki ga skupina zloži v zgornjem delu grafa.

Izhod:

Povzetek

Funkcijo lahko povzamemo v spodnji tabeli:

knjižnica

Cilj

metoda

Koda

Osnova

bivariatna korelacija

Pearson

cor(dfx2, method = "pearson")

Osnova

bivariatna korelacija

Spearman

cor(dfx2, method = "spearman")

Osnova

Multivariatna korelacija

biser

cor(df, method = "pearson")

Osnova

Multivariatna korelacija

Spearman

cor(df, method = "spearman")

Hmisc

Vrednost P

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

Ggally

toplotni zemljevid

ggcorr(df)

Multivariatne ploskve

cf code below

Zanimive Članki...