Koreliacija R: Pearson & Ietininkas su matricos pavyzdžiu

Dviejų kintamųjų ryšys apibūdina ryšį arba koreliaciją tarp dviejų kintamųjų ir. Šioje pamokoje aptarsime koreliacijos sampratą ir parodysime, kaip ją galima naudoti matuojant bet kurių dviejų kintamųjų santykį.

Yra du pagrindiniai metodai koreliacijai tarp dviejų kintamųjų apskaičiuoti.

  • Pearsonas: Parametrinė koreliacija
  • Spearmanas: neparametrinė koreliacija

Šioje pamokoje sužinosite

  • Pearsono koreliacija
  • „Spearman“ rango koreliacija
  • Koreliacijos matrica
  • Vizualizuokite koreliacijos matricą

Pearsono koreliacija

Pearsono koreliacijos metodas paprastai naudojamas kaip pagrindinis dviejų kintamųjų ryšio patikrinimas.

Koreliacijos koeficientas ,, yra iš jėga priemonė linijinės santykių tarp dviejų kintamųjų ir. Jis apskaičiuojamas taip:

su

  • , ty standartinis nuokrypis
  • , ty standartinis nuokrypis

Koreliacija svyruoja tarp -1 ir 1.

  • Vertė, artima 0 arba lygi 0, reiškia, kad tiesinis ryšys tarp ir yra mažai arba visai nėra.
  • Priešingai, kuo arčiau 1 ar -1, tuo stipresnis yra linijinis ryšys.

Mes galime apskaičiuoti t testą taip ir patikrinti paskirstymo lentelę, kai laisvės laipsnis lygus:

„Spearman“ rango koreliacija

Reitingo koreliacija rūšiuoja stebėjimus pagal rangą ir apskaičiuoja rango panašumo lygį. Reitingo koreliacija turi tą pranašumą, kad yra tvirta pašaliniams ir nėra susijusi su duomenų paskirstymu. Atkreipkite dėmesį, kad eilės kintamajam tinka rango koreliacija.

„Spearman“ rango koreliacija, visada yra tarp -1 ir 1, o vertė artima galūnei, rodo tvirtus santykius. Jis apskaičiuojamas taip:

nurodžius kovariacijas tarp rango ir. Vardiklis apskaičiuoja standartinius nuokrypius.

R, mes galime naudoti funkciją cor (). Tam reikia trijų argumentų, ir metodo.

cor(x, y, method)

Argumentai :

  • x: Pirmasis vektorius
  • y: Antrasis vektorius
  • metodas: formulė, naudojama koreliacijai apskaičiuoti. Trys eilutės vertės:
    • "Pearson"
    • „kendall“
    • „ietininkas“

Neprivalomą argumentą galima pridėti, jei vektoriuose trūksta vertės: use = "complete.obs"

Mes naudosime „BudgetUK“ duomenų rinkinį. Šis duomenų rinkinys nurodo Didžiosios Britanijos namų ūkių biudžeto paskirstymą 1980–1982 m. Yra 1519 stebėjimų su dešimt požymių, tarp jų:

  • maisto produktai: dalytis maisto dalimis
  • wfuel: dalinkitės kuro išlaidomis
  • wcloth: biudžeto dalis drabužių išlaidoms
  • pasivaikščiojimas: dalinkitės alkoholio išlaidomis
  • wtrans: dalytis transporto išlaidomis
  • motina: dalis kitų prekių išleidžiama
  • totexp: visos namų ūkio išlaidos svarais
  • pajamų iš visų grynųjų namų ūkio pajamų
  • amžius: namų ūkio amžius
  • vaikai: vaikų skaičius
Pavyzdys
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)

Kodo paaiškinimas

  • Pirmiausia importuojame duomenis ir peržiūrime funkciją „glimpse ()“ iš „dplyr“ bibliotekos.
  • Trys taškai yra didesni nei 500 K, todėl nusprendėme juos išskirti.
  • Piniginį kintamąjį konvertuoti žurnale yra įprasta praktika. Tai padeda sumažinti pašalinių reikšmių poveikį ir sumažina duomenų rinkinio iškrypimą.

Išvestis:

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

„Pearson“ ir „Spearman“ metodais galime apskaičiuoti koreliacijos koeficientą tarp pajamų ir wfood kintamųjų.

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

išvestis:

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

Išvestis:

## [1] -0.2501252 

Koreliacijos matrica

Dviejų kintamųjų koreliacija yra gera pradžia, tačiau mes galime gauti platesnį vaizdą atlikę daugiamatę analizę. Koreliacija su daugeliu kintamųjų pavaizduota koreliacijos matricos viduje . Koreliacijos matrica yra matrica, atspindinti visų kintamųjų porinę koreliaciją.

Funkcija cor () pateikia koreliacijos matricą. Vienintelis skirtumas nuo dvipusės koreliacijos yra tas, kad nereikia nurodyti, kurie kintamieji. Pagal numatytuosius nustatymus R apskaičiuoja visų kintamųjų koreliaciją.

Atkreipkite dėmesį, kad koreliacijos negalima apskaičiuoti faktoriaus kintamajam. Prieš perduodami duomenų rėmelį „cor“ () viduje, turime įsitikinti, kad atsisakėme kategorinės funkcijos.

Koreliacijos matrica yra simetriška, o tai reiškia, kad didesnės nei įstrižainės vertės turi tas pačias vertes, kaip ir žemiau. Vaizdingiau parodyti pusę matricos.

Išskiriame children_fac, nes tai yra veiksnio lygio kintamasis. cor neatlieka kategorinio kintamojo koreliacijos.

# 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

Kodo paaiškinimas

  • cor (duomenys): rodoma koreliacijos matrica
  • apvalus (duomenys, 2): suapvalinkite koreliacijos matricą dviem skaičiais po kablelio
  • as.dist (): rodo tik antrąją pusę

Išvestis:

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

Reikšmingumo lygis

Reikšmingumo lygis yra naudingas kai kuriose situacijose, kai mes naudojame pearsono ar spearmano metodą. „Hmisc“ bibliotekos funkcija rcorr () apskaičiuoja mums p reikšmę. Mes galime atsisiųsti biblioteką iš „conda“ ir nukopijuoti kodą, kad įklijuotumėte jį į terminalą:

conda install -c r r-hmisc 

Rcorr () reikalauja, kad duomenų rėmas būtų saugomas kaip matrica. Mes galime konvertuoti savo duomenis į matricą anksčiau, kad apskaičiuotume koreliacijos matricą su p verte.

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

Sąrašo objekte mat_2 yra trys elementai:

  • r: Koreliacijos matricos išvestis
  • n: stebėjimo skaičius
  • P: p reikšmė

Mus domina trečiasis elementas - p reikšmė. Paprastai vietoj koreliacijos koeficiento koreliacijos matrica rodoma su p verte.

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

Kodo paaiškinimas

  • mat_2 [["P"]]: p reikšmės saugomos elemente, vadinamame P
  • apvalus (mat_2 [["P"]], 3): suapvalinkite elementus trimis skaitmenimis

Išvestis:

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

Vizualizuokite koreliacijos matricą

Šilumos žemėlapis yra dar vienas būdas parodyti koreliacijos matricą. „GGally“ biblioteka yra „ggplot2“ pratęsimas. Šiuo metu daugiabučių namų bibliotekoje jo nėra. Mes galime įdiegti tiesiai į konsolę.

install.packages("GGally")

Bibliotekoje yra skirtingos funkcijos, rodančios suvestinę statistiką, pvz., Visų kintamųjų koreliacija ir paskirstymas matricoje.

Funkcija ggcorr () turi daugybę argumentų. Mes pateiksime tik tuos argumentus, kuriuos naudosime pamokoje:

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)

Argumentai:

  • df : naudojamas duomenų rinkinys
  • metodas : formulė koreliacijai apskaičiuoti. Pagal numatytuosius nustatymus skaičiuojami „pairwise“ ir „Pearson“
  • n pertraukos : pateikite kategorinį koeficientų spalvos diapazoną. Pagal numatytuosius nustatymus nėra pertraukos, o spalvų gradientas yra tęstinis
  • skaitmenys : Apvalinkite koreliacijos koeficientą. Pagal numatytuosius nustatymus nustatykite 2
  • žemas : valdykite apatinį spalvos lygį
  • vidurys : valdykite vidurinį spalvos lygį
  • didelis : kontroliuokite aukštą spalvos lygį
  • geom : valdykite geometrinio argumento formą. Pagal numatytuosius nustatymus „plytelė“
  • etiketė : Bulio reikšmė. Rodyti etiketę ar ne. Pagal numatytuosius nustatymus nustatykite „FALSE“

Pagrindinis šilumos žemėlapis

Pats paprasčiausias paketo planas yra šilumos žemėlapis. Grafiko užrašas rodo gradiento spalvą nuo - 1 iki 1, o karšta spalva rodo stiprią teigiamą koreliaciją, o šalta - neigiamą koreliaciją.

library(GGally)ggcorr(data)

Kodo paaiškinimas

  • ggcorr (duomenys): Reikia tik vieno argumento, kuris yra duomenų rėmelio pavadinimas. Veiksnio lygio kintamieji į diagramą neįtraukti.

Išvestis:

Pridėkite valdymą prie šilumos žemėlapio

Mes galime pridėti daugiau valdiklių prie diagramos.

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

Kodo paaiškinimas

  • nbreaks = 6: sulaužykite legendą 6 rangais.
  • low = "steelblue": neigiamai koreliacijai naudokite šviesesnes spalvas
  • mid = "white": naudokite baltas spalvas koreliacijai viduryje
  • high = "darkred": teigiamai koreliacijai naudokite tamsias spalvas
  • geom = "circle": šilumos žemėlapyje naudokite apskritimą kaip langų formą. Apskritimo dydis yra proporcingas absoliučiai koreliacijos vertei.

Išvestis:

Pridėkite etiketę šilumos žemėlapiui

