Korrelasjon i R: Pearson & Spearman med matriseeksempel

Et bivariat forhold beskriver et forhold - eller korrelasjon - mellom to variabler, og. I denne opplæringen diskuterer vi begrepet korrelasjon og viser hvordan det kan brukes til å måle forholdet mellom to variabler.

Det er to primære metoder for å beregne sammenhengen mellom to variabler.

  • Pearson: Parametrisk korrelasjon
  • Spearman: Ikke-parametrisk korrelasjon

I denne veiledningen vil du lære

  • Pearson-korrelasjon
  • Spearman Rank Correlation
  • Korrelasjonsmatrise
  • Visualiser korrelasjonsmatrise

Pearson-korrelasjon

Pearson-korrelasjonsmetoden brukes vanligvis som en primær sjekk for forholdet mellom to variabler.

Den korrelasjonskoeffisienten ,, er et mål på styrken av det lineære forholdet mellom to variable og. Det beregnes som følger:

med

  • , dvs. standardavvik på
  • , dvs. standardavvik på

Korrelasjonen varierer mellom -1 og 1.

  • En verdi på nær eller lik 0 innebærer liten eller ingen lineær sammenheng mellom og.
  • I motsetning til at jo nærmere 1 eller -1, jo sterkere er det lineære forholdet.

Vi kan beregne t-testen som følger og sjekke distribusjonstabellen med en grad av frihet som tilsvarer:

Spearman Rank Correlation

En rangkorrelasjon sorterer observasjonene etter rang og beregner likhetsnivået mellom rangen. En rangkorrelasjon har fordelen av å være robust mot avvikere og er ikke knyttet til distribusjonen av dataene. Merk at en rangkorrelasjon er egnet for den ordinære variabelen.

Spearmans rangkorrelasjon, er alltid mellom -1 og 1 med en verdi nær ekstremiteten indikerer sterkt forhold. Det beregnes som følger:

med uttalt samvarianter mellom rang og. Nevneren beregner standardavvikene.

I R kan vi bruke cor () -funksjonen. Det tar tre argumenter, og metoden.

cor(x, y, method)

Argumenter :

  • x: Første vektor
  • y: Andre vektor
  • metode: Formelen som brukes til å beregne korrelasjonen. Tre strengverdier:
    • "pearson"
    • "kendall"
    • "spearman"

Et valgfritt argument kan legges til hvis vektorene inneholder manglende verdi: use = "complete.obs"

Vi bruker BudgetUK-datasettet. Dette datasettet rapporterer budsjettmessig fordeling av britiske husholdninger mellom 1980 og 1982. Det er 1519 observasjoner med ti funksjoner, blant dem:

  • wfood: del matutgiftene
  • wfuel: del drivstoffutgiftene
  • wcloth: budsjettandel for klesutgifter
  • walc: del alkoholforbruk
  • wtrans: del transportutgifter
  • mer: andel av andre varer
  • totexp: samlet husholdningsbruk i pund
  • inntekt samlet netto husholdningsinntekt
  • alder: husstandens alder
  • barn: antall barn
Eksempel
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)

Kode Forklaring

  • Vi importerer først dataene og ser med glimt () -funksjonen fra dplyr-biblioteket.
  • Tre poeng er over 500 000, så vi bestemte oss for å ekskludere dem.
  • Det er vanlig å konvertere en monetær variabel i loggen. Det hjelper til med å redusere effekten av avvikere og reduserer skjevheten i datasettet.

Produksjon:

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

Vi kan beregne korrelasjonskoeffisienten mellom inntekts- og wfoodvariabler med "pearson" og "spearman" -metodene.

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

produksjon:

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

Produksjon:

## [1] -0.2501252 

Korrelasjonsmatrise

Den bivariate korrelasjonen er en god start, men vi kan få et bredere bilde med multivariat analyse. En korrelasjon med mange variabler er avbildet inne i en korrelasjonsmatrise . En korrelasjonsmatrise er en matrise som representerer parkorrelasjonen til alle variablene.

Funksjonen cor () returnerer en korrelasjonsmatrise. Den eneste forskjellen med den bivariate korrelasjonen er at vi ikke trenger å spesifisere hvilke variabler. Som standard beregner R korrelasjonen mellom alle variablene.

