Korelacija u R: Pearson & Spearman Correlation Matrix

Bivarijatna korelacija u R

Bivarijantni odnos opisuje odnos - ili korelaciju - izmeฤ‘u dviju varijabli u R. U ovom vodiฤu ฤ‡emo raspravljati o konceptu korelacije i pokazati kako se moลพe koristiti za mjerenje odnosa izmeฤ‘u bilo koje dvije varijable u R.

Korelacija u R programiranju

Postoje dvije primarne metode za izraฤunavanje korelacije izmeฤ‘u dvije varijable u R programiranju:

  • Pearson: Parametarska korelacija
  • Kopljanik: Neparametarska korelacija

Pearsonova korelacijska matrica u R

Pearsonova metoda korelacije obiฤno se koristi kao primarna provjera odnosa izmeฤ‘u dviju varijabli.

The koeficijent korelacije, , je mjera snage linearan odnos izmeฤ‘u dvije varijable i . Izraฤunava se na sljedeฤ‡i naฤin:

Pearsonova korelacijska matrica u R

sa

  • Pearsonova korelacijska matrica u R, tj. standardna devijacija od
  • Pearsonova korelacijska matrica u R, tj. standardna devijacija od

Korelacija se kreฤ‡e izmeฤ‘u -1 i 1.

  • Vrijednost blizu ili jednaka 0 podrazumijeva mali ili nikakav linearni odnos izmeฤ‘u i .
  • Nasuprot tome, ลกto je bliลพe 1 ili -1, to je linearni odnos jaฤi.

Moลพemo izraฤunati t-test kako slijedi i provjeriti tablicu distribucije sa stupnjem slobode jednakim:

Pearsonova korelacijska matrica u R

Spearmanova korelacija ranga u R

Korelacija ranga razvrstava zapaลพanja prema rangu i izraฤunava razinu sliฤnosti izmeฤ‘u ranga. Korelacija ranga ima prednost jer je otporna na izvanredne vrijednosti i nije povezana s distribucijom podataka. Imajte na umu da je korelacija ranga prikladna za ordinalnu varijablu.

Spearmanova korelacija ranga, , uvijek je izmeฤ‘u -1 i 1, a vrijednost blizu ekstrema ukazuje na snaลพnu povezanost. Izraฤunava se na sljedeฤ‡i naฤin:

Spearmanova korelacija ranga u R

s navedenim kovarijacijama izmeฤ‘u ranga i . Nazivnik izraฤunava standardna odstupanja.

U R-u moลพemo koristiti funkciju cor(). Potrebna su tri argumenta, i metoda.

cor(x, y, method)

argumenti:

  • x: Prvi vektor
  • y: Drugi vektor
  • naฤin: Formula koja se koristi za izraฤunavanje korelacije. Tri vrijednosti niza:
    • โ€œpearsonโ€
    • โ€œkendallโ€
    • "kopljanik"

Neobavezni argument moลพe se dodati ako vektori sadrลพe vrijednost koja nedostaje: use = โ€œcomplete.obsโ€

Koristit ฤ‡emo skup podataka BudgetUK. Ovaj skup podataka izvjeลกฤ‡uje o raspodjeli proraฤuna britanskih kuฤ‡anstava izmeฤ‘u 1980. i 1982. Postoji 1519 promatranja s deset znaฤajki, meฤ‘u kojima su:

  • wfood: dijeliti hranu dijeliti troลกiti
  • wgorivo: podijelite potroลกnju goriva
  • krpa: udio proraฤuna za potroลกnju na odjeฤ‡u
  • hodati: podijeliti troลกenje alkohola
  • wtrans: podijelite troลกkove prijevoza
  • majka: udio potroลกnje ostalih dobara
  • totexp: ukupna potroลกnja kuฤ‡anstva u funtama
  • dohodak: ukupni neto prihod kuฤ‡anstva
  • starost: starost kuฤ‡anstva
  • djeca: broj djece

Primjer

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)

