Pearsonova i Spearmanova korelacijska matrica u R-u s primjerom
โก Pametni saลพetak
Pearsonova i Spearmanova korelacija u R-u mjeri koliko se snaลพno dvije varijable kreฤu zajedno, koristeฤi cor() za jedan par i matricu korelacije za viลกe njih. Ovaj vodiฤ dodaje testiranje znaฤajnosti pomoฤu Hmisc-a i vizualizira rezultat pomoฤu GGally toplinskih mapa.

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, oznaฤeno kao r, mjeri snagu linearan odnos izmeฤu dvije varijable x i y. Izraฤunava se na sljedeฤi naฤin:
sa
je standardna devijacija x
je standardna devijacija y
Korelacija se kreฤe izmeฤu -1 i 1.
- Vrijednost r blizu ili jednaka 0 implicira malu ili nikakvu linearnu vezu izmeฤu x i y.
- ล to je r bliลพe 1 ili -1, to je linearni odnos jaฤi.
Moลพete provjeriti razlikuje li se r od nule pomoฤu t-statistike u nastavku, usporeฤujuฤi je sa Studentovom distribucijom s n โ 2 stupnja slobode:
Spearmanova korelacija ranga u R
Rang korelacija sortira opaลพanja po rangu i izraฤunava razinu sliฤnosti izmeฤu rangova. Rang korelacija ima prednost ลกto je robusna na outliere i nije povezana s distribucijom podataka. Rang korelacija je takoฤer pravi izbor za ordinalne varijable.
Spearmanova korelacija ranga, oznaฤena kao rho, takoฤer se kreฤe od -1 do 1, a vrijednosti blizu bilo kojem ekstremu ukazuju na jaku monotonu vezu. Izraฤunava se na sljedeฤi naฤin:
Brojnik je kovarijanca izmeฤu rangova x i y, a nazivnik je umnoลพak njihovih standardnih devijacija.
U R-u se oboje izraฤunava funkcijom cor(), koja uzima tri argumenta: x, y i metodu.
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)
Code Objaลกnjenje
- Prvo uvozimo podatke i pogledamo pomoฤu funkcije glimpse() iz knjiลพnice dplyr.
- Tri kuฤanstva prijavljuju prihod od 500 ili viลกe, pa ih filter(prihod < 500) uklanja i broj redaka pada s 1,519 na 1,516.
- 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
Prije proลกirenja ovoga na svaki par varijabli, vrijedi utvrditi kako treba ฤitati pojedinaฤni koeficijent.
Kako interpretirati koeficijent korelacije
Koeficijent je koristan samo kada moลพete reฤi ลกto znaฤi. Trake ispod su konvencionalno oฤitanje, a predznak se oฤitava odvojeno od jaฤine.
| Apsolutna vrijednost r | Snaga odnosa |
|---|---|
| 0.00 0.19 se | Vrlo slabo ili nimalo |
| 0.20 0.39 se | Slab |
| 0.40 0.59 se | Umjereno |
| 0.60 0.79 se | jak |
| 0.80 1.00 se | Vrlo jak |
Vrijednost od -0.2467 izraฤunata ranije izmeฤu log_income i wfood stoga je slaba negativna veza: bogatija kuฤanstva troลกe neลกto manji dio svog proraฤuna na hranu.
Tri upozorenja primjenjuju se na svaki koeficijent.
- Korelacija nije uzroฤnost. Snaลพan r kaลพe da se dvije varijable kreฤu zajedno, nikada da jedna uzrokuje drugu. Treฤa, neizmjerena varijabla ฤesto pokreฤe obje.
- Pearson vidi samo ravne linije. Savrลกen odnos u obliku slova U vraฤa r blizu nule. Uvijek iscrtajte podatke prije nego ลกto se povjerujete broju.
- Veliฤina je vaลพnija od znaฤaja. S 1,516 opaลพanja, koeficijent od 0.06 moลพe biti statistiฤki znaฤajan, a ipak praktiฤki beznaฤajan.
Kako testirati znaฤajnost korelacije pomoฤu cor.test()
cor() vraฤa koeficijent i niลกta drugo. Za jedan par, cor.test() zbraja p-vrijednost i interval pouzdanosti u jednom pozivu.
cor.test(data$log_income, data$wfood, method = "pearson")
Izlaz ima ฤetiri dijela vrijedna ฤitanja.
- t i df: testna statistika i njezini stupnjevi slobode, n โ 2.
- p-vrijednostvjerojatnost da ฤe koeficijent biti ovako velik ako bi stvarna korelacija bila nula.
- 95-postotni interval pouzdanosti: vjerojatni raspon za stvarnu korelaciju. Ako iskljuฤuje nulu, odnos je znaฤajan na toj razini.
- primjer procjene: sam koeficijent, identiฤan onome ลกto vraฤa cor().
Ista funkcija pokreฤe testove temeljene na rangu promjenom jednog argumenta:
# Spearman rank correlation with a p-value cor.test(data$log_income, data$wfood, method = "spearman") # One-sided test: is the correlation greater than zero? cor.test(data$log_income, data$wfood, alternative = "greater")
Kada koji koristiti. Koristite cor.test() kada ispitujete jedan odreฤeni par, jer daje interval pouzdanosti koji rcorr() izostavlja. Koristite rcorr() iz Hmisc-a, prikazan gore, kada trebate p-vrijednosti za cijelu matricu odjednom. Imajte na umu da testiranje mnogih parova poveฤava stopu laลพno pozitivnih rezultata, stoga prilagodite p-vrijednosti pomoฤu p.adjust(p_value, method = โBHโ) prije izvlaฤenja zakljuฤaka iz velike matrice.
Korelacijska matrica u R
Bivarijantna korelacija je dobar poฤetak, ali multivarijantni pogled daje ลกiru sliku. korelacijska matrica je kvadratna tablica koja sadrลพi parne korelacije svake varijable u odnosu na sve ostale.
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.
Korelacija se ne moลพe izraฤunati za faktor, stoga izostavite svaki kategoriฤki stupac prije nego ลกto proslijedite podatkovni okvir funkciji cor().
Korelacijska matrica je simetriฤna ลกto znaฤi da vrijednosti iznad dijagonale imaju iste vrijednosti kao one ispod. Vizualnije je prikazati polovicu matrice.
children_fac je iskljuฤen jer cor() ne moลพe operirati na faktoru.
# 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
Code Objaลกnjenje
- cor(podaci[, 1:9])Izraฤunajte matricu korelacije na devet numeriฤkih stupaca
- okruglo(โฆ, 2)Zaokruลพite svaki koeficijent na dvije decimale
- as.dist()Ispiลกite samo donji trokut, buduฤi da je matrica simetriฤna
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
Koeficijent sam po sebi ne govori je li odnos statistiฤki pouzdan. Funkcija rcorr() iz Hmisc biblioteke vraฤa p-vrijednost za svaki par. Biblioteku moลพemo preuzeti s 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
Code Objaลกnjenje
- 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 ฤitanja korelacijske matrice. Biblioteka GGally proลกiruje ggplot2 i instalira se iz CRAN-a, a ne iz conda-e:
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)
Code Objaลกnjenje
- 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")
Code Objaลกnjenje
- 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")
Code Objaลกnjenje
- 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
Biblioteka GGally takoฤer nudi ggpairs(), koja vraฤa matricu grafova. Za k odabranih varijabli rezultat je mreลพa ak x k: dijagonala prikazuje distribuciju svake varijable, dok ploฤe iznad i ispod dijagonale mogu nositi razliฤit izraฤun. Sintaksa je:
ggpairs(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 grafikona. Potrebno je navesti vrstu izraฤuna ili grafa koji treba vratiti. Ako je continuous = "cor", traลพimo od R-a da izraฤuna korelaciju. Imajte na umu da argument mora biti popis. Dostupni su i drugi argumenti; pogledajte GGally dokumentacija za viลกe informacija.
- smanjiti: Kontrolirajte okvire ispod dijagonale.
- kartaping: Oznaฤava estetiku grafikona. Na primjer, moลพemo izraฤunati grafikon za razliฤite skupine.
Bivarijantna analiza s ggpairom i grouping
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))
Code Objaลกnjenje
- 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)
- kartaping = aes(boja = djeฤji_fac)Podijelite svaki panel prema children_fac, ureฤenom faktoru oznaฤenom s "Ne" za kuฤanstva bez djece i "Da" za kuฤanstva s djecom
Izlaz:
Bivarijatna analiza s ggpairom i parcijalnom grupomping
Grafikon ispod je malo drugaฤiji. Mijenjamo poloลพaj karteping 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)) )
Code Objaลกnjenje
- Potpuno isti kod kao prethodni primjer osim:
- kartaping = aes(color = children_fac): Premjesti popis u gornji = list(). ลฝelimo da izraฤun bude sloลพen po grupama samo u gornjem dijelu grafa.
Izlaz:
Korelacija u R-u: Kljuฤne informacije i referenca funkcija
- 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 kreฤe se od -1 do 1, a vrijednosti blizu bilo kojeg ekstrema ukazuju na jaku monotonu vezu.
- Matrica korelacije je kvadratna tablica koja sadrลพi parne korelacije svake varijable.
- P-vrijednost vam govori je li uoฤena korelacija statistiฤki razliฤita od nule.
Svaka korelacijska funkcija koriลกtena u ovom tutorijalu navedena je u nastavku:
| Knjiลพnica | Cilj | naฤin | Code |
|---|---|---|---|
| Baza | Bivarijantna korelacija | Pearson |
cor(dfx2, method = "pearson") |
| Baza | Bivarijantna 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)
|
| GGally | Matrica viลกevarijantnog grafikona | - |
ggpairs(df, columns = c("x1", "x2")) |