Merk at en korrelasjon ikke kan beregnes for faktorvariabelen. Vi må sørge for at vi slipper kategorisk funksjon før vi passerer datarammen inne i cor ().

En korrelasjonsmatrise er symmetrisk, noe som betyr at verdiene over diagonalen har de samme verdiene som den nedenfor. Det er mer visuelt å vise halvparten av matrisen.

Vi ekskluderer child_fac fordi det er en variabel på faktornivå. cor utfører ikke korrelasjon på en kategorisk variabel.

# 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

Kode Forklaring

  • cor (data): Vis korrelasjonsmatrisen
  • runde (data, 2): Rund korrelasjonsmatrisen med to desimaler
  • as.dist (): Viser bare andre omgang

Produksjon:

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

Signifikansnivå

Betydningsnivået er nyttig i noen situasjoner når vi bruker pearson- eller spearman-metoden. Funksjonen rcorr () fra biblioteket Hmisc beregner p-verdien for oss. Vi kan laste ned biblioteket fra conda og kopiere koden for å lime den inn i terminalen:

conda install -c r r-hmisc 

Rcorr () krever at en dataramme lagres som en matrise. Vi kan konvertere dataene våre til en matrise før for å beregne korrelasjonsmatrisen med p-verdien.

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

Listeobjektet mat_2 inneholder tre elementer:

  • r: Output av korrelasjonsmatrisen
  • n: Antall observasjoner
  • P: p-verdi

Vi er interessert i det tredje elementet, p-verdien. Det er vanlig å vise korrelasjonsmatrisen med p-verdien i stedet for korrelasjonskoeffisienten.

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

