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:
sa
, 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 |