Objaลกnjenje koda

  • Prvo uvozimo podatke i pogledamo pomoฤ‡u funkcije glimpse() iz knjiลพnice dplyr.
  • Tri toฤke su iznad 500K, pa smo ih odluฤili iskljuฤiti.
  • Uobiฤajena je praksa pretvaranje monetarne varijable u log. Pomaลพe smanjiti utjecaj odstupanja i smanjuje asimetriju u skupu podataka.

Izlaz:

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

Moลพemo izraฤunati koeficijent korelacije izmeฤ‘u varijabli dohotka i wfood metodama โ€œpearsonโ€ i โ€œspearmanโ€.

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

Izlaz:

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

Izlaz:

## [1] -0.2501252

Korelacijska matrica u R

Bivarijatna korelacija je dobar poฤetak, ali moลพemo dobiti ลกiru sliku multivarijatnom analizom. Korelacija s mnogim varijablama prikazana je unutar a korelacijska matrica. Korelacijska matrica je matrica koja predstavlja korelaciju parova svih varijabli.

Funkcija cor() vraฤ‡a korelacijsku matricu. Jedina razlika u odnosu na bivarijatnu korelaciju je ลกto ne trebamo specificirati koje varijable. Prema zadanim postavkama, R izraฤunava korelaciju izmeฤ‘u svih varijabli.

Imajte na umu da se korelacija ne moลพe izraฤunati za varijablu faktora. Moramo biti sigurni da smo ispustili kategoriฤku znaฤajku prije nego ลกto proslijedimo podatkovni okvir unutar cor().

Korelacijska matrica je simetriฤna ลกto znaฤi da vrijednosti iznad dijagonale imaju iste vrijednosti kao one ispod. Vizualnije je prikazati polovicu matrice.

Iskljuฤujemo children_fac jer je to varijabla razine faktora. cor ne provodi korelaciju na kategoriฤkoj varijabli.

# 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

Objaลกnjenje koda

  • kor(podaci): Prikaz korelacijske matrice
  • krug(podaci, 2): Zaokruลพite korelacijsku matricu s dvije decimale
  • as.dist(): Prikazuje samo drugu polovicu

Izlaz:

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

Razina znaฤajnosti

Razina znaฤajnosti je korisna u nekim situacijama kada koristimo Pearsonovu ili Spearman metodu. Funkcija rcorr() iz biblioteke Hmisc za nas izraฤunava p-vrijednost. Biblioteku moลพemo preuzeti sa konda i kopirajte kod da biste ga zalijepili u terminal:

conda install -c r r-hmisc

Rcorr() zahtijeva da okvir podataka bude pohranjen kao matrica. Moลพemo pretvoriti naลกe podatke u matricu prije nego ลกto izraฤunamo korelacijsku matricu s p-vrijednoลกฤ‡u.

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

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

Objekt liste mat_2 sadrลพi tri elementa:

  • r: Izlaz korelacijske matrice
  • n: Broj opaลพanja
  • P: p-vrijednost

Zanima nas treฤ‡i element, p-vrijednost. Uobiฤajeno je prikazati korelacijsku matricu s p-vrijednoลกฤ‡u umjesto koeficijenta korelacije.

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

Objaลกnjenje koda

  • mat_2[[โ€œPโ€]]: p-vrijednosti su pohranjene u elementu koji se zove P
  • okruglo(mat_2[[โ€œPโ€]], 3): Zaokruลพite elemente s tri znamenke

Izlaz:

           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

Vizualizacija korelacijske matrice u R

Toplinska karta je joลก jedan naฤin za prikaz korelacijske matrice. Knjiลพnica GGally je proลกirenje ggplot2. Trenutno nije dostupan u biblioteci conda. Moลพemo instalirati izravno u konzolu.

install.packages("GGally")

Vizualizacija korelacijske matrice

Knjiลพnica ukljuฤuje razliฤite funkcije za prikaz sumarne statistike kao ลกto je korelacija i distribucija svih varijabli u matrica.

