Korrelasjon i R: Pearson & Spearman Korrelasjonsmatrise
Bivariat korrelasjon i R
Et bivariat forhold beskriver en sammenheng -eller korrelasjon- mellom to variabler i R. I denne opplรฆringen vil vi diskutere begrepet korrelasjon og vise hvordan det kan brukes til รฅ mรฅle forholdet mellom to variabler i R.
Korrelasjon i R-programmering
Det er to primรฆre metoder for รฅ beregne korrelasjonen mellom to variabler i R-programmering:
- Pearson: Parametrisk korrelasjon
- Spearman: Ikke-parametrisk korrelasjon
Pearson Correlation Matrix i R
Pearson-korrelasjonsmetoden brukes vanligvis som en primรฆr sjekk for sammenhengen mellom to variabler.
Ocuco korrelasjonskoeffisient, , er et mรฅl pรฅ styrken til lineรฆr forhold mellom to variabler 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 kontrast, jo nรฆrmere 1 eller -1 kommer, jo sterkere er det lineรฆre forholdet.
Vi kan beregne t-testen som fรธlger og sjekke fordelingstabellen med en frihetsgrad lik:
Spearman Rank Correlation i R
En rangekorrelasjon sorterer observasjonene etter rangering og beregner likhetsnivรฅet mellom rangeringen. En rangkorrelasjon har fordelen av รฅ vรฆre robust overfor uteliggere og er ikke knyttet til distribusjonen av dataene. Merk at en rangkorrelasjon er egnet for ordinalvariabelen.
Spearmans rangkorrelasjon, , er alltid mellom -1 og 1 med en verdi nรฆr ekstremiteten indikerer sterk sammenheng. Det beregnes som fรธlger:
med oppgitt kovariansene mellom rang og . Nevneren beregner standardavvikene.
I R kan vi bruke cor()-funksjonen. Det krever 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"
- "spydmann"
Et valgfritt argument kan legges til hvis vektorene inneholder manglende verdi: use = "complete.obs"
Vi vil bruke BudgetUK-datasettet. Dette datasettet rapporterer budsjettfordelingen til britiske husholdninger mellom 1980 og 1982. Det er 1519 observasjoner med ti funksjoner, blant dem:
- wfood: dele mat dele bruke
- wdrivstoff: dele drivstoffforbruk
- wcloth: budsjettandel for klรฆrutgifter
- valk: dele alkoholforbruk
- wtrans: dele transportutgifter
- wother: andel av andre varer
- totexp: totale husholdningsforbruk i pund
- inntekt: total 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 tar en titt med glimpse()-funksjonen fra dplyr-biblioteket.
- Tre poeng er over 500K, sรฅ vi bestemte oss for รฅ ekskludere dem.
- Det er en vanlig praksis รฅ konvertere en monetรฆr variabel i log. Det bidrar til รฅ redusere virkningen av uteliggere og reduserer skjevheten i datasettet.
Utgang:
## 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, ...
Vi kan beregne korrelasjonskoeffisienten mellom inntekts- og wfood-variabler med "pearson"- og "spearman"-metodene.
cor(data$log_income, data$wfood, method = "pearson")
Utgang:
## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")
Utgang:
## [1] -0.2501252
Korrelasjonsmatrise i R
Den bivariate korrelasjonen er en god start, men vi kan fรฅ et bredere bilde med multivariat analyse. En korrelasjon med mange variabler er avbildet i en korrelasjonsmatrise. En korrelasjonsmatrise er en matrise som representerer parkorrelasjonen til alle variablene.
Cor()-funksjonen 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 faktorvariabel. 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 samme verdier som den under. Det er mer visuelt รฅ vise halvparten av matrisen.
Vi ekskluderer children_fac fordi det er en faktornivรฅvariabel. 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 code mat_1 <-as.dist(round(cor(data[,1:9]),2)) mat_1
Kode Forklaring
- cor(data): Vis korrelasjonsmatrisen
- runde(data, 2): Avrund korrelasjonsmatrisen med to desimaler
- as.dist(): Viser kun andre halvdel
Utgang:
## 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รฅ
Signifikansnivรฅet er nyttig i enkelte 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 leilighet og kopier 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 vi beregner 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: Utgang 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 kalt P
- runde(matte_2[[โPโ]], 3): Avrund elementene med tre sifre
Utgang:
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
Visualisering av korrelasjonsmatrise i R
Et varmekart er en annen mรฅte รฅ vise en korrelasjonsmatrise pรฅ. GGally-biblioteket er en utvidelse av ggplot2. Forelรธpig er det ikke tilgjengelig i conda-biblioteket. Vi kan installere direkte i konsollen.
install.packages("GGally")
Biblioteket inneholder forskjellige funksjoner for รฅ vise sammendragsstatistikken, for eksempel korrelasjonen og distribusjonen av alle variablene i en matrise.
Funksjonen ggcorr() har mange argumenter. Vi vil bare introdusere argumentene vi vil bruke i opplรฆringen:
ggcorr-funksjonen
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 parvis og Pearson
- nbreaks: Returner et kategorisk omrรฅde for fargen pรฅ koeffisientene. Som standard er det ingen pause og fargegradienten er kontinuerlig
- sifre: Avrund korrelasjonskoeffisienten. Som standard, satt til 2
- lav: Kontroller det nedre nivรฅet av fargen
- mid: Kontroller det midterste nivรฅet av fargen
- hรธy: Kontroller det hรธye nivรฅet pรฅ fargen
- geom: Kontroller formen pรฅ det geometriske argumentet. Som standard, "flis"
- etikett: Boolsk verdi. Vis eller ikke etiketten. Som standard, satt til "FALSE".
Grunnleggende varmekart
Det mest grunnleggende plottet i pakken er et varmekart. Tegnforklaringen til grafen 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.
Utgang:
Legge til kontroll til 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: bryte legenden med 6 rekker.
- lav = "stรฅlblรฅ": Bruk lysere farger for negativ korrelasjon
- mid = "hvit": Bruk hvite farger for mellomomrรฅdekorrelasjon
- hรธy = "mรธrkerรธd": Bruk mรธrke farger for positiv korrelasjon
- geom = "sirkel": Bruk sirkel som form pรฅ vinduene i varmekartet. Stรธrrelsen pรฅ sirkelen er proporsjonal med den absolutte verdien av korrelasjonen.
Utgang:
Legge til etikett pรฅ varmekartet
GGally lar oss legge til en etikett inne i vinduene:
ggcorr(data,
nbreaks = 6,
label = TRUE,
label_size = 3,
color = "grey50")
Kode Forklaring
- etikett = TRUE: Legg til verdiene til korrelasjonskoeffisientene inne i varmekartet.
- farge = "grรฅ50": Velg farge, dvs. grรฅ
- label_size = 3: Sett stรธrrelsen pรฅ etiketten til 3
Utgang:
ggpairs-funksjonen
Til slutt introduserer vi en annen funksjon fra GGAly-biblioteket. Ggpair. Den produserer en graf i et matriseformat. Vi kan vise tre typer beregninger innenfor 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 รธnsker รฅ 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
- tittel: Ta med en tittel
- รธverste: Kontroller boksene over diagonalen til plottet. Mรฅ oppgi typen beregninger eller graf som skal returneres. Hvis kontinuerlig = "cor", ber vi R 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.
- Senk: Kontroller boksene under diagonalen.
- Kartlegging: Indikerer grafens estetikk. For eksempel kan vi beregne grafen for forskjellige grupper.
Bivariat analyse med ggpair med gruppering
Den neste grafen plotter tre informasjon:
- Korrelasjonsmatrisen mellom log_totexp, log_income, age og wtrans variabel gruppert etter om husholdningen har et barn eller ikke.
- Plott fordelingen av hver variabel etter gruppe
- Vis spredningsplottet med trend for 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 inntektsutgifter til den britiske husholdningen": Legg til en tittel
- รธvre = liste(): Kontroller den รธvre delen av grafen. Dvs over diagonalen
- kontinuerlig = wrap(โcorโ, stรธrrelse = 3)): Beregn korrelasjonskoeffisienten. Vi pakker 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 spredningsplott med en lineรฆr trend. Vi legger argumentet kontinuerlig inne i wrap()-funksjonen for รฅ kontrollere grafens estetikk (dvs. stรธrrelse=0.1, alfa=0.3)
- mapping = aes(farge = children_fac): Vi vil at hver del av grafen skal stables av variabelen children_fac, som er en kategorisk variabel som tar verdien av 1 hvis husholdningen ikke har barn og 2 ellers
Utgang:
Bivariat analyse med ggpair med partiell 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 = children_fac): Flytt listen i upper = list(). Vi vil bare ha beregningen stablet etter gruppe i den รธvre delen av grafen.
Utgang:
Sammendrag
- Et bivariat forhold beskriver et forhold -eller korrelasjon- mellom to variabler i R.
- Det er to primรฆre metoder for รฅ beregne korrelasjonen mellom to variabler i R-programmering: Pearson & Spearman.
- Pearson-korrelasjonsmetoden brukes vanligvis som en primรฆr sjekk for sammenhengen mellom to variabler.
- En rangekorrelasjon sorterer observasjonene etter rangering og beregner likhetsnivรฅet mellom rangeringen.
- Spearmans rangkorrelasjon, , er alltid mellom -1 og 1 med en verdi nรฆr ekstremiteten indikerer sterk sammenheng.
- En korrelasjonsmatrise er en matrise som representerer parkorrelasjonen til alle variablene.
- Signifikansnivรฅet er nyttig i enkelte situasjoner nรฅr vi bruker pearson- eller spearman-metoden.
Vi kan oppsummere alle korrelasjonsfunksjonene i R i tabellen nedenfor:
| Bibliotek | Mรฅlet | Metode | Kode |
|---|---|---|---|
| Base | bivariate korrelasjon | Pearson |
cor(dfx2, method = "pearson") |
| Base | bivariate korrelasjon | Spearman |
cor(dfx2, method = "spearman") |
| Base | Multivariat korrelasjon | Pearson |
cor(df, method = "pearson") |
| Base | Multivariat korrelasjon | Spearman |
cor(df, method = "spearman") |
| Hmisc | P-verdi |
rcorr(as.matrix(data[,1:9]))[["P"]] |
|
| Ggally | varmekart |
ggcorr(df) |
|
| Multivariate plott |
cf code below |









