Korrelaatio R:ssä: Pearson & Spearman -korrelaatiomatriisi

Kaksimuuttujakorrelaatio R:ssä

Kaksimuuttujasuhde kuvaa R:n kahden muuttujan välistä suhdetta tai korrelaatiota. Tässä opetusohjelmassa käsittelemme korrelaation käsitettä ja näytämme, kuinka sitä voidaan käyttää mittaamaan minkä tahansa kahden muuttujan välistä suhdetta R:ssä.

Korrelaatio R-ohjelmoinnissa

R-ohjelmoinnin kahden muuttujan välisen korrelaation laskemiseksi on kaksi ensisijaista menetelmää:

  • Pearson: Parametrinen korrelaatio
  • Spearman: Ei-parametrinen korrelaatio

Pearson-korrelaatiomatriisi kirjassa R

Pearson-korrelaatiomenetelmää käytetään yleensä ensisijaisena tarkistuksena kahden muuttujan väliselle suhteelle.

- korrelaatiokerroin, , on vahvuuden mitta lineaarinen kahden muuttujan välinen suhde ja . Se lasketaan seuraavasti:

Pearson-korrelaatiomatriisi kirjassa R

with

  • Pearson-korrelaatiomatriisi kirjassa R, eli keskihajonnan
  • Pearson-korrelaatiomatriisi kirjassa R, eli keskihajonnan

Korrelaatio vaihtelee välillä -1 ja 1.

  • Arvo, joka on lähellä tai yhtä suuri kuin 0, tarkoittaa vain vähän tai ei ollenkaan lineaarista suhdetta ja välillä.
  • Sitä vastoin mitä lähempänä arvoa 1 tai -1, sitä vahvempi on lineaarinen suhde.

Voimme laskea t-testin seuraavasti ja tarkistaa jakaumataulukon vapausasteella, joka on yhtä suuri:

Pearson-korrelaatiomatriisi kirjassa R

Spearman Rankkorrelaatio R:ssä

Sijoituskorrelaatio lajittelee havainnot arvon mukaan ja laskee arvon samankaltaisuuden tason. Rankkorrelaatiolla on se etu, että se on robustinen poikkeaviin arvoihin nähden, eikä se liity tietojen jakautumiseen. Huomaa, että järjestysmuuttujalle sopii rankkorrelaatio.

Spearmanin rankkorrelaatio, , on aina välillä -1 ja 1, ja lähellä ääripäätä oleva arvo osoittaa vahvan suhteen. Se lasketaan seuraavasti:

Spearman Rankkorrelaatio R:ssä

kanssa totesi kovarianssit välillä arvo ja . Nimittäjä laskee keskihajonnan.

R:ssä voimme käyttää cor()-funktiota. Se vaatii kolme argumenttia, ja menetelmän.

cor(x, y, method)

argumentit:

  • x: Ensimmäinen vektori
  • y: Toinen vektori
  • menetelmä: Korrelaation laskemiseen käytetty kaava. Kolme merkkijonoarvoa:
    • "Pearson"
    • "kendall"
    • "keihäsmies"

Valinnainen argumentti voidaan lisätä, jos vektoreista puuttuu arvo: use = “complete.obs”

Käytämme BudgetUK-tietoaineistoa. Tämä tietojoukko raportoi brittiläisten kotitalouksien budjetin jakautumisesta vuosina 1980-1982. Havaintoja on 1519, joissa on kymmenen ominaisuutta, muun muassa:

  • wfood: jaa ruokaa jaa kulutusta
  • wpolttoaine: jaa polttoainekulutus
  • wc-kangas: budjettiosuus vaatteisiin
  • Walc: jaa alkoholikulutus
  • wtrans: jaa kuljetuskulut
  • vaimo: osuus muista tavaroista
  • totexp: kotitalouden kokonaiskulut punnissa
  • tulo: kotitalouden nettotulot yhteensä
  • ikä: kotitalouden ikä
  • lapset: lasten määrä

esimerkki

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)