Funkcija ggcorr() ima mnogo argumenata. Predstavit ฤ‡emo samo argumente koje ฤ‡emo koristiti u uputama:

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: Koriลกteni skup podataka
  • naฤin: Formula za izraฤunavanje korelacije. Prema zadanim postavkama izraฤunavaju se parovi i Pearson
  • nbreaks: Vrati kategoriฤki raspon za bojenje koeficijenata. Prema zadanim postavkama, nema prekida i gradijent boja je kontinuiran
  • znamenki: Zaokruลพite koeficijent korelacije. Prema zadanim postavkama postavljeno na 2
  • nisko: Kontrolirajte niลพu razinu obojenosti
  • srednji: Kontrolirajte srednju razinu obojenosti
  • visok: Kontrolirajte visoku razinu obojenosti
  • geom: Kontrolirajte oblik geometrijskog argumenta. Prema zadanim postavkama, "ploฤica"
  • oznaka: Booleova vrijednost. Prikaลพi ili ne oznaku. Prema zadanim postavkama postavljeno na `FALSE`

Osnovna toplinska karta

Najosnovniji crteลพ paketa je toplinska karta. Legenda grafikona prikazuje gradijent boje od โ€“ 1 do 1, s vruฤ‡om bojom koja oznaฤava jaku pozitivnu korelaciju, a hladnom bojom negativnu korelaciju.

library(GGally)
ggcorr(data)

Objaลกnjenje koda

  • ggcorr(podaci): Potreban je samo jedan argument, a to je naziv okvira podataka. Varijable razine faktora nisu ukljuฤene u dijagram.

Izlaz:

Osnovna toplinska karta

Dodavanje kontrole na toplinsku kartu

Grafikonu moลพemo dodati viลกe kontrola:

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

Objaลกnjenje koda

  • nprekidi=6: razbiti legendu sa 6 redova.
  • niska = "ฤeliฤnoplava": Koristite svjetlije boje za negativnu korelaciju
  • sredina = โ€œbijeloโ€: Koristite bijele boje za korelaciju srednjih raspona
  • visoko = "tamno": Koristite tamne boje za pozitivnu korelaciju
  • geom = โ€œkrugโ€: Koristite krug kao oblik prozora na toplinskoj karti. Veliฤina kruga proporcionalna je apsolutnoj vrijednosti korelacije.

Izlaz:

Dodavanje kontrole na toplinsku kartu

Dodavanje oznake na toplinsku kartu

GGally nam omoguฤ‡uje dodavanje oznake unutar prozora:

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

Objaลกnjenje koda

  • oznaka = TRUE: Dodajte vrijednosti koeficijenata korelacije unutar toplinske karte.
  • boja = โ€œsiva50โ€: Odaberite boju, tj. sivu
  • veliฤina_oznake = 3: Postavite veliฤinu naljepnice na 3

Izlaz:

Dodavanje oznake na toplinsku kartu

Funkcija ggpairs

Na kraju, predstavljamo joลก jednu funkciju iz biblioteke GGaly. Ggpair. Proizvodi graf u matriฤnom formatu. Moลพemo prikazati tri vrste izraฤuna unutar jednog grafikona. Matrica je dimenzija s jednakim brojem opaลพanja. Gornji/donji dio prikazuje prozore i dijagonalno. Moลพemo kontrolirati koje informacije ลพelimo prikazati u svakom dijelu matrice. Formula za ggpair je:

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

argumenti:

  • df: Koriลกteni skup podataka
  • stupovi: Odaberite stupce za crtanje dijagrama
  • naslov: Ukljuฤite naslov
  • gornji: Kontrolirajte okvire iznad dijagonale crteลพa. Potrebno je navesti vrstu izraฤuna ili grafikona za vraฤ‡anje. Ako je kontinuirano = โ€œcorโ€, traลพimo od R-a da izraฤuna korelaciju. Imajte na umu da argument mora biti popis. Mogu se koristiti i drugi argumenti, pogledajte [vignette]("http://ggobi.github.io/ggally/#custom_functions") za viลกe informacija.
  • Spustite: Kontrolirajte okvire ispod dijagonale.
  • Mapiranje: Oznaฤava estetiku grafikona. Na primjer, moลพemo izraฤunati grafikon za razliฤite skupine.

Bivarijatna analiza s ggpair s grupiranjem

