Kaksimuuttujasuhde kuvaa suhdetta - tai korrelaatiota - kahden muuttujan välillä ja. Tässä opetusohjelmassa keskustellaan korrelaation käsitteestä ja näytetään, miten sitä voidaan käyttää kahden muuttujan välisen suhteen mittaamiseen.
Kahden muuttujan välisen korrelaation laskemiseksi on kaksi ensisijaista menetelmää.
- Pearson: Parametrinen korrelaatio
- Spearman: Ei-parametrinen korrelaatio
Tässä opetusohjelmassa opit
- Pearsonin korrelaatio
- Spearman Rank -korrelaatio
- Korrelaatiomatriisi
- Visualisoi korrelaatiomatriisi
Pearsonin korrelaatio
Pearsonin korrelaatiomenetelmää käytetään yleensä kahden muuttujan välisen suhteen ensisijaisena tarkastuksena.
Korrelaatiokerroin , on mitta vahvuus lineaarinen suhde kahden muuttujan ja. Se lasketaan seuraavasti:
kanssa
- eli keskihajonta
- eli keskihajonta
Korrelaatio vaihtelee välillä -1 ja 1.
- Arvo lähellä tai yhtä suuri kuin 0 tarkoittaa vain vähän tai ei lainkaan lineaarista suhdetta ja välillä.
- Sen sijaan, mitä lähempänä 1 tai -1, sitä vahvempi lineaarinen suhde.
Voimme laskea t-testin seuraavasti ja tarkistaa jakelutaulukon vapausaste:
Spearman Rank -korrelaatio
Rank-korrelaatio lajittelee havainnot rankin mukaan ja laskee sijoituksen samankaltaisuuden tason. Sijoituskorrelaation etuna on se, että se on vahva ulkopuolisille, eikä se ole yhteydessä tietojen jakeluun. Huomaa, että järjestysmuuttujalle sopii sijoituskorrelaatio.
Spearmanin sijoituskorrelaatio, on aina välillä -1 ja 1, arvo lähellä ääripäätä osoittaa vahvaa suhdetta. Se lasketaan seuraavasti:
kanssa ilmoitettu kovarianssit välillä. Nimittäjä laskee keskihajonnat.
R: ssä voimme käyttää cor () -funktiota. Se vie kolme argumenttia, ja menetelmän.
cor(x, y, method)
Väitteet :
- x: Ensimmäinen vektori
- y: Toinen vektori
- menetelmä: Korrelaation laskemiseen käytetty kaava. Kolme merkkijonoa:
- "Pearson"
- "kendall"
- "keihäsmies"
Valinnainen argumentti voidaan lisätä, jos vektorit sisältävät puuttuvan arvon: use = "complete.obs"
Käytämme BudgetUK-tietojoukkoa. Tämä tietojoukko raportoi brittiläisten kotitalouksien budjettivarat vuosien 1980 ja 1982 välillä. Niiden joukossa on 1519 havaintoa, joilla on kymmenen ominaisuutta:
- wfood: jaa ruoan osuus
- wfuel: jaa polttoainekulut
- wcloth: budjettiosuus vaatekuluista
- walc: jaa alkoholikulut
- wtrans: jaa kuljetuskulut
- vaimo: osuus muista tavaroista
- totexp: kotitalouden kokonaiskustannukset puntaa
- tulot kotitalouksien nettotulot yhteensä
- ikä: kotitalouden ikä
- lapset: lasten lukumäärä
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 katsomme glimpse () -toimintoa dplyr-kirjastosta.
- Kolme pistettä on yli 500 000, joten päätimme sulkea ne pois.
- Rahamuuttujan muuntaminen lokissa on yleinen käytäntö. Se auttaa vähentämään poikkeamien vaikutusta ja vähentää aineiston vinoutta.
Tuotos:
## Observations: 1,516## Variables: 10## $ wfood0.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,…
Voimme laskea tulo- ja wfood-muuttujien välisen korrelaatiokertoimen "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")
Tuotos:
## [1] -0.2501252
Korrelaatiomatriisi
Kaksimuuttujakorrelaatio on hyvä alku, mutta monimuuttujaanalyysillä voimme saada laajemman kuvan. Korrelaatio monien muuttujien kanssa on esitetty korrelaatiomatriisin sisällä . Korrelaatiomatriisi on matriisi, joka edustaa kaikkien muuttujien parikorrelaatiota.
Cor () -funktio palauttaa korrelaatiomatriisin. Ainoa ero kaksimuuttujakorrelaatiossa on, että meidän ei tarvitse määrittää mitkä muuttujat. Oletusarvoisesti R laskee kaikkien muuttujien välisen korrelaation.
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 olevalla. On visuaalisempaa näyttää puolet matriisista.
Poissuljetaan children_fac, koska se on tekijätason muuttuja. cor ei suorita korrelaatiota kategoriallisella muuttujalla.
# 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
Koodin selitys
- cor (data): Näytä korrelaatiomatriisi
- pyöreä (data, 2): Pyöristetään korrelaatiomatriisi kahdella desimaalilla
- as.dist (): näyttää vain toisen puoliskon
Tuotos:
## 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
Merkitsevyystaso on hyödyllinen joissakin tilanteissa, kun käytämme pearson- tai spearman-menetelmää. Hmisc-kirjaston funktio rcorr () laskee meille p-arvon. Voimme ladata kirjaston condasta ja kopioida koodin liittääksesi sen päätelaitteeseen:
conda install -c r r-hmisc
Rcorr () edellyttää, että datakehys tallennetaan matriisina. Voimme muuntaa tietomme matriisiksi ennen laskea korrelaatiomatriisi p-arvolla.
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. Korrelaatiomatriisi on yleistä näyttää p-arvolla korrelaatiokertoimen sijaan.
p_value <-round(mat_2[["P"]], 3)p_value
Koodin selitys
- mat_2 [["P"]]: p-arvot tallennetaan elementtiin nimeltä P
- pyöreä (mat_2 [["P"]], 3): Pyöristä elementit kolmella numerolla
Tuotos:
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
Visualisoi korrelaatiomatriisi
Lämpökartta on toinen tapa näyttää korrelaatiomatriisi. GGally-kirjasto on ggplot2: n laajennus. Tällä hetkellä sitä ei ole saatavana huoneistokirjastossa. Voimme asentaa suoraan konsoliin.
install.packages("GGally")
Kirjasto sisältää erilaisia toimintoja näyttämään yhteenvetotilastot, kuten kaikkien matriisien muuttujien korrelaatio ja jakauma.
Funktiolla ggcorr () on paljon argumentteja. Esittelemme vain argumentit, joita käytämme opetusohjelmassa:
Funktio ggcorr
ggcorr(df, method = c("pairwise", "pearson"),nbreaks = NULL, digits = 2, low = "#3B9AB2",mid = "#EEEEEE", high = "#F21A00",geom = "tile", label = FALSE,label_alpha = FALSE)
Väitteet:
- df : käytetty datajoukko
- menetelmä : Kaava korrelaation laskemiseksi. Oletusarvoisesti pariliitos ja Pearson lasketaan
- nbreaks : Palauttaa luokkien alueen kertoimien värille . Oletuksena ei taukoa ja värigradientti on jatkuva
- numerot : Pyöristetään korrelaatiokerroin. Oletusasetuksena on 2
- matala : Säädä värin alempaa tasoa
- keski : Säädä värin keskitasoa
- korkea : Säädä värin korkeaa tasoa
- geom : Hallitse geometrisen argumentin muotoa. Oletusarvoisesti "ruutu"
- tunniste : Boolen arvo. Näytä tai ei tarra. Oletusasetuksena on FALSE
Peruslämpökartta
Paketin perustavin juoni on lämpökartta. Kaavion selitys osoittaa gradienttivärin välillä - 1 - 1, 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 datakehyksen nimi. Tekijätason muuttujia ei sisälly käyrään.
Tuotos:
Lisää ohjaus lämpökarttaan
Voimme lisätä kaavioon lisää ohjaimia.
ggcorr(data,nbreaks = 6,low = "steelblue",mid = "white",high = "darkred",geom = "circle")
Koodin selitys
- nbreaks = 6: hajota legenda 6 rivillä.
- low = "steelblue": Käytä negatiivisia korrelaatioita vaaleammilla väreillä
- mid = "valkoinen": Käytä valkoisia värejä keskialueen korrelaatioon
- high = "darkred": Käytä positiivisia korrelaatioita tummilla väreillä
- geom = "ympyrä": Käytä ympyrää lämpökartan ikkunoiden muotona. Ympyrän koko on verrannollinen korrelaation absoluuttiseen arvoon.
Tuotos:
Lisää etiketti lämpökarttaan
GGally antaa meille mahdollisuuden lisätä tarra ikkunoiden sisään.
ggcorr(data,nbreaks = 6,label = TRUE,label_size = 3,color = "grey50")
Koodin selitys
- label = TRUE: Lisää korrelaatiokertoimien arvot lämpökartan sisään.
- color = "grey50": Valitse väri, ts. harmaa
- label_size = 3: Aseta tarran kooksi 3
Tuotos:
ggpairs
Lopuksi esitellään toinen toiminto GGaly-kirjastosta. Ggpair. Se tuottaa kaavion matriisimuodossa. Yhdessä kuvaajassa voidaan näyttää kolmenlaisia laskutoimituksia. Matriisi on ulottuvuus, joka on yhtä suuri kuin havaintojen määrä. Ylä- / alaosassa näytetään ikkunat ja lävistäjä. Voimme hallita mitä tietoja haluamme näyttää matriisin kussakin osassa. Ggpair-kaava on:
ggpair(df, columns = 1: ncol(df), title = NULL,upper = list(continuous = "cor"),lower = list(continuous = "smooth"),mapping = NULL)
Väitteet :
- df : käytetty datajoukko
- sarakkeet : Piirrä juoni valitsemalla sarakkeet
- otsikko : Sisällytä otsikko
- ylempi : Ohjaa ruutuja viivan yläpuolella. Palautettavaksi on annettava laskutyyppi 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 [vinjettistä] ("http://ggobi.github.io/ggally/#custom_functions").
- Ala : Ohjaa diagonaalin alapuolisia laatikoita.
- Kartoitus : Ilmaisee graafin esteettisyyden. Voimme esimerkiksi laskea kaavion eri ryhmille.
Kaksimuuttuja-analyysi ggpair-ryhmällä
Seuraava kaavio kuvaa kolme tietoa:
- Log_totexp, log_income, age ja wtrans -muuttujan korrelaatiomatriisi ryhmitelty sen mukaan, onko kotitaloudessa lapsi vai ei.
- Piirrä kunkin muuttujan jakauma ryhmittäin
- Näytä sirontakaavio trendillä 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", "ikä", "wtrans"): Valitse muuttujat, jotka näytetään kaaviossa
- title = "Ison-Britannian kotitalouden kaksimuuttujaanalyysi tulomenoista": Lisää otsikko
- upper = list (): Ohjaa kuvaajan yläosaa. Eli diagonaalin yläpuolella
- jatkuva = rivitys ("cor", koko = 3)): Laske korrelaatiokerroin. Kääritämme jatkuvan argumentin wrap () -funktion sisään kontrolloidaksemme kaavion esteettisyyttä (eli koko = 3) -alempi = luettelo (): Ohjaa kuvaajan alaosaa. Eli diagonaalin alapuolella.
- jatkuva = rivitys ("sileä", alfa = 0,3, koko = 0,1): Lisää sirontakaavio, jolla on lineaarinen suuntaus. Kääritämme jatkuvan argumentin wrap () -funktion sisään kontrolloidaksemme kaavion esteettisyyttä (eli koko = 0,1, alfa = 0,3)
- kartoitus = aes (väri = lapset_fac): Haluamme, että kaavion jokainen osa pinotaan muuttujalla children_fac, joka on kategorinen muuttuja, jonka arvo on 1, jos kotitaloudessa ei ole lapsia, ja 2 muuten
Tuotos:
Kaksimuuttuja-analyysi ggpairilla osittaisella ryhmittelyllä
Alla oleva kaavio on hieman erilainen. Muutamme kartoituksen 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 edellisessä esimerkissä paitsi:
- kartoitus = aes (väri = lapset_fac): Siirrä luetteloa ylemmässä = luettelossa (). Haluamme vain, että laskenta on pinottu ryhmittäin kaavion yläosaan.
Tuotos:
Yhteenveto
Voimme tiivistää toiminnon alla olevassa taulukossa:
kirjasto |
Tavoite |
menetelmä |
koodi |
---|---|---|---|
Pohja |
kaksimuuttuja korrelaatio |
Pearson |
cor(dfx2, method = "pearson") |
Pohja |
kaksimuuttuja korrelaatio |
Keihäsmies |
cor(dfx2, method = "spearman") |
Pohja |
Monimuuttuja korrelaatio |
Pearson |
cor(df, method = "pearson") |
Pohja |
Monimuuttuja korrelaatio |
Keihäsmies |
cor(df, method = "spearman") |
Hmisc |
P-arvo |
rcorr(as.matrix(data[,1:9]))[["P"]] |
|
Ggally |
lämpökartta |
ggcorr(df) |
|
Monimuuttujat tontit |
cf code below |