Korelācija R: Pīrsons & Spīrmanis ar matricas piemēru

Divvirzienu sakarība apraksta sakarību vai korelāciju starp diviem mainīgajiem lielumiem un. Šajā apmācībā mēs apspriežam korelācijas jēdzienu un parādām, kā to var izmantot, lai izmērītu attiecības starp jebkuriem diviem mainīgajiem.

Ir divas galvenās metodes, lai aprēķinātu korelāciju starp diviem mainīgajiem.

  • Pīrsons: Parametriskā korelācija
  • Spīrmens: Neparametriska korelācija

Šajā apmācībā jūs uzzināsiet

  • Pīrsona korelācija
  • Spīrmena ranga korelācija
  • Korelācijas matrica
  • Vizualizēt korelācijas matricu

Pīrsona korelācija

Pīrsona korelācijas metodi parasti izmanto kā primāro pārbaudi divu mainīgo saistībai.

Korelācijas koeficients , ir pasākums stiprumu lineāras attiecības starp diviem mainīgajiem un. To aprēķina šādi:

ar

  • , ti, standarta novirze
  • , ti, standarta novirze

Korelācija svārstās no -1 līdz 1.

  • Vērtība, kas ir tuvu vai vienāda ar 0, nozīmē nelielu vai nav lineāra sakarība starp un.
  • Turpretī, jo tuvāk ir 1 vai -1, jo spēcīgāka ir lineārā attiecība.

Mēs varam aprēķināt t-testu šādi un pārbaudīt izplatīšanas tabulu ar brīvības pakāpi, kas vienāda ar:

Spīrmena ranga korelācija

Ranga korelācija sakārto novērojumus pēc ranga un aprēķina rangu līdzības līmeni. Rangu korelācijas priekšrocība ir tā, ka tā ir stingra attiecībā pret nepietiekamiem rādītājiem, un tā nav saistīta ar datu izplatīšanu. Ņemiet vērā, ka kārtas mainīgajam ir piemērota korelācija ar rangu.

Spīrmana rangu korelācija,, vienmēr ir starp -1 un 1 ar vērtību, kas ir tuvu ekstremitātei, norāda uz ciešām attiecībām. To aprēķina šādi:

ar norādītajiem kovariātiem starp rangu un. Saucējs aprēķina standartnovirzes.

R, mēs varam izmantot funkciju cor (). Tam nepieciešami trīs argumenti, un metode.

cor(x, y, method)

Argumenti :

  • x: pirmais vektors
  • y: otrais vektors
  • metode: formula, ko izmanto korelācijas aprēķināšanai. Trīs virkņu vērtības:
    • "pīrsons"
    • "kendall"
    • "šķēps cilvēks"

Neobligātu argumentu var pievienot, ja vektoros ir trūkstoša vērtība: use = "complete.obs"

Mēs izmantosim BudgetUK datu kopu. Šajā datu kopā ir ziņots par britu mājsaimniecību budžeta sadalījumu laika posmā no 1980. līdz 1982. gadam. Starp tiem ir 1519 novērojumi ar desmit pazīmēm:

  • wfood: dalīties ar pārtikas izdevumiem
  • wfuel: dalīties ar degvielas tēriņiem
  • wcloth: budžeta daļa apģērbu izdevumiem
  • Walc: dalīties ar alkohola tēriņiem
  • wtrans: dalieties transporta izdevumos
  • brālis: daļa citu preču tērē
  • totexp: kopējie mājsaimniecības izdevumi mārciņās
  • ienākumi, kopējie neto mājsaimniecības ienākumi
  • vecums: mājsaimniecības vecums
  • bērni: bērnu skaits
Piemērs
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)

Kods Paskaidrojums

  • Vispirms mēs importējam datus un apskatāmies ar funkciju glimpse () no dplyr bibliotēkas.
  • Trīs punkti ir virs 500 000, tāpēc mēs nolēmām tos izslēgt.
  • Naudas mainīgo konvertēšana žurnālā ir izplatīta prakse. Tas palīdz mazināt izņēmumu ietekmi un samazina šķībumu datu kopā.

Izeja:

## 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ēs varam aprēķināt korelācijas koeficientu starp ienākumu un pārtikas produktu mainīgajiem lielumiem ar "pīrsona" un "spearmana" metodēm.

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

izeja:

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

Izeja:

## [1] -0.2501252 

Korelācijas matrica

Divvirzienu korelācija ir labs sākums, taču, izmantojot daudzfaktoru analīzi, mēs varam iegūt plašāku ainu. Korelācija ar daudziem mainīgajiem ir attēlota korelācijas matricas iekšpusē . Korelācijas matrica ir matrica, kas attēlo visu mainīgo pāra korelāciju.

Funkcija cor () atgriež korelācijas matricu. Vienīgā atšķirība ar divvirzienu korelāciju ir tāda, ka mums nav jānorāda, kuri mainīgie. Pēc noklusējuma R aprēķina visu mainīgo korelāciju.

Ņemiet vērā, ka faktora mainīgajam korelāciju nevar aprēķināt. Pirms nododam datu rāmi cor () iekšpusē, mums jāpārliecinās, ka tiek nomesta kategoriskā funkcija.

Korelācijas matrica ir simetriska, kas nozīmē, ka vērtībām virs diagonāles ir tādas pašas vērtības kā zemāk esošajām. Vizuālāk ir parādīt pusi matricas.

Mēs izslēdzam children_fac, jo tas ir faktora līmeņa mainīgais. cor neveic korelāciju ar kategorisko mainīgo.

# 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

Kods Paskaidrojums

  • cor (dati): parāda korelācijas matricu
  • apaļa (dati, 2): korelācijas matricu noapaļo ar divām zīmēm aiz komata
  • as.dist (): parāda tikai otro pusi

Izeja:

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

Nozīmības līmenis

Nozīmības līmenis ir noderīgs dažās situācijās, kad mēs izmantojam pīrsona vai spearmana metodi. Funkcija rcorr () no Hmisc bibliotēkas mums aprēķina p vērtību. Mēs varam lejupielādēt bibliotēku no conda un nokopēt kodu, lai to ielīmētu terminālā:

conda install -c r r-hmisc 

Rcorr () prasa, lai datu rāmis tiktu saglabāts kā matrica. Iepriekš mēs varam pārveidot savus datus matricā, lai aprēķinātu korelācijas matricu ar p vērtību.

library("Hmisc")data_rcorr <-as.matrix(data[, 1: 9])mat_2 <-rcorr(data_rcorr)# mat_2 <-rcorr(as.matrix(data)) returns the same output

Saraksta objekts mat_2 satur trīs elementus:

  • r: korelācijas matricas iznākums
  • n: novērojumu skaits
  • P: p vērtība

Mūs interesē trešais elements - p vērtība. Parasti korelācijas matricu parāda ar p vērtību, nevis korelācijas koeficientu.

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

Kods Paskaidrojums

  • mat_2 [["P"]]: p-vērtības tiek saglabātas elementā ar nosaukumu P
  • apaļa (mat_2 [["P"]], 3): noapaļojiet elementus ar trim cipariem

Izeja:

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

Vizualizēt korelācijas matricu

Siltuma karte ir vēl viens veids, kā parādīt korelācijas matricu. GGally bibliotēka ir ggplot2 paplašinājums. Pašlaik tas nav pieejams konda bibliotēkā. Mēs varam instalēt tieši konsolē.

install.packages("GGally")

Bibliotēka ietver dažādas funkcijas, lai parādītu kopsavilkuma statistiku, piemēram, visu matricas mainīgo korelāciju un sadalījumu.

Funkcijai ggcorr () ir daudz argumentu. Mēs iepazīstināsim tikai ar argumentiem, kurus izmantosim apmācībā:

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 : Izmantotā datu kopa
  • metode : formula, lai aprēķinātu korelāciju. Pēc noklusējuma tiek aprēķināts pāri un Pīrsons
  • nbreaks : atgriež kategorisko diapazonu koeficientu krāsojumam. Pēc noklusējuma nav pārtraukuma, un krāsu gradients ir nepārtraukts
  • cipari : noapaļo korelācijas koeficientu. Pēc noklusējuma iestatiet uz 2
  • zems : kontrolējiet zemāko krāsas līmeni
  • mid : kontrolējiet krāsas vidējo līmeni
  • augsts : kontrolējiet augstu krāsas līmeni
  • geom : kontrolējiet ģeometriskā argumenta formu. Pēc noklusējuma “dakstiņš”
  • etiķete : Būla vērtība. Parādīt etiķeti vai ne. Pēc noklusējuma iestatiet vērtību “FALSE”

Pamata siltuma karte

Visvienkāršākais paketes sižets ir karstuma karte. Grafika leģendā ir redzama gradienta krāsa no - 1 līdz 1, ar karstu krāsu norāda spēcīgu pozitīvu korelāciju un aukstu krāsu, negatīvu korelāciju.

library(GGally)ggcorr(data)

Kods Paskaidrojums

  • ggcorr (dati): Nepieciešams tikai viens arguments, kas ir datu ietvara nosaukums. Faktora līmeņa mainīgie grafikā nav iekļauti.

Izeja:

Pievienojiet kontroli karstuma kartei

Diagrammā mēs varam pievienot vairāk vadīklu.

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

Kods Paskaidrojums

  • nbreiki = 6: salauziet leģendu ar 6 pakāpēm.
  • low = "steelblue": negatīvai korelācijai izmantojiet gaišākas krāsas
  • mid = "white": vidējo diapazonu korelācijai izmantojiet baltas krāsas
  • high = "darkred": pozitīvai korelācijai izmantojiet tumšas krāsas
  • geom = "aplis": Izmantojiet loku kā logu formu siltuma kartē. Apļa lielums ir proporcionāls korelācijas absolūtajai vērtībai.

Izeja:

Pievienojiet etiķeti siltuma kartei

GGally ļauj mums logu iekšpusē pievienot etiķeti.

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

Kods Paskaidrojums

  • label = TRUE: Siltuma kartē pievienojiet korelācijas koeficientu vērtības.
  • color = "grey50": izvēlieties krāsu, ti, pelēku
  • label_size = 3: iestatiet etiķetes lielumu vienāds ar 3

Izeja:

ggpairs

Visbeidzot, mēs ieviešam vēl vienu funkciju no GGaly bibliotēkas. Ggpair. Tas rada grafiku matricas formātā. Vienā grafikā mēs varam parādīt trīs veidu aprēķinus. Matrica ir dimensija, ar vienādu novērojumu skaitu. Augšējā / apakšējā daļā tiek parādīti logi un pa diagonāli. Mēs varam kontrolēt, kādu informāciju mēs vēlamies parādīt katrā matricas daļā. Ggpair formula ir:

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

Argumenti :

  • df : Izmantotā datu kopa
  • kolonnas : atlasiet kolonnas, lai uzzīmētu diagrammu
  • nosaukums : Iekļaujiet nosaukumu
  • augšējais : kontrolējiet lodziņus virs zemes gabala diagonāles. Lai atgrieztos, ir jāiesniedz aprēķinu veids vai diagramma. Ja nepārtraukts = "cor", mēs lūdzam R aprēķināt korelāciju. Ņemiet vērā, ka argumentam jābūt sarakstam. Var izmantot citus argumentus, lai iegūtu papildinformāciju, skatiet [vinjete] ("http://ggobi.github.io/ggally/#custom_functions").
  • Zemāk : kontrolējiet lodziņus zem diagonāles.
  • Kartēšana : norāda grafika estētiku. Piemēram, mēs varam aprēķināt diagrammu dažādām grupām.

Divvariantu analīze ar ggpair ar grupēšanu

Nākamajā diagrammā ir parādīta trīs informācija:

  • Korelācijas matrica starp log_totexp, log_income, age un wtrans mainīgo, kas sagrupēta pēc tā, vai mājsaimniecībā ir bērns.
  • Uzzīmējiet katra mainīgā sadalījumu pa grupām
  • Parādiet izkliedes diagrammu ar tendenci pa grupām
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))

Kods Paskaidrojums

  • kolonnas = c ("log_totexp", "log_income", "vecums", "wtrans"): izvēlieties mainīgos, kas jāparāda diagrammā
  • title = "Britu mājsaimniecības ieņēmumu izdevumu divpusēja analīze": pievienojiet virsrakstu
  • augšējais = saraksts (): kontrolējiet diagrammas augšējo daļu. Ti virs diagonāles
  • nepārtraukts = ietīšana ("cor", izmērs = 3)): aprēķiniet korelācijas koeficientu. Mēs iesaiņojam argumentu nepārtraukti wrap () funkcijas iekšpusē, lai kontrolētu grafika estētiku (ti, lielums = 3) - zemāks = saraksts (): kontrolējiet diagrammas apakšējo daļu. Ti zem diagonāles.
  • nepārtraukts = ietīšana ("gluds", alfa = 0,3, izmērs = 0,1): pievienojiet izkliedes diagrammu ar lineāru tendenci. Mēs iesaiņojam argumentu nepārtraukti wrap () funkcijas iekšpusē, lai kontrolētu grafika estētiku (ti, lielums = 0,1, alfa = 0,3)
  • kartēšana = aes (krāsa = bērni_fac): mēs vēlamies, lai katru grafika daļu sakrautu mainīgais children_fac, kas ir kategorisks mainīgais, ņemot vērtību 1, ja mājsaimniecībā nav bērnu, un citādi - 2

Izeja:

Divvariantu analīze ar ggpair ar daļēju grupēšanu

Zemāk redzamais grafiks ir nedaudz atšķirīgs. Mēs mainām kartēšanas pozīciju augšējā argumenta iekšpusē.

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

Kods Paskaidrojums

  • Precīzs kods ar iepriekšējo piemēru, izņemot:
  • kartēšana = aes (krāsa = bērni_fac): pārvietojiet sarakstu augšējā = list (). Mēs vēlamies, lai aprēķins tiktu sakrauts pa grupām diagrammas augšdaļā.

Izeja:

Kopsavilkums

Funkciju varam apkopot zemāk esošajā tabulā:

bibliotēka

Mērķis

metodi

kods

Bāze

divvirzienu korelācija

Pīrsons

cor(dfx2, method = "pearson")

Bāze

divvirzienu korelācija

Spearman

cor(dfx2, method = "spearman")

Bāze

Daudzfaktoru korelācija

pīrsons

cor(df, method = "pearson")

Bāze

Daudzfaktoru korelācija

Spearman

cor(df, method = "spearman")

Hmisc

P vērtība

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

Ggally

siltuma karte

ggcorr(df)

Daudzveidīgie gabali

cf code below

Interesanti raksti...