Sljedeฤ‡i grafikon prikazuje tri informacije:

  • Korelacijska matrica izmeฤ‘u varijabli log_totex, log_income, age i wtrans grupiranih prema tome ima li kuฤ‡anstvo dijete ili ne.
  • Nacrtajte distribuciju svake varijable po skupini
  • Prikaลพite dijagram rasprลกenosti s trendom po grupi
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))

Objaลกnjenje koda

  • stupci = c(โ€œlog_totexโ€, โ€œlog_incomeโ€, โ€œageโ€, โ€œwtransโ€): Odaberite varijable za prikaz na grafikonu
  • title = โ€œBivarijantna analiza rashoda prihoda britanskog kuฤ‡anstvaโ€: Dodajte naslov
  • gornji = lista(): Kontrolirajte gornji dio grafikona. Tj. Iznad dijagonale
  • kontinuirano = omot ("cor", veliฤina = 3)): Izraฤunajte koeficijent korelacije. Umotavamo kontinuirani argument unutar funkcije wrap() kako bismo kontrolirali estetiku grafa (tj. veliฤina = 3) -lower = list(): Kontrolirajte donji dio grafa. Tj. Ispod dijagonale.
  • kontinuirano = omot (โ€œglatkoโ€, alfa = 0.3, veliฤina = 0.1): Dodajte dijagram rasprลกenosti s linearnim trendom. Umotavamo kontinuirani argument unutar funkcije wrap() kako bismo kontrolirali estetiku grafikona (tj. veliฤina=0.1, alfa=0.3)
  • mapiranje = aes(boja = djeca_fac): ลฝelimo da svaki dio grafikona bude naslagan varijablom children_fac, koja je kategoriฤka varijabla koja ima vrijednost 1 ako kuฤ‡anstvo nema djece i 2 u suprotnom

Izlaz:

Bivarijatna analiza s ggpair s grupiranjem

Bivarijatna analiza s ggpair s djelomiฤnim grupiranjem

Grafikon ispod je malo drugaฤiji. Mijenjamo poloลพaj preslikavanja unutar gornjeg 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))
)

Objaลกnjenje koda

  • Potpuno isti kod kao prethodni primjer osim:
  • mapiranje = aes(color = children_fac): Premjesti popis u gornji = list(). ลฝelimo samo izraฤun sloลพen po grupama u gornjem dijelu grafikona.

Izlaz:

Bivarijatna analiza s ggpair s djelomiฤnim grupiranjem

Rezime

  • Bivarijantni odnos opisuje odnos - ili korelaciju - izmeฤ‘u dvije varijable u R.
  • Postoje dvije primarne metode za izraฤunavanje korelacije izmeฤ‘u dvije varijable R Programiranje: Pearson & Spearman.
  • Pearsonova metoda korelacije obiฤno se koristi kao primarna provjera odnosa izmeฤ‘u dviju varijabli.
  • Korelacija ranga razvrstava zapaลพanja prema rangu i izraฤunava razinu sliฤnosti izmeฤ‘u ranga.
  • Spearmanova korelacija ranga, , uvijek je izmeฤ‘u -1 i 1, a vrijednost blizu ekstrema ukazuje na snaลพnu povezanost.
  • Korelacijska matrica je matrica koja predstavlja korelaciju parova svih varijabli.
  • Razina znaฤajnosti je korisna u nekim situacijama kada koristimo Pearsonovu ili Spearman metodu.

Moลพemo saลพeti sve korelacijske funkcije u R u donjoj tablici:

Knjiลพnica Cilj naฤin Kodirati
Baza bivariatna korelacija Pearson
cor(dfx2, method = "pearson")
Baza bivariatna korelacija Kopljanik
cor(dfx2, method = "spearman")
Baza Multivarijatna korelacija Pearson
cor(df, method = "pearson")
Baza Multivarijatna korelacija Kopljanik
cor(df, method = "spearman")
Hmisc P vrijednost
rcorr(as.matrix(data[,1:9]))[["P"]]
Ggally karta topline
ggcorr(df)
Multivarijantni dijagrami
cf code below

Saลพmite ovu objavu uz: