Korelácia v R: Pearson & Co. Spearman with Matrix Príklad

Bivariantný vzťah popisuje vzťah alebo koreláciu medzi dvoma premennými a. V tomto tutoriáli sa zaoberáme konceptom korelácie a ukazujeme, ako sa dá použiť na meranie vzťahu medzi ľubovoľnými dvoma premennými.

Existujú dve primárne metódy na výpočet korelácie medzi dvoma premennými.

  • Pearson: Parametrická korelácia
  • Spearman: Neparametrická korelácia

V tomto návode sa naučíte

  • Pearsonova korelácia
  • Spearman Rank Correlation
  • Korelačná matica
  • Vizualizujte korelačnú maticu

Pearsonova korelácia

Pearsonova korelačná metóda sa zvyčajne používa ako primárna kontrola vzťahu medzi dvoma premennými.

Korelačný koeficient , je meradlom sily lineárneho vzťahu medzi dvoma premennými a. Vypočíta sa nasledovne:

s

  • , tj smerodajná odchýlka
  • , tj smerodajná odchýlka

Korelácia sa pohybuje medzi -1 a 1.

  • Hodnota blízka alebo rovná 0 znamená malý alebo žiadny lineárny vzťah medzi a.
  • Naopak, čím bližšie je 1 alebo -1, tým silnejší je lineárny vzťah.

T-test môžeme vypočítať nasledovne a skontrolovať distribučnú tabuľku so stupňom voľnosti rovným:

Spearman Rank Correlation

Korelácia podľa poradia zoradí pozorovania podľa poradia a vypočíta úroveň podobnosti medzi hodnotením. Výhodou korelačnej korelácie je, že je robustná voči odľahlým hodnotám, a nesúvisí s distribúciou údajov. Všimnite si, že pre ordinálnu premennú je vhodná korelácia radov.

Spearmanova korelácia s hodnotami,, je vždy medzi -1 a 1 s hodnotou blízko ku koncu, naznačuje silný vzťah. Vypočíta sa nasledovne:

s uvedenými kovarianciami medzi hodnosťou a. Menovateľ počíta štandardné odchýlky.

V R môžeme použiť funkciu cor (). Trvá to tri argumenty, a metóda.

cor(x, y, method)

Argumenty :

  • x: Prvý vektor
  • y: Druhý vektor
  • metóda: Vzorec použitý na výpočet korelácie. Tri hodnoty reťazca:
    • "pearson"
    • „kendall“
    • „kopijník“

Ak vektory obsahujú chýbajúcu hodnotu, je možné pridať voliteľný argument: use = "complete.obs"

Použijeme dataset BudgetUK. Tento súbor údajov uvádza rozdelenie rozpočtu britských domácností medzi rokmi 1980 a 1982. Existuje 1519 pozorovaní s desiatimi funkciami, medzi ktoré patrí:

  • wfood: share food share spend
  • wfuel: podiel výdavkov na palivo
  • tkanina: podiel rozpočtu na výdavky na oblečenie
  • walc: zdieľajte výdavky na alkohol
  • wtrans: zdieľanie výdavkov na dopravu
  • wother: podiel výdavkov na ostatný tovar
  • totexp: celkové výdavky domácnosti v librách
  • príjem celkový čistý príjem domácnosti
  • vek: vek domácnosti
  • deti: počet detí
Príklad
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)

Vysvetlenie kódu

  • Najskôr importujeme údaje a pozrieme sa na funkciu glimpse () z knižnice dplyr.
  • Tri body sú nad 500 tis., Preto sme sa rozhodli ich vylúčiť.
  • Je bežnou praxou prevádzať peňažnú premennú v logu. Pomáha znižovať vplyv odľahlých hodnôt a znižuje krivicu v množine údajov.

Výkon:

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

Môžeme vypočítať korelačný koeficient medzi príjmovými a premennými premennými pomocou metód „pearson“ a „spearman“.

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

výkon:

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

Výkon:

## [1] -0.2501252 

Korelačná matica

Bivariantná korelácia je dobrým začiatkom, ale pomocou multivariačnej analýzy môžeme získať širší obraz. Korelácia s mnohými premennými je zobrazená vo vnútri korelačnej matice . Korelačná matica je matica, ktorá predstavuje párovú koreláciu všetkých premenných.

Funkcia cor () vráti korelačnú maticu. Jediný rozdiel v dvojrozmernej korelácii je, že nemusíme špecifikovať, ktoré premenné. Predvolene R počíta koreláciu medzi všetkými premennými.