Koodin selitys

  • Tuomme ensin tiedot ja tarkastelemme glimpse()-funktiota dplyr-kirjastosta.
  • Kolme pistettä on yli 500 XNUMX, joten päätimme jättää ne pois.
  • On yleinen käytäntö muuntaa rahamuuttuja logissa. Se auttaa vähentämään poikkeamien vaikutusta ja vähentämään tietojoukon vinoutta.

lähtö:

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

Voimme laskea korrelaatiokertoimen tulo- ja wfood-muuttujien välillä "pearson" ja "spearman" menetelmillä.

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

lähtö:

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

lähtö:

## [1] -0.2501252

Korrelaatiomatriisi kirjassa R

Kaksimuuttujakorrelaatio on hyvä alku, mutta monimuuttuja-analyysillä saamme laajemman kuvan. Korrelaatio monien muuttujien kanssa on kuvattu sisällä a korrelaatiomatriisi. Korrelaatiomatriisi on matriisi, joka edustaa kaikkien muuttujien parikorrelaatiota.

Cor()-funktio palauttaa korrelaatiomatriisin. Ainoa ero kaksimuuttujakorrelaatioon on, että meidän ei tarvitse määrittää, mitä muuttujia. Oletusarvoisesti R laskee korrelaation kaikkien muuttujien välillä.

Huomaa, että korrelaatiota ei voida laskea tekijämuuttujalle. Meidän on varmistettava, että pudotamme kategorisen ominaisuuden ennen kuin välitämme datakehyksen cor(:n) sisällä.

Korrelaatiomatriisi on symmetrinen, mikä tarkoittaa, että diagonaalin yläpuolella olevilla arvoilla on samat arvot kuin alla. On visuaalisempaa näyttää puolet matriisista.

Jätämme pois children_fac, koska se on tekijätason muuttuja. cor ei suorita korrelaatiota kategoriselle muuttujalle.

# 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

Koodin selitys

  • cor(data): Näytä korrelaatiomatriisi
  • kierros (data, 2): Pyöristä korrelaatiomatriisi kahdella desimaalilla
  • as.dist(): Näyttää vain toisen puoliskon

lähtö:

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

Merkitsevyystaso

Merkitystaso on hyödyllinen joissakin tilanteissa, kun käytämme Pearson- tai Spearman-menetelmää. Funktio rcorr() kirjastosta Hmisc laskee meille p-arvon. Voimme ladata kirjaston osoitteesta Conda ja kopioi koodi liittääksesi sen terminaaliin:

conda install -c r r-hmisc

rcorr() vaatii datakehyksen tallentamisen matriisina. Voimme muuntaa tietomme matriisiksi ennen kuin laskemme korrelaatiomatriisin p-arvon kanssa.

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

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

Listaobjekti mat_2 sisältää kolme elementtiä:

  • r: Korrelaatiomatriisin tulos
  • n: Havainnon määrä
  • P: p-arvo

Olemme kiinnostuneita kolmannesta elementistä, p-arvosta. On yleistä näyttää korrelaatiomatriisi p-arvon kanssa korrelaatiokertoimen sijaan.

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

Koodin selitys

  • mat_2[["P"]]: P-arvot tallennetaan elementtiin nimeltä P
  • pyöreä(matto_2[["P"]], 3): Pyöristä elementit kolmella numerolla

lähtö:

           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

Korrelaatiomatriisin visualisointi R:ssä

Lämpökartta on toinen tapa näyttää korrelaatiomatriisi. GGally-kirjasto on ggplot2:n laajennus. Tällä hetkellä sitä ei ole saatavilla conda-kirjastosta. Voimme asentaa suoraan konsoliin.

install.packages("GGally")

Visualisoiva korrelaatiomatriisi

Kirjasto sisältää erilaisia ​​toimintoja yhteenvetotilastojen näyttämiseksi, kuten kaikkien muuttujien korrelaation ja jakautumisen matriisi.

Funktiolla ggcorr() on paljon argumentteja. Esittelemme vain ne argumentit, joita käytämme opetusohjelmassa:

ggcorr-funktio

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

