Korrelatsioon R: Pearsoni ja Spearmani korrelatsioonimaatriksis

Kahe muutujaga korrelatsioon R-is

Kahe muutujaga seos kirjeldab seost või korrelatsiooni kahe muutuja vahel R-s. Selles õpetuses käsitleme korrelatsiooni mõistet ja näitame, kuidas seda saab kasutada R-i mis tahes kahe muutuja vahelise seose mõõtmiseks.

Korrelatsioon R-programmeerimises

Kahe muutuja vahelise korrelatsiooni arvutamiseks R-programmeerimises on kaks peamist meetodit:

  • Pearson: Parameetriline korrelatsioon
  • Spearman: mitteparameetriline korrelatsioon

Pearsoni korrelatsioonimaatriks kirjas R

Pearsoni korrelatsioonimeetodit kasutatakse tavaliselt kahe muutuja vahelise seose esmase kontrollina.

. korrelatsioonikordaja, , on tugevuse mõõt sirgjooneline seos kahe muutuja ja . See arvutatakse järgmiselt:

Pearsoni korrelatsioonimaatriks kirjas R

koos

  • Pearsoni korrelatsioonimaatriks kirjas R, st standardhälve
  • Pearsoni korrelatsioonimaatriks kirjas R, st standardhälve

Korrelatsioon jääb vahemikku -1 kuni 1.

  • Väärtus, mis on nullilähedane või sellega võrdne, tähendab, et ja vahel on lineaarne seos väike või puudub üldse.
  • Seevastu mida lähemal on 1 või -1, seda tugevam on lineaarne seos.

Saame arvutada t-testi järgmiselt ja kontrollida jaotustabelit vabadusastmega, mis on võrdne :

Pearsoni korrelatsioonimaatriks kirjas R

Spearmani astme korrelatsioon R

Auaste korrelatsioon sorteerib vaatlused auastme järgi ja arvutab järgu sarnasuse taseme. Astekorrelatsiooni eeliseks on see, et see on robustne kõrvalekallete suhtes ja see ei ole seotud andmete jaotusega. Pange tähele, et järjestusmuutuja jaoks sobib auaste korrelatsioon.

Spearmani astme korrelatsioon on alati vahemikus –1 kuni 1, äärmuse lähedane väärtus näitab tugevat seost. See arvutatakse järgmiselt:

Spearmani astme korrelatsioon R

koos märgitud kovariatsioonid vahel auaste ja . Nimetaja arvutab standardhälbed.

R-is saame kasutada funktsiooni cor(). Selleks on vaja kolme argumenti ja meetodit.

cor(x, y, method)

Argumendid:

  • x: Esimene vektor
  • y: Teine vektor
  • meetod: korrelatsiooni arvutamiseks kasutatav valem. Kolm stringi väärtust:
    • "Pearson"
    • "kendall"
    • "odamees"

Valikulise argumendi saab lisada, kui vektorid sisaldavad puuduvat väärtust: use = “complete.obs”

Kasutame BudgetUK andmestikku. See andmestik kajastab Briti majapidamiste eelarvejaotust aastatel 1980–1982. Seal on 1519 vaatlust kümne tunnusega, nende hulgas:

  • wfood: jaga toitu jaga kuluta
  • wkütus: jagage kütusekulu
  • wcriie: eelarveosa riiete kulutamiseks
  • walc: jaga alkoholikulu
  • wtrans: jaga transpordikulusid
  • ema: muude kaupade osakaal
  • totexp: leibkonna kogukulutused naelades
  • tulu: leibkonna kogu netosissetulek
  • vanus: leibkonna vanus
  • lapsed: laste arv

Näide

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)

Koodi selgitus

  • Esmalt impordime andmed ja vaatame dplyr teegi funktsiooni glimpse() abil.
  • Kolm punkti on üle 500 XNUMX, seega otsustasime need välja jätta.
  • Tavapärane on rahalise muutuja teisendamine logisse. See aitab vähendada kõrvalekallete mõju ja vähendab andmestiku viltu.

Väljund:

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

Korrelatsioonikordaja sissetulekute ja wfood muutujate vahel saame arvutada “pearsoni” ja “spearmani” meetoditega.

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

Väljund:

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

Väljund:

## [1] -0.2501252

Korrelatsioonimaatriks R

Kahe muutujaga korrelatsioon on hea algus, kuid laiema pildi saame mitmemõõtmelise analüüsiga. Korrelatsioon paljude muutujatega on kujutatud a sees korrelatsioonimaatriks. Korrelatsioonimaatriks on maatriks, mis esindab kõigi muutujate paarikorrelatsiooni.

Funktsioon cor() tagastab korrelatsioonimaatriksi. Ainus erinevus kahemõõtmelise korrelatsiooniga on see, et me ei pea määrama, milliseid muutujaid. Vaikimisi arvutab R kõigi muutujate vahelise korrelatsiooni.

Pange tähele, et tegurimuutuja puhul ei saa korrelatsiooni arvutada. Peame veenduma, et loobume kategoorilisest funktsioonist, enne kui edastame andmeraami sees cor().