Pre faktorovú premennú nie je možné vypočítať koreláciu. Predtým, ako odovzdáme dátový rámec vo vnútri cor (), musíme sa ubezpečiť, že upustíme od kategorickej funkcie.

Korelačná matica je symetrická, čo znamená, že hodnoty nad uhlopriečkou majú rovnaké hodnoty ako hodnoty nižšie. Vizuálnejšie je zobraziť polovicu matice.

Vylúčime children_fac, pretože ide o premennú na úrovni faktora. cor nevykonáva koreláciu s kategorickou premennou.

# 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

Vysvetlenie kódu

  • cor (data): Zobrazí korelačnú maticu
  • zaokrúhliť (údaje, 2): zaokrúhliť korelačnú maticu dvoma desatinnými miestami
  • as.dist (): Zobrazí iba druhú polovicu

Výkon:

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

Úroveň dôležitosti

Úroveň významnosti je užitočná v niektorých situáciách, keď používame Pearsonovu alebo oštepársku metódu. Funkcia rcorr () z knižnice Hmisc pre nás počíta hodnotu p. Môžeme si stiahnuť knižnicu z conda a skopírovať kód a vložiť ho do terminálu:

conda install -c r r-hmisc 

Rcorr () vyžaduje, aby bol dátový rámec uložený ako matica. Naše údaje môžeme previesť do matice predtým, ako vypočítame korelačnú maticu s hodnotou p.

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 zoznamu mat_2 obsahuje tri prvky:

  • r: Výstup korelačnej matice
  • n: Počet pozorovaní
  • P: hodnota p

Nás zaujíma tretí prvok, p-hodnota. Je bežné, že sa namiesto korelačného koeficientu zobrazuje korelačná matica s hodnotou p.

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

Vysvetlenie kódu

  • mat_2 [["P"]]: Hodnoty p sú uložené v prvku zvanom P
  • zaokrúhlenie (mat_2 [["P"]], 3): Zaokrúhli prvky tromi číslicami

Výkon:

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

Vizualizujte korelačnú maticu

Tepelná mapa je ďalším spôsobom, ako zobraziť korelačnú maticu. Knižnica GGally je rozšírením ggplot2. V súčasnosti nie je k dispozícii v knižnici conda. Môžeme inštalovať priamo do konzoly.

install.packages("GGally")

Knižnica obsahuje rôzne funkcie na zobrazovanie súhrnných štatistík, ako je korelácia a distribúcia všetkých premenných v matici.

Funkcia ggcorr () má veľa argumentov. Predstavíme iba argumenty, ktoré použijeme v tutoriále:

Funkcia ggcorr

ggcorr(df, method = c("pairwise", "pearson"),nbreaks = NULL, digits = 2, low = "#3B9AB2",mid = "#EEEEEE", high = "#F21A00",geom = "tile", label = FALSE,label_alpha = FALSE)

Argumenty:

  • df : použitá množina údajov
  • metóda : Vzorec na výpočet korelácie. Štandardne sa počítajú po pároch a Pearson
  • nbreaks : Vráti kategorický rozsah pre vyfarbenie koeficientov. V predvolenom nastavení nie je prerušenie a farebný prechod je súvislý
  • číslice : Zaokrúhlite korelačný koeficient. Predvolene je nastavené na 2
  • nízke : Ovláda nižšiu úroveň zafarbenia
  • stredná : Ovláda strednú úroveň zafarbenia
  • vysoké : Ovláda vysokú úroveň zafarbenia
  • geom : Ovláda tvar geometrického argumentu. Predvolene „dlaždica“
  • štítok : Boolovská hodnota. Zobraziť alebo nezobraziť štítok. Štandardne je nastavená hodnota `FALSE`

Základná tepelná mapa

Najzákladnejším grafom balíka je tepelná mapa. Legenda grafu zobrazuje farbu gradientu od - 1 do 1, pričom horúca farba naznačuje silnú pozitívnu koreláciu a studená farba, negatívna korelácia.

library(GGally)ggcorr(data)

Vysvetlenie kódu

  • ggcorr (data): Je potrebný iba jeden argument, ktorým je názov dátového rámca. Premenné na úrovni faktora nie sú do grafu zahrnuté.

Výkon:

Pridajte kontrolu do tepelnej mapy

Do grafu môžeme pridať ďalšie ovládacie prvky.

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

Vysvetlenie kódu

  • nbreaks = 6: prelomte legendu so 6 radmi.
  • low = "steelblue": Použite svetlejšie farby na negatívnu koreláciu
  • mid = "white": Na koreláciu stredných rozsahov použite biele farby
  • high = "darkred": pre pozitívnu koreláciu použite tmavé farby
  • geom = "circle": Použite kruh ako tvar okien v tepelnej mape. Veľkosť kruhu je úmerná absolútnej hodnote korelácie.