argumentit:

  • df: Tietojoukko käytetty
  • menetelmä: Kaava korrelaation laskemiseksi. Oletusarvoisesti pari ja Pearson lasketaan
  • nbreaks: Palauttaa kertoimien värityksen kategorisen alueen. Oletusarvoisesti ei taukoa ja värigradientti on jatkuva
  • numeroa: Pyöristä korrelaatiokerroin. Oletusarvona on 2
  • matala: Säädä värityksen alempaa tasoa
  • keski-: Säädä värityksen keskitasoa
  • korkea: Säädä värin korkeaa tasoa
  • geom: Hallitse geometrisen argumentin muotoa. Oletuksena "laatta"
  • etiketti: Boolen arvo. Näytä tarra tai älä. Oletusarvona on FALSE

Perus lämpökartta

Paketin yksinkertaisin juoni on lämpökartta. Kaavion selite näyttää gradientin värin välillä – 1:stä 1:een, kuuma väri osoittaa vahvaa positiivista korrelaatiota ja kylmä väri, negatiivinen korrelaatio.

library(GGally)
ggcorr(data)

Koodin selitys

  • ggcorr(data): Tarvitaan vain yksi argumentti, joka on tietokehyksen nimi. Tekijätason muuttujat eivät sisälly kuvaajaan.

lähtö:

Perus lämpökartta

Ohjauksen lisääminen lämpökarttaan

Voimme lisätä kaavioon lisää säätimiä:

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

Koodin selitys

  • nbreaks=6: murtaa legenda 6 riveillä.
  • matala = "teräksensininen": Käytä vaaleampia värejä negatiiviseen korrelaatioon
  • keski = "valkoinen": Käytä valkoisia värejä keskialueen korrelaatioon
  • korkea = "tumma": Käytä tummia värejä positiiviseen korrelaatioon
  • geom = "ympyrä": Käytä lämpökartan ikkunoiden muotoina ympyrää. Ympyrän koko on verrannollinen korrelaation itseisarvoon.

lähtö:

Ohjauksen lisääminen lämpökarttaan

Tarran lisääminen lämpökarttaan

GGally antaa meille mahdollisuuden lisätä tarran ikkunoiden sisään:

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

Koodin selitys

  • etiketti = TOSI: Lisää lämpökartan sisällä olevien korrelaatiokertoimien arvot.
  • väri = "grey50": Valitse väri, eli harmaa
  • etiketin_koko = 3: Aseta tarran kooksi 3

lähtö:

Tarran lisääminen lämpökarttaan

ggpairs-funktio

Lopuksi esittelemme toisen funktion GGaly-kirjastosta. Ggpair. Se tuottaa kaavion matriisimuodossa. Voimme näyttää kolme erilaista laskentaa yhdessä kaaviossa. Matriisi on ulottuvuus, joka on yhtä suuri kuin havaintojen määrä. Ylä/alaosa näyttää ikkunat ja diagonaalissa. Voimme hallita, mitä tietoja haluamme näyttää matriisin kussakin osassa. Ggpairin kaava on:

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

argumentit:

  • df: Tietojoukko käytetty
  • sarakkeet: Piirrä kaavio valitsemalla sarakkeet
  • otsikko: Sisällytä otsikko
  • ylempi: Ohjaa ruudut juonen diagonaalin yläpuolella. Sinun on annettava palautettavien laskutoimitusten tyyppi tai kaavio. Jos jatkuva = “cor”, pyydämme R:tä laskemaan korrelaation. Huomaa, että argumentin on oltava luettelo. Muita argumentteja voidaan käyttää. Katso lisätietoja [vinjetistä]("http://ggobi.github.io/ggally/#custom_functions").
  • Laske: Ohjaa diagonaalin alla olevia ruutuja.
  • Kartoitus: Ilmaisee kaavion esteettisyyden. Voimme esimerkiksi laskea kaavion eri ryhmille.

Kaksimuuttujaanalyysi ggpairilla ja ryhmittely