Korrelatsioonimaatriks on sümmeetriline, mis tähendab, et diagonaalist kõrgematel väärtustel on samad väärtused, mis allpool. Visuaalsem on näidata poolt maatriksist.

Välistame children_fac, kuna see on teguritaseme muutuja. cor ei teosta korrelatsiooni kategoorilise muutujaga.

# 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

Koodi selgitus

  • cor (andmed): kuvab korrelatsioonimaatriksi
  • ümmargune (andmed, 2): ümardage korrelatsioonimaatriks kahe kümnendkohaga
  • as.dist(): Näitab ainult teist poolaega

Väljund:

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

Olulisuse tase

Olulisuse tase on kasulik mõnes olukorras, kui kasutame pearsoni või spearmani meetodit. Funktsioon rcorr() teegist Hmisc arvutab meie jaoks välja p-väärtuse. Saame raamatukogu alla laadida aadressilt konda ja kopeerige kood, et see terminali kleepida:

conda install -c r r-hmisc

Rcorr() nõuab andmeraami salvestamist maatriksina. Enne p-väärtusega korrelatsioonimaatriksi arvutamist saame oma andmed teisendada maatriksiks.

library("Hmisc")
data_rcorr <-as.matrix(data[, 1: 9])

mat_2 <-rcorr(data_rcorr)
# mat_2 <-rcorr(as.matrix(data)) returns the same output

Loendiobjekt mat_2 sisaldab kolme elementi:

  • r: korrelatsioonimaatriksi väljund
  • n: vaatluste arv
  • P: p-väärtus

Meid huvitab kolmas element, p-väärtus. Tavaliselt näidatakse korrelatsioonimaatriksit korrelatsioonikordaja asemel p-väärtusega.

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

Koodi selgitus

  • mat_2[["P"]]: p-väärtused salvestatakse elemendis nimega P
  • round(mat_2[["P"]], 3): elemendid ümardatakse kolme numbriga

Väljund:

           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

Korrelatsioonimaatriksi visualiseerimine R-is

Soojuskaart on veel üks viis korrelatsioonimaatriksi kuvamiseks. GGally teek on ggplot2 laiendus. Praegu pole see Conda raamatukogus saadaval. Saame installida otse konsooli.

install.packages("GGally")

Korrelatsioonimaatriksi visualiseerimine

Teek sisaldab erinevaid funktsioone kokkuvõtliku statistika kuvamiseks, näiteks kõigi muutujate korrelatsiooni ja jaotust. maatriks.

Funktsioonil ggcorr() on palju argumente. Tutvustame ainult neid argumente, mida õpetuses kasutame:

Funktsioon ggcorr

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

Argumendid:

  • df: kasutatud andmestik
  • meetod: korrelatsiooni arvutamise valem. Vaikimisi arvutatakse paaris ja Pearson
  • nbreaks: tagastab koefitsientide värvimise kategoorilise vahemiku. Vaikimisi katkestusi pole ja värvigradient on pidev
  • numbrit: korrelatsioonikordaja ümardamine. Vaikimisi määrake väärtuseks 2
  • madal: kontrollige värvi alumist taset
  • keskel: kontrollige värvuse keskmist taset
  • suur: kontrollige värvi kõrget taset
  • geom: kontrollige geomeetrilise argumendi kuju. Vaikimisi "plaat"
  • etikett: Boole'i ​​väärtus. Näita või mitte. Vaikimisi määrake olekuks FALSE

Põhiline soojuskaart

Paketi kõige elementaarsem süžee on soojuskaart. Graafiku legend näitab gradiendi värvi vahemikus – 1 kuni 1, kusjuures kuum värv näitab tugevat positiivset korrelatsiooni ja külm värv negatiivset korrelatsiooni.

library(GGally)
ggcorr(data)

Koodi selgitus

  • ggcorr(andmed): vaja on ainult ühte argumenti, mis on andmeraami nimi. Teguritaseme muutujaid graafikusse ei kaasata.

Väljund:

Põhiline soojuskaart

Juhtimise lisamine soojuskaardile

Saame graafikule lisada rohkem juhtelemente:

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

Koodi selgitus

  • nbreaks=6: murda legend 6 auastmega.
  • madal = "terassinine": Kasutage negatiivse korrelatsiooni jaoks heledamaid värve
  • keskmine = "valge": kasutage keskmiste vahemike korrelatsiooniks valgeid värve
  • kõrge = "tumepunane": Positiivse korrelatsiooni jaoks kasutage tumedaid värve
  • geom = "ring": Kasutage soojuskaardil akende kujuna ringi. Ringi suurus on võrdeline korrelatsiooni absoluutväärtusega.

Väljund:

Juhtimise lisamine soojuskaardile

Sildi lisamine soojuskaardile

GGally võimaldab meil lisada akende sisse sildi:

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

Koodi selgitus

  • silt = TRUE: lisage soojuskaardi sees olevate korrelatsioonikordajate väärtused.
  • värv = "grey50": Valige värv, st hall
  • sildi_suurus = 3: määrake sildi suuruseks 3

Väljund:

Sildi lisamine soojuskaardile

Funktsioon ggpairs

