Korelacija u R: Pearson & Primjer kopljanika s matricom

Bivarijantni odnos opisuje odnos ili povezanost dviju varijabli i. U ovom uputstvu raspravljamo o konceptu korelacije i pokazujemo kako se on može koristiti za mjerenje odnosa između bilo koje dvije varijable.

Postoje dvije primarne metode za izračunavanje korelacije između dvije varijable.

  • Pearson: Parametarska korelacija
  • Spearman: Neparametarska korelacija

U ovom ćete tutorijalu naučiti

  • Pearsonova korelacija
  • Korelacija Spearmanova ranga
  • Matrica korelacije
  • Vizualizirajte matricu korelacije

Pearsonova korelacija

Pearsonova metoda korelacije obično se koristi kao primarna provjera povezanosti dviju varijabli.

Koeficijent korelacije , je mjera jakosti linearne veze između dviju varijabli i. Izračunava se na sljedeći način:

s

  • , tj. standardno odstupanje od
  • , tj. standardno odstupanje od

Korelacija se kreće između -1 i 1.

  • Vrijednost blizu ili jednaka 0 podrazumijeva mali ili nikakav linearni odnos između i.
  • Suprotno tome, što je bliže 1 ili -1, to je linearni odnos jači.

T-test možemo izračunati kako slijedi i provjeriti tablicu raspodjele sa stupnjem slobode jednakim:

Korelacija Spearmanova ranga

Korelacija ranga sortira zapažanja prema rangu i izračunava razinu sličnosti između ranga. Korelacija ranga ima tu prednost što je robusna u odnosu na izvanredne vrijednosti i nije povezana s distribucijom podataka. Imajte na umu da je korelacija ranga prikladna za rednu varijablu.

Korelacija Spearmanova ranga, uvijek je između -1 i 1, a vrijednost blizu ekstremiteta ukazuje na snažnu povezanost. Izračunava se na sljedeći način:

s navedenim kovarijancijama između ranga i. U nazivniku se izračunavaju standardna odstupanja.

U R možemo koristiti funkciju cor (). Potrebna su tri argumenta, i metoda.

cor(x, y, method)

Argumenti :

  • x: prvi vektor
  • y: Drugi vektor
  • metoda: Formula korištena za izračunavanje korelacije. Tri vrijednosti niza:
    • "biser"
    • "Kendall"
    • "kopljanik"

Neobvezni argument može se dodati ako vektori sadrže vrijednost koja nedostaje: use = "complete.obs"

Upotrijebit ćemo skup podataka BudgetUK. Ovaj skup podataka izvještava o proračunu raspodjele britanskih kućanstava između 1980. i 1982. Postoji 1519 opažanja s deset značajki, među kojima su:

  • wfood: dijeliti hranu dijeliti trošiti
  • wfuel: podijelite potrošnju goriva
  • wcloth: udio proračuna za potrošnju odjeće
  • walc: podijelite alkohol
  • wtrans: podijelite troškove prijevoza
  • wother: udio potrošnje ostale robe
  • totexp: ukupna potrošnja kućanstva u funtama
  • dohodak ukupno neto dohodak kućanstva
  • dob: dob 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 s funkcijom glimpse () iz biblioteke dplyr.
  • Tri su boda iznad 500 000, pa smo ih odlučili izuzeti.
  • Uobičajena je praksa pretvaranja novčane varijable u zapisnik. Pomaže smanjiti utjecaj izvanrednih vrijednosti i smanjuje neravnine u skupu podataka.

Izlaz:

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

Koeficijent korelacije između varijabli dohotka i hrane možemo izračunati 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 

Matrica korelacije

Bivarijatna korelacija je dobar početak, ali širu sliku možemo dobiti multivarijantnom analizom. Korelacija s mnogim varijablama prikazana je unutar matrice korelacije . Korelacijska matrica je matrica koja predstavlja parnu korelaciju svih varijabli.

Funkcija cor () vraća matricu korelacije. Jedina razlika s bivarijatnom korelacijom je što ne trebamo navesti 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 ćemo ispustiti kategorijsku značajku prije nego što prođemo okvir podataka unutar cor ().

