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:
s
, tj. standardna devijacija od
, 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:
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:
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")
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:
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 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:
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 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:
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 |