Lõpuks tutvustame veel ühte funktsiooni GGaly teegist. Ggpair. See loob maatriksvormingus graafiku. Ühes graafikus saame kuvada kolme tüüpi arvutusi. Maatriks on mõõde, mis võrdub vaatluste arvuga. Ülemine/alumine osa kuvab aknad ja diagonaalis. Saame kontrollida, millist teavet tahame maatriksi igas osas näidata. ggpairi valem on järgmine:

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

Argumendid:

  • df: kasutatud andmestik
  • veerud: valige graafiku joonistamiseks veerud
  • pealkiri: lisage pealkiri
  • ülemine: juhtige joonise diagonaali kohal olevaid kaste. Taastamiseks tuleb esitada arvutuste tüüp või graafik. Kui pidev = "cor", palume R-l korrelatsiooni arvutada. Pange tähele, et argument peab olema loend. Kasutada saab ka muid argumente, lisateabe saamiseks vaadake [vinjetti](“http://ggobi.github.io/ggally/#custom_functions”).
  • Langetage: juhtige diagonaali all olevaid kaste.
  • Kaardistamine: näitab graafiku esteetilisust. Näiteks saame arvutada graafiku erinevate rühmade jaoks.

Kahe muutujaga analüüs ggpairiga koos rühmitamisega

Järgmisel graafikul on kolm teavet:

  • Korrelatsioonimaatriks log_totexp, log_income, vanuse ja wtrans muutuja vahel, mis on rühmitatud selle järgi, kas leibkonnas on laps või mitte.
  • Joonistage iga muutuja jaotus rühmade kaupa
  • Kuvage hajuvusdiagramm koos trendiga rühmade kaupa
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))

Koodi selgitus

  • veerud = c ("log_totexp", "log_income", "vanus", "wtrans"): valige graafikul kuvatavad muutujad
  • pealkiri = "Briti leibkonna tulukulude kahemõõtmeline analüüs": lisage pealkiri
  • ülemine = list(): juhtige graafiku ülemist osa. St diagonaali kohal
  • pidev = pakkimine ("kork", suurus = 3)): Arvutage korrelatsioonikordaja. Me murrame argumendi pidevalt funktsiooni wrap() sees, et kontrollida graafiku esteetikat (st suurus = 3) -lower = list(): Kontrollige graafiku alumist osa. St allpool diagonaali.
  • pidev = mähis ("sile", alfa = 0.3, suurus = 0.1): lisage lineaarse trendiga hajuvusdiagramm. Me murrame argumendi pidevalt funktsiooni wrap() sees, et kontrollida graafiku esteetikat (st suurus = 0.1, alfa = 0.3)
  • kaardistamine = aes(värv = laste_fac): soovime, et graafiku kõik osad oleksid virnastatud muutujaga children_fac, mis on kategooriline muutuja, mille väärtus on 1, kui leibkonnal ei ole lapsi ja 2 muul juhul.

Väljund:

Kahe muutujaga analüüs ggpairiga koos rühmitusega

Kahe muutuja analüüs ggpairiga osalise rühmitusega

Allolev graafik on veidi erinev. Muudame kaardistuse asukohta ülemise argumendi sees.

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

Koodi selgitus

  • Täpselt sama kood nagu eelmises näites, välja arvatud:
  • mapping = aes(color = children_fac): Liigutage loendit ülemises = list(). Soovime, et arvutus oleks virnastatud rühmade kaupa graafiku ülemisse ossa.

Väljund:

Kahe muutujaga analüüs ggpairiga osalise rühmitusega

kokkuvõte

  • Kahe muutujaga seos kirjeldab suhet või korrelatsiooni kahe muutuja vahel R-s.
  • Kahe muutuja vahelise korrelatsiooni arvutamiseks on kaks peamist meetodit R programmeerimine: Pearson & Spearman.
  • Pearsoni korrelatsioonimeetodit kasutatakse tavaliselt kahe muutuja vahelise seose esmase kontrollina.
  • Auaste korrelatsioon sorteerib vaatlused auastme järgi ja arvutab järgu sarnasuse taseme.
  • Spearmani astme korrelatsioon on alati vahemikus –1 kuni 1, äärmuse lähedane väärtus näitab tugevat seost.
  • Korrelatsioonimaatriks on maatriks, mis esindab kõigi muutujate paarikorrelatsiooni.
  • Olulisuse tase on kasulik mõnes olukorras, kui kasutame pearsoni või spearmani meetodit.

Allolevas tabelis saame kokku võtta kõik R-i korrelatsioonifunktsioonid:

Raamatukogu Eesmärk Meetod kood
alus kaheosaline korrelatsioon Pearson
cor(dfx2, method = "pearson")
alus kaheosaline korrelatsioon Spearman
cor(dfx2, method = "spearman")
alus Mitmemõõtmeline korrelatsioon Pearson
cor(df, method = "pearson")
alus Mitmemõõtmeline korrelatsioon Spearman
cor(df, method = "spearman")
Hmisc P väärtus
rcorr(as.matrix(data[,1:9]))[["P"]]
Ggally soojuskaart
ggcorr(df)
Mitme muutujaga graafikud
cf code below