Matrica korelacije je simetrična, što znači da vrijednosti iznad dijagonale imaju iste vrijednosti kao i ona dolje. Vizualnije je prikazati polovicu matrice.

Izuzimamo children_fac jer je to varijabla na razini faktora. cor ne vrši korelaciju na kategorijalnoj varijabli.

# 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

Objašnjenje koda

  • cor (podaci): Prikaz matrice korelacije
  • okruglo (podaci, 2): zaokružite matricu korelacije s dva decimala
  • as.dist (): Prikazuje samo drugo poluvrijeme

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 korisna je u nekim situacijama kada se koristimo metodom biser ili kopljanik. Funkcija rcorr () iz knjižnice Hmisc izračunava za nas vrijednost p. Knjižnicu možemo preuzeti s conda i kopirati kôd da bismo je zalijepili u terminal:

conda install -c r r-hmisc 

Rcorr () zahtijeva da se okvir podataka pohrani kao matrica. Naše podatke možemo prije pretvoriti u matricu kako bismo izračunali matricu korelacije 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 popisa mat_2 sadrži tri elementa:

  • r: Izlaz matrice korelacije
  • n: Broj promatranja
  • P: p-vrijednost

Zanima nas treći element, p-vrijednost. Uobičajeno je da se matrica korelacije prikazuje s p-vrijednošću umjesto s koeficijentom korelacije.

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