„GGally“ leidžia mums pridėti etiketę langų viduje.

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

Kodo paaiškinimas

  • label = TRUE: šilumos žemėlapio viduje pridėkite koreliacijos koeficientų reikšmes.
  • spalva = "pilka50": pasirinkite spalvą, ty pilką
  • label_size = 3: nustatykite, kad etiketės dydis būtų lygus 3

Išvestis:

ggpairs

Galiausiai pristatome dar vieną „GGaly“ bibliotekos funkciją. Ggpair. Jis sukuria matricos formato grafiką. Viename grafike galime parodyti trijų rūšių skaičiavimus. Matrica yra matmuo, lygus stebėjimų skaičiui. Viršutinėje / apatinėje dalyje rodomi langai ir įstrižainė. Mes galime kontroliuoti, kokią informaciją norime parodyti kiekvienoje matricos dalyje. Ggpair formulė yra:

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

Argumentai :

  • df : naudojamas duomenų rinkinys
  • stulpeliai : pasirinkite stulpelius, kad nupieštumėte diagramą
  • pavadinimas : įtraukite pavadinimą
  • viršutinė : valdykite langelius virš siužeto įstrižainės. Norint grįžti, reikia pateikti skaičiavimų tipą arba grafiką. Jei nepertraukiamas = "cor", mes paprašome R apskaičiuoti koreliaciją. Atkreipkite dėmesį, kad argumentas turi būti sąrašas. Galima naudoti kitus argumentus, jei norite gauti daugiau informacijos, žr. [Vinjetę] („http://ggobi.github.io/ggally/#custom_functions“).
  • Apatinė : valdykite langelius, esančius žemiau įstrižainės.
  • Žemėlapis : nurodo grafiko estetiką. Pavyzdžiui, galime apskaičiuoti skirtingų grupių diagramą.

Dviejų dydžių analizė naudojant ggpair su grupavimu

Kitame grafike pateikiama trys informacija:

  • Koreliacijos matrica tarp log_totexp, log_income, amžiaus ir wtrans kintamojo, sugrupuota pagal tai, ar namų ūkyje yra vaikas, ar ne.
  • Nubraižykite kiekvieno kintamojo pasiskirstymą pagal grupes
  • Parodykite sklaidos diagramą su tendencija pagal grupes
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))

Kodo paaiškinimas

  • stulpeliai = c ("log_totexp", "log_income", "age", "wtrans"): pasirinkite kintamuosius, kurie bus rodomi diagramoje
  • title = "Dviguba Britų namų ūkio pajamų išlaidų analizė": pridėkite pavadinimą
  • viršutinė = sąrašas (): valdykite viršutinę grafiko dalį. T. y. Virš įstrižainės
  • nepertraukiamas = apvyniojimas ("cor", dydis = 3)): apskaičiuokite koreliacijos koeficientą. Argumentą, esantį nepertraukiamai, apvyniojame funkcijos wrap () viduje, kad būtų galima kontroliuoti grafiko estetiką (ty dydis = 3) - žemesnis = sąrašas (): valdykite apatinę grafo dalį. T. y. Žemiau įstrižainės.
  • nepertraukiamas = apvyniojimas ("lygus", alfa = 0,3, dydis = 0,1): pridėkite sklaidos diagramą su linijine tendencija. Mes įvyniojame argumentą, kuris yra nepertraukiamas wrap () funkcijos viduje, kad būtų galima kontroliuoti grafiko estetiką (ty dydis = 0,1, alfa = 0,3)
  • mapping = aes (spalva = children_fac): norime, kad kiekvieną grafiko dalį sukrautų kintamasis children_fac, kuris yra kategorinis kintamasis, kurio vertė yra 1, jei namų ūkyje nėra vaikų, o kitu atveju - 2.

Išvestis:

Dviejų dydžių analizė naudojant ggpair su daline grupavimu

Žemiau pateiktas grafikas yra šiek tiek kitoks. Mes keičiame žemėlapio padėtį viršutinio argumento viduje.

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

Kodo paaiškinimas

  • Tikslus kodas kaip ir ankstesniame pavyzdyje, išskyrus:
  • mapping = aes (color = children_fac): Perkelkite sąrašą viršutiniame = list (). Mes tik norime, kad skaičiavimas būtų sukrautas pagal grupes viršutinėje grafiko dalyje.

Išvestis:

Santrauka

Funkciją galime apibendrinti toliau pateiktoje lentelėje:

biblioteka

Tikslas

metodas

kodas

Bazė

dvipusė koreliacija

Pirsonas

cor(dfx2, method = "pearson")

Bazė

dvipusė koreliacija

Ietininkas

cor(dfx2, method = "spearman")

Bazė

Daugiamatė koreliacija

Pearson

cor(df, method = "pearson")

Bazė

Daugiamatė koreliacija

Ietininkas

cor(df, method = "spearman")

Hmisc

P vertė

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

Ggally

šilumos žemėlapis

ggcorr(df)

Daugialypiai siužetai

cf code below

Įdomios straipsniai...