Výkon:

Pridajte štítok k tepelnej mape

GGally nám umožňuje pridať štítok do okien.

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

Vysvetlenie kódu

  • label = TRUE: Sčítajte hodnoty korelačných koeficientov vo vnútri tepelnej mapy.
  • color = "grey50": Vyberte farbu, tj. šedú
  • label_size = 3: Nastaviť veľkosť štítku na 3

Výkon:

gpair

Na záver predstavíme ďalšiu funkciu z knižnice GGaly. Ggpair. Produkuje graf v maticovom formáte. V jednom grafe môžeme zobraziť tri druhy výpočtu. Matica je dimenzia, ktorá sa rovná počtu pozorovaní. Horná / dolná časť zobrazuje okná a uhlopriečku. Môžeme kontrolovať, aké informácie chceme zobraziť v každej časti matice. Vzorec pre ggpair je:

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

Argumenty :

  • df : použitá množina údajov
  • stĺpce : výberom stĺpcov nakreslite graf
  • názov : Zahrňte názov
  • horná : Ovládajte políčka nad uhlopriečkou grafu. Pre návrat je potrebné dodať typ výpočtu alebo grafu. Ak spojité = "cor", požiadame R, aby vypočítal koreláciu. Upozorňujeme, že argumentom musí byť zoznam. Je možné použiť ďalšie argumenty, ďalšie informácie nájdete na [vignette] („http://ggobi.github.io/ggally/#custom_functions“).
  • Dolné : Ovládajte políčka pod uhlopriečkou.
  • Mapovanie : Označuje estetiku grafu. Napríklad môžeme vypočítať graf pre rôzne skupiny.

Dvojrozmerná analýza s ggpair so zoskupením

Nasledujúci graf zobrazuje tri informácie:

  • Korelačná matica medzi premennými log_totexp, log_income, age a wtrans zoskupená podľa toho, či má domácnosť dieťa alebo nie.
  • Vykreslite rozdelenie každej premennej podľa skupiny
  • Zobrazte bodový graf s trendom podľa skupiny
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))

Vysvetlenie kódu

  • columns = c ("log_totexp", "log_income", "age", "wtrans"): Vyberte premenné, ktoré sa majú zobraziť v grafe
  • title = "Bivariantná analýza príjmových výdavkov britskej domácnosti": Pridajte nadpis
  • upper = list (): Ovláda hornú časť grafu. Tj nad uhlopriečkou
  • Continuous = wrap ("cor", size = 3)): Vypočítajte korelačný koeficient. Argument spojitý vo vnútri funkcie wrap () zabalíme, aby sme ovládali estetiku grafu (tj. Veľkosť = 3) -lower = list (): Ovládame spodnú časť grafu. Tj Pod uhlopriečkou.
  • súvislé = zalomenie ("hladké", alfa = 0,3, veľkosť = 0,1): Pridajte bodový graf s lineárnym trendom. Zbalíme argument spojitý vo vnútri funkcie wrap () na kontrolu estetiky grafu (tj. Veľkosť = 0,1, alfa = 0,3)
  • mapping = aes (color = children_fac): Chceme, aby každá časť grafu bola stohovaná pomocou premennej children_fac, čo je kategorická premenná, ktorá má hodnotu 1, ak domácnosť nemá deti, a 2 inak

Výkon:

Bivariantná analýza s ggpair s čiastočným zoskupením

Graf nižšie je trochu odlišný. Zmeníme pozíciu mapovania vo vnútri horného argumentu.

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

Vysvetlenie kódu

  • Presný rovnaký kód ako v predchádzajúcom príklade okrem:
  • mapping = aes (color = children_fac): Presunúť zoznam do hornej časti = list (). Chceme iba výpočet zoskupený do skupín v hornej časti grafu.

Výkon:

Zhrnutie

Funkciu môžeme zhrnúť v nasledujúcej tabuľke:

knižnica

Cieľ

metóda

kód

Základňa

dvojrozmerná korelácia

Pearson

cor(dfx2, method = "pearson")

Základňa

dvojrozmerná korelácia

Spearman

cor(dfx2, method = "spearman")

Základňa

Viacrozmerná korelácia

Pearson

cor(df, method = "pearson")

Základňa

Viacrozmerná korelácia

Spearman

cor(df, method = "spearman")

Hmisc

Hodnota P.

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

Ggally

tepelná mapa

ggcorr(df)

Viacrozmerné grafy

cf code below

Zaujímavé články...