Kode Forklaring

  • mat_2 [["P"]]: P-verdiene er lagret i elementet som heter P
  • runde (mat_2 [["" P "], 3): Rund elementene med tre sifre

Produksjon:

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

Visualiser korrelasjonsmatrise

Et varmekart er en annen måte å vise en korrelasjonsmatrise på. GGally-biblioteket er en utvidelse av ggplot2. Foreløpig er den ikke tilgjengelig i leilighetsbiblioteket. Vi kan installere direkte i konsollen.

install.packages("GGally")

Biblioteket inneholder forskjellige funksjoner for å vise sammendragsstatistikken, for eksempel korrelasjon og distribusjon av alle variablene i en matrise.

Funksjonen ggcorr () har mange argumenter. Vi vil bare introdusere argumentene vi vil bruke i opplæringen:

Funksjonen ggcorr

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

Argumenter:

  • df : Datasett brukt
  • metode : Formel for å beregne korrelasjonen. Som standard beregnes pairwise og Pearson
  • nbrudd : Returner et kategorisk område for farging av koeffisientene. Som standard er det ingen brudd, og fargeovergangen er kontinuerlig
  • sifre : Rund korrelasjonskoeffisienten. Som standard sett til 2
  • lav : Kontroller det nedre nivået av fargen
  • midt : Kontroller midtnivået i fargen
  • høy : Kontroller det høye nivået av fargen
  • geom : Kontroller formen på det geometriske argumentet. Som standard er "fliser"
  • etikett : Boolsk verdi. Vis etiketten eller ikke. Sett som standard til "FALSE"

Grunnleggende varmekart

Den mest grunnleggende plottet i pakken er et varmekart. Tegnforklaringen viser en gradientfarge fra - 1 til 1, med varm farge som indikerer sterk positiv korrelasjon og kald farge, en negativ korrelasjon.

library(GGally)ggcorr(data)

Kode Forklaring

  • ggcorr (data): Bare ett argument er nødvendig, som er datarammenavnet. Faktornivåvariabler er ikke inkludert i plottet.

Produksjon:

Legg kontroll på varmekartet

Vi kan legge til flere kontroller i grafen.

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

Kode Forklaring

  • nbreaks = 6: bryt legenden med 6 ranger.
  • low = "steelblue": Bruk lysere farger for negativ korrelasjon
  • mid = "white": Bruk hvite farger for korrelasjon mellom mellomtoner
  • high = "darkred": Bruk mørke farger for positiv sammenheng
  • geom = "sirkel": Bruk sirkel som form på vinduene i varmekartet. Størrelsen på sirkelen er proporsjonal med den absolutte verdien av korrelasjonen.

Produksjon:

Legg etiketten til varmekartet

GGally lar oss legge til en etikett inne i vinduene.

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

Kode Forklaring

  • label = TRUE: Legg til verdiene til korrelasjonskoeffisientene inne i varmekartet.
  • color = "grey50": Velg farge, dvs. grå
  • label_size = 3: Sett størrelsen på etiketten som tilsvarer 3

Produksjon:

ggpairs

Til slutt introduserer vi en annen funksjon fra GGaly-biblioteket. Ggpair. Den produserer en graf i matriseformat. Vi kan vise tre typer beregninger i en graf. Matrisen er en dimensjon, med lik antall observasjoner. Den øvre / nedre delen viser vinduer og i diagonalen. Vi kan kontrollere hvilken informasjon vi vil vise i hver del av matrisen. Formelen for ggpair er:

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

Argumenter :

  • df : Datasett brukt
  • kolonner : Velg kolonnene for å tegne plottet
  • title : Inkluder en tittel
  • øvre : Kontroller boksene over diagonalen på plottet. Trenger å oppgi typen beregninger eller graf som skal returneres. Hvis kontinuerlig = "cor", ber vi R om å beregne korrelasjonen. Merk at argumentet må være en liste. Andre argumenter kan brukes, se [vignetten] ("http://ggobi.github.io/ggally/#custom_functions") for mer informasjon.
  • Nedre : Kontroller boksene under diagonalen.
  • Kartlegging : Indikerer estetikken til grafen. For eksempel kan vi beregne grafen for forskjellige grupper.

Bivariat analyse med ggpair med gruppering

Den neste grafen viser tre opplysninger:

  • Korrelasjonsmatrisen mellom log_totexp, log_income, age og wtrans variabel gruppert etter hvorvidt husstanden har et barn eller ikke.
  • Plott fordelingen av hver variabel etter gruppe
  • Vis spredningsdiagrammet med trenden etter gruppe
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))

Kode Forklaring

  • kolonner = c ("log_totexp", "log_income", "age", "wtrans"): Velg variablene som skal vises i grafen
  • title = "Bivariat analyse av den britiske husstandens inntektsutgifter": Legg til en tittel
  • upper = list (): Kontroller den øvre delen av grafen. Dvs over diagonalen
  • kontinuerlig = wrap ("cor", størrelse = 3)): Beregn korrelasjonskoeffisienten. Vi vikler argumentet kontinuerlig inne i wrap () -funksjonen for å kontrollere grafens estetikk (dvs. størrelse = 3) -lower = list (): Kontroller den nedre delen av grafen. Dvs under diagonalen.
  • kontinuerlig = wrap ("glatt", alfa = 0,3, størrelse = 0,1): Legg til et spredningsdiagram med en lineær trend. Vi vikler argumentet kontinuerlig inne i wrap () -funksjonen for å kontrollere estetikken i grafen (dvs. størrelse = 0,1, alfa = 0,3)
  • mapping = aes (color = child_fac): Vi vil at hver del av grafen skal stables med variabelen child_fac, som er en kategorisk variabel som tar verdien 1 hvis husstanden ikke har barn og 2 ellers

Produksjon:

Bivariat analyse med ggpair med delvis gruppering

Grafen nedenfor er litt annerledes. Vi endrer posisjonen til kartleggingen inne i det øvre argumentet.

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

Kode Forklaring

  • Nøyaktig samme kode som forrige eksempel bortsett fra:
  • mapping = aes (color = child_fac): Flytt listen i øvre = liste (). Vi ønsker bare beregningen stablet etter gruppe i den øvre delen av grafen.

Produksjon:

Sammendrag

Vi kan oppsummere funksjonen i tabellen nedenfor:

bibliotek

Objektiv

metode

kode

Utgangspunkt

bivariat korrelasjon

Pearson

cor(dfx2, method = "pearson")

Utgangspunkt

bivariat korrelasjon

Spearman

cor(dfx2, method = "spearman")

Utgangspunkt

Multivariat korrelasjon

Pearson

cor(df, method = "pearson")

Utgangspunkt

Multivariat korrelasjon

Spearman

cor(df, method = "spearman")

Hmisc

P-verdi

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

Ggally

varmekart

ggcorr(df)

Multivariate tomter

cf code below

Interessante artikler...