Objašnjenje koda

  • mat_2 [["P"]]: p-vrijednosti pohranjene su u elementu zvanom P
  • okrugli (mat_2 [["" P "]], 3): zaokružite elemente s tri znamenke

Izlaz:

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 matricu korelacije

Mapa topline je još jedan način za prikaz matrice korelacije. GGally knjižnica je proširenje ggplot2. Trenutno nije dostupan u biblioteci conda. Možemo instalirati izravno u konzolu.

install.packages("GGally")

Biblioteka uključuje različite funkcije za prikaz sažetih statistika, poput korelacije i distribucije svih varijabli u matrici.

Funkcija ggcorr () ima puno argumenata. Uvest ćemo samo argumente koje ćemo koristiti u vodiču:

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šten skup podataka
  • metoda : Formula za izračunavanje korelacije. Prema zadanim postavkama izračunavaju se upareni i Pearson
  • nbreaks : Vrati kategorički raspon za obojenost koeficijenata. Prema zadanim postavkama nema prekida, a gradijent boje je neprekidan
  • znamenke : zaokružite koeficijent korelacije. Prema zadanim postavkama postavite na 2
  • niska : kontrolirajte donju razinu obojenja
  • sredina : kontrolirajte srednju razinu bojanja
  • visoka : kontrolirajte visoku razinu obojenja
  • geom : Kontrolirajte oblik geometrijskog argumenta. Prema zadanim postavkama, "pločica"
  • oznaka : Booleova vrijednost. Prikažite naljepnicu ili ne. Prema zadanim postavkama postavite na "FALSE"

Osnovna karta topline

Najosnovnija parcela paketa je toplinska karta. Legenda grafa prikazuje gradijentnu boju od - 1 do 1, s vrućom bojom koja označava snažnu pozitivnu korelaciju, a hladnom bojom, negativnu korelaciju.

library(GGally)ggcorr(data)

Objašnjenje koda

  • ggcorr (podaci): Potreban je samo jedan argument, a to je ime okvira podataka. Varijable razine faktora nisu uključene u grafikon.

Izlaz:

Dodajte kontrolu na kartu topline

Grafu možemo dodati više kontrola.

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

Objašnjenje koda

  • nbreaks = 6: razbiti legendu sa 6 redova.
  • low = "steelblue": Koristite svjetlije boje za negativnu korelaciju
  • mid = "white": Koristite bijele boje za korelaciju srednjeg raspona
  • high = "darkred": 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:

Dodajte oznaku na kartu topline

GGally nam omogućuje dodavanje oznake unutar prozora.

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

Objašnjenje koda

  • label = TRUE: Dodajte vrijednosti koeficijenata korelacije unutar toplinske karte.
  • color = "grey50": Odaberite boju, tj. sivu
  • label_size = 3: Postavite veličinu naljepnice na 3

Izlaz:

ggpairs

Na kraju uvodimo još jednu funkciju iz GGaly biblioteke. Ggpair. Izrađuje graf u matričnom formatu. U jednom grafikonu možemo prikazati tri vrste izračuna. Matrica je dimenzija, s jednakim brojem promatranja. Gornji / donji dio prikazuje prozore i u dijagonali. 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šten skup podataka
  • stupci : odaberite stupce za crtanje crteža
  • naslov : Uključite naslov
  • gornji : kontrolirajte okvire iznad dijagonale crteža. Potrebno je navesti vrstu izračuna ili grafikon koji se vraća. Ako je kontinuirano = "cor", tražimo od R da izračuna korelaciju. Imajte na umu da argument mora biti popis. Mogu se koristiti i drugi argumenti, za više informacija pogledajte [vinjeta] ("http://ggobi.github.io/ggally/#custom_functions").
  • Spustite : Kontrola polja ispod dijagonale.
  • Mapiranje : Označava estetiku grafa. Na primjer, možemo izračunati graf za različite skupine.

Bivarijatna analiza s ggparom s grupiranjem

Sljedeći graf prikazuje tri informacije:

  • Matrica korelacije između varijable log_totexp, log_income, age i wtrans grupirana prema tome ima li kućanstvo dijete ili ne.
  • Nacrtajte raspodjelu svake varijable po skupinama
  • Prikažite grafikon raspršenja s trendom po skupinama
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_totexp", "log_income", "age", "wtrans"): Odaberite varijable koje će se prikazivati ​​na grafikonu
  • title = "Dvostruka analiza prihoda britanskog kućanstva": dodajte naslov
  • gornji = popis (): Upravljanje gornjim dijelom grafikona. Tj. Iznad dijagonale
  • kontinuirano = premotavanje ("cor", veličina = 3)): Izračunajte koeficijent korelacije. Argument umotavamo kontinuirano u funkciju wrap () kako bismo kontrolirali estetiku grafa (tj. Veličina = 3) -lower = list (): Kontroliramo donji dio grafa. Tj. Ispod dijagonale.
  • kontinuirano = premotavanje ("glatko", alfa = 0,3, veličina = 0,1): dodajte dijagram raspršenja s linearnim trendom. Argument umotavamo kontinuirano u funkciju wrap () da bismo kontrolirali estetiku grafa (tj. Veličina = 0,1, alfa = 0,3)
  • preslikavanje = aes (boja = djeca_fak): Želimo da svaki dio grafa složi varijabla djeca_fac, koja je kategorična varijabla koja uzima vrijednost 1 ako kućanstvo nema djecu, a 2 inače

Izlaz:

Bivarijatna analiza s ggparom s djelomičnim grupiranjem

Grafikon u nastavku je malo drugačiji. Mijenjamo položaj mapiranja 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

  • Točno isti kôd kao i prethodni primjer, osim za:
  • preslikavanje = aes (boja = djeca_fak): Premjestite popis u gornji = popis (). Želimo samo računanje složeno po skupinama u gornjem dijelu grafikona.

Izlaz:

Sažetak

Funkciju možemo sažeti u donjoj tablici:

knjižnica

Cilj

metoda

kodirati

Baza

bivarijatna korelacija

Pearson

cor(dfx2, method = "pearson")

Baza

bivarijatna korelacija

Kopljanik

cor(dfx2, method = "spearman")

Baza

Multivarijacijska korelacija

Pearson

cor(df, method = "pearson")

Baza

Multivarijacijska korelacija

Kopljanik

cor(df, method = "spearman")

Hmisc

P vrijednost

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

Ggally

toplinska karta

ggcorr(df)

Viševarijantne parcele

cf code below

Zanimljivi članci...