Seuraavassa kaaviossa on kolme tietoa:

  • Korrelaatiomatriisi log_totexp-, log_income-, age- ja wtrans-muuttujien välillä ryhmiteltynä sen mukaan, onko taloudessa lapsi vai ei.
  • Piirrä kunkin muuttujan jakauma ryhmittäin
  • Näytä hajontakaavio trendin kanssa ryhmittäin
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))

Koodin selitys

  • sarakkeet = c("log_totexp", "log_income", "age", "wtrans"): Valitse kaaviossa näytettävät muuttujat
  • otsikko = "Britannian kotitalouden tulomenojen kaksimuuttujaanalyysi": Lisää otsikko
  • ylempi = lista(): Ohjaa kaavion yläosaa. Eli diagonaalin yläpuolella
  • jatkuva = kääri ("cor", koko = 3)): Laske korrelaatiokerroin. Käärimme argumentin jatkuvana wrap()-funktion sisällä hallitaksemme graafin esteettisyyttä (eli koko = 3) -lower = list(): Ohjaa kaavion alaosaa. Eli diagonaalin alapuolella.
  • jatkuva = kääri ("sileä", alfa = 0.3, koko = 0.1): Lisää sirontakaavio lineaarisella trendillä. Käärimme argumentin jatkuvana wrap()-funktion sisällä hallitaksemme graafin esteettisyyttä (eli koko=0.1, alpha=0.3)
  • kartoitus = aes(väri = children_fac): Haluamme, että kaikki kaavion osat pinotaan muuttujalla children_fac, joka on kategorinen muuttuja, jonka arvo on 1, jos kotitaloudella ei ole lapsia ja 2 muussa tapauksessa.

lähtö:

Kaksimuuttujaanalyysi ggpairilla ja ryhmittelyllä

Kaksimuuttujaanalyysi ggpairilla osittaisella ryhmittelyllä

Alla oleva kaavio on hieman erilainen. Muutamme kuvauksen sijaintia ylemmän argumentin sisällä.

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

Koodin selitys

  • Täsmälleen sama koodi kuin edellinen esimerkki paitsi:
  • mapping = aes(väri = children_fac): Siirrä luettelo ylemmässä = list(). Haluamme vain laskennan pinottuna ryhmittäin kaavion yläosaan.

lähtö:

Kaksimuuttujaanalyysi ggpairilla osittaisella ryhmittelyllä

Yhteenveto

  • Kaksimuuttujasuhde kuvaa suhdetta - tai korrelaatiota - kahden R:n muuttujan välillä.
  • On olemassa kaksi ensisijaista menetelmää kahden muuttujan välisen korrelaation laskemiseksi R-ohjelmointi: Pearson & Spearman.
  • Pearson-korrelaatiomenetelmää käytetään yleensä ensisijaisena tarkistuksena kahden muuttujan väliselle suhteelle.
  • Sijoituskorrelaatio lajittelee havainnot arvon mukaan ja laskee arvon samankaltaisuuden tason.
  • Spearmanin rankkorrelaatio, , on aina välillä -1 ja 1, ja lähellä ääripäätä oleva arvo osoittaa vahvan suhteen.
  • Korrelaatiomatriisi on matriisi, joka edustaa kaikkien muuttujien parikorrelaatiota.
  • Merkitystaso on hyödyllinen joissakin tilanteissa, kun käytämme Pearson- tai Spearman-menetelmää.

Voimme tiivistää kaikki R:n korrelaatiofunktiot alla olevaan taulukkoon:

Kirjasto Tavoite Menetelmä Koodi
pohja kahden muuttujan korrelaatio Pearson
cor(dfx2, method = "pearson")
pohja kahden muuttujan korrelaatio Spearman
cor(dfx2, method = "spearman")
pohja Monimuuttujakorrelaatio Pearson
cor(df, method = "pearson")
pohja Monimuuttujakorrelaatio Spearman
cor(df, method = "spearman")
Hmisc P-arvo
rcorr(as.matrix(data[,1:9]))[["P"]]
Ggally lämpökartta
ggcorr(df)
Monimuuttujapiirrokset
cf code below