Korrelation i R: Pearson & Spearman Correlation Matrix

Bivariat korrelation i R

En bivariat relation beskriver ett samband -eller korrelation- mellan tvรฅ variabler i R. I denna handledning kommer vi att diskutera begreppet korrelation och visa hur det kan anvรคndas fรถr att mรคta sambandet mellan tvรฅ valfria variabler i R.

Korrelation i R-programmering

Det finns tvรฅ primรคra metoder fรถr att berรคkna korrelationen mellan tvรฅ variabler i R-programmering:

  • Pearson: Parametrisk korrelation
  • Spearman: Icke-parametrisk korrelation

Pearson Correlation Matrix i R

Pearson-korrelationsmetoden anvรคnds vanligtvis som en primรคr kontroll fรถr sambandet mellan tvรฅ variabler.

Ocuco-landskapet korrelationskoefficient, , รคr ett mรฅtt pรฅ styrkan hos linjรคr samband mellan tvรฅ variabler och . Det berรคknas enligt fรถljande:

Pearson Correlation Matrix i R

med

  • Pearson Correlation Matrix i R, dvs standardavvikelse pรฅ
  • Pearson Correlation Matrix i R, dvs standardavvikelse pรฅ

Korrelationen strรคcker sig mellan -1 och 1.

  • Ett vรคrde nรคra eller lika med 0 innebรคr lite eller inget linjรคrt samband mellan och .
  • Dรคremot, ju nรคrmare 1 eller -1 kommer, desto starkare รคr det linjรคra sambandet.

Vi kan berรคkna t-testet enligt fรถljande och kontrollera distributionstabellen med en frihetsgrad som รคr lika med:

Pearson Correlation Matrix i R

Spearman Rank Correlation i R

En rangkorrelation sorterar observationerna efter rangordning och berรคknar graden av likhet mellan rangordningen. En rangkorrelation har fรถrdelen att den รคr robust mot extremvรคrden och รคr inte kopplad till distributionen av data. Observera att en rangkorrelation รคr lรคmplig fรถr ordinalvariabeln.

Spearmans rangkorrelation, , รคr alltid mellan -1 och 1 med ett vรคrde nรคra extremiteten indikerar starkt samband. Det berรคknas enligt fรถljande:

Spearman Rank Correlation i R

med angav kovarianserna mellan rang och . Nรคmnaren berรคknar standardavvikelserna.

I R kan vi anvรคnda cor()-funktionen. Det krรคvs tre argument, , och metoden.

cor(x, y, method)

Argument:

  • x: Fรถrsta vektorn
  • y: Andra vektorn
  • metod: Formeln som anvรคnds fรถr att berรคkna korrelationen. Tre strรคngvรคrden:
    • "pearson"
    • "kendall"
    • "spearman"

Ett valfritt argument kan lรคggas till om vektorerna innehรฅller saknat vรคrde: use = "complete.obs"

Vi kommer att anvรคnda datauppsรคttningen BudgetUK. Denna datauppsรคttning rapporterar budgettilldelningen fรถr brittiska hushรฅll mellan 1980 och 1982. Det finns 1519 observationer med tio funktioner, bland dem:

  • wfood: dela mat dela spendera
  • wbrรคnsle: dela brรคnslefรถrbrukning
  • wcloth: budgetandel fรถr utgifter fรถr klรคder
  • valk: dela alkoholutgifter
  • wtrans: dela transportkostnader
  • wother: andel av andra varor som spenderas
  • totexp: hushรฅllens totala utgifter i pund
  • intรคkter: hushรฅllens totala nettoinkomst
  • รฅlder: hushรฅllets รฅlder
  • barn: Antal barn

Exempelvis

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)

Code Fรถrklaring

  • Vi importerar fรถrst data och tar en titt med funktionen glimpse() frรฅn dplyr-biblioteket.
  • Tre poรคng รคr รถver 500K, sรฅ vi bestรคmde oss fรถr att utesluta dem.
  • Det รคr vanligt att konvertera en monetรคr variabel i log. Det hjรคlper till att minska effekten av extremvรคrden och minskar skevheten i datamรคngden.

Produktion:

## 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 berรคkna korrelationskoefficienten mellan inkomst- och wfood-variabler med metoderna "pearson" och "spearman".

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

Produktion:

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

Produktion:

## [1] -0.2501252

Korrelationsmatris i R

Den bivariata korrelationen รคr en bra bรถrjan, men vi kan fรฅ en bredare bild med multivariat analys. En korrelation med mรฅnga variabler visas inuti a korrelationsmatris. En korrelationsmatris รคr en matris som representerar parkorrelationen fรถr alla variabler.

Cor()-funktionen returnerar en korrelationsmatris. Den enda skillnaden med den bivariata korrelationen รคr att vi inte behรถver specificera vilka variabler. Som standard berรคknar R korrelationen mellan alla variabler.

Observera att en korrelation inte kan berรคknas fรถr faktorvariabel. Vi mรฅste se till att vi slรคpper kategoriska funktioner innan vi skickar dataramen inuti cor().

En korrelationsmatris รคr symmetrisk vilket innebรคr att vรคrdena ovanfรถr diagonalen har samma vรคrden som den nedanfรถr. Det รคr mer visuellt att visa hรคlften av matrisen.

Vi exkluderar children_fac eftersom det รคr en faktornivรฅvariabel. cor utfรถr inte korrelation 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

Code Fรถrklaring

  • cor(data): Visa korrelationsmatrisen
  • runda(data, 2): Avrunda korrelationsmatrisen med tvรฅ decimaler
  • as.dist(): Visar endast andra halvlek

Produktion:

##            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รฅn รคr anvรคndbar i vissa situationer nรคr vi anvรคnder pearson- eller spearmanmetoden. Funktionen rcorr() frรฅn biblioteket Hmisc berรคknar p-vรคrdet รฅt oss. Vi kan ladda ner biblioteket frรฅn Conda och kopiera koden fรถr att klistra in den i terminalen:

conda install -c r r-hmisc

rcorr() krรคver att en dataram lagras som en matris. Vi kan konvertera vรฅra data till en matris innan vi berรคknar korrelationsmatrisen med p-vรคrdet.

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

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

Listobjektet mat_2 innehรฅller tre element:

  • r: Utdata frรฅn korrelationsmatrisen
  • n: Antal observationer
  • P: p-vรคrde

Vi รคr intresserade av det tredje elementet, p-vรคrdet. Det รคr vanligt att visa korrelationsmatrisen med p-vรคrdet istรคllet fรถr korrelationskoefficienten.

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

Code Fรถrklaring

  • mat_2[[โ€œPโ€]]: P-vรคrdena lagras i elementet som kallas P
  • round(mat_2[[โ€œPโ€]], 3): Avrunda elementen med tre siffror

Produktion:

           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

Visualisera korrelationsmatris i R

En vรคrmekarta รคr ett annat sรคtt att visa en korrelationsmatris. GGally-biblioteket รคr en fรถrlรคngning av ggplot2. Fรถr nรคrvarande รคr det inte tillgรคngligt i conda-biblioteket. Vi kan installera direkt i konsolen.

install.packages("GGally")

Visualisera korrelationsmatris

Biblioteket innehรฅller olika funktioner fรถr att visa den sammanfattande statistiken sรฅsom korrelationen och fรถrdelningen av alla variabler i en matris.

Funktionen ggcorr() har mรฅnga argument. Vi kommer endast att introducera de argument vi kommer att anvรคnda i handledningen:

ggcorr-funktionen

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

argument:

  • df: Dataset anvรคnds
  • metod: Formel fรถr att berรคkna korrelationen. Som standard berรคknas parvis och Pearson
  • nbreaks: Returnera ett kategoriskt omrรฅde fรถr fรคrgen pรฅ koefficienterna. Som standard รคr det inget avbrott och fรคrggradienten รคr kontinuerlig
  • siffror: Avrunda korrelationskoefficienten. Som standard stรคlls in pรฅ 2
  • lรฅg: Styr den lรคgre nivรฅn av fรคrgningen
  • mitten: Styr mellannivรฅn fรถr fรคrgningen
  • hรถg: Kontrollera den hรถga fรคrgnivรฅn
  • geom: Styr formen pรฅ det geometriska argumentet. Som standard, "bricka"
  • etikett: Booleskt vรคrde. Visa eller inte etiketten. Som standard stรคlls in pรฅ "FALSE".

Grundlรคggande vรคrmekarta

Den mest grundlรคggande handlingen i paketet รคr en vรคrmekarta. Fรถrklaringen av grafen visar en gradientfรคrg frรฅn โ€“ 1 till 1, med varm fรคrg som indikerar stark positiv korrelation och kall fรคrg, en negativ korrelation.

library(GGally)
ggcorr(data)

Code Fรถrklaring

  • ggcorr(data): Endast ett argument behรถvs, vilket รคr dataramens namn. Faktornivรฅvariabler ingรฅr inte i diagrammet.

Produktion:

Grundlรคggande vรคrmekarta

Lรคgga till kontroll till vรคrmekartan

Vi kan lรคgga till fler kontroller i diagrammet:

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

Code Fรถrklaring

  • nbreaks=6: bryt legenden med 6 led.
  • lรฅg = "stรฅlblรฅ": Anvรคnd ljusare fรคrger fรถr negativ korrelation
  • mitt = "vit": Anvรคnd vita fรคrger fรถr mellanintervallkorrelation
  • hรถg = "mรถrkrรถd": Anvรคnd mรถrka fรคrger fรถr positiv korrelation
  • geom = "cirkel": Anvรคnd cirkel som formen pรฅ fรถnstren i vรคrmekartan. Cirkelns storlek รคr proportionell mot korrelationens absoluta vรคrde.

Produktion:

Lรคgga till kontroll till vรคrmekartan

Lรคgger till etikett till vรคrmekartan

GGally lรฅter oss lรคgga till en etikett i fรถnstren:

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

Code Fรถrklaring

  • etikett = SANT: Lรคgg till vรคrdena fรถr korrelationskoefficienterna inuti vรคrmekartan.
  • fรคrg = "grรฅ50": Vรคlj fรคrg, dvs grรฅtt
  • label_size = 3: Stรคll in storleken pรฅ etiketten lika med 3

Produktion:

Lรคgger till etikett till vรคrmekartan

ggpairs-funktionen

Slutligen introducerar vi en annan funktion frรฅn GGaly-biblioteket. Ggpair. Den producerar en graf i ett matrisformat. Vi kan visa tre typer av berรคkningar inom en graf. Matrisen รคr en dimension, med lika med antalet observationer. Den รถvre/nedre delen visar fรถnster och i diagonalen. Vi kan styra vilken information vi vill visa i varje del av matrisen. Formeln fรถr ggpair รคr:

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

argument:

  • df: Dataset anvรคnds
  • kolonner: Vรคlj kolumnerna fรถr att rita plotten
  • rubricerade: Inkludera en titel
  • รถvre: Styr rutorna ovanfรถr diagrammets diagonal. Behรถver ange vilken typ av berรคkningar eller graf som ska returneras. Om kontinuerlig = "cor", ber vi R att berรคkna korrelationen. Observera att argumentet mรฅste vara en lista. Andra argument kan anvรคndas, se [vinjetten](โ€œhttp://ggobi.github.io/ggally/#custom_functionsโ€) fรถr mer information.
  • Sรคnk: Styr rutorna under diagonalen.
  • Kartaping: Indikerar grafens estetik. Vi kan till exempel berรคkna grafen fรถr olika grupper.

Bivariat analys med ggpair med grouping

Nรคsta graf visar tre information:

  • Korrelationsmatrisen mellan log_totexp, log_income, age och wtrans variabel grupperad efter om hushรฅllet har ett barn eller inte.
  • Rita fรถrdelningen av varje variabel per grupp
  • Visa spridningsdiagrammet med trenden fรถr grupp
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))

Code Fรถrklaring

  • kolumner = c(โ€œlog_totexpโ€, โ€œlog_incomeโ€, โ€œageโ€, โ€œwtransโ€): Vรคlj de variabler som ska visas i grafen
  • title = "Bivariat analys av det brittiska hushรฅllets inkomstutgifter": Lรคgg till en titel
  • รถvre = lista(): Styr den รถvre delen av grafen. Dvs ovanfรถr diagonalen
  • kontinuerlig = wrap(โ€œcorโ€, storlek = 3)): Berรคkna korrelationskoefficienten. Vi lindar argumentet kontinuerligt inuti wrap()-funktionen fรถr att kontrollera grafens estetik (dvs storlek = 3) -lower = list(): Styr den nedre delen av grafen. Dvs. Under diagonalen.
  • kontinuerlig = wrap(โ€œslรคtโ€,alfa = 0.3,storlek=0.1): Lรคgg till ett spridningsdiagram med en linjรคr trend. Vi lindar argumentet kontinuerligt inuti wrap()-funktionen fรถr att kontrollera grafens estetik (dvs storlek=0.1, alfa=0.3)
  • kartaping = aes(fรคrg = barn_fac): Vi vill att varje del av grafen ska staplas av variabeln children_fac, som รคr en kategorisk variabel som tar vรคrdet 1 om hushรฅllet inte har barn och 2 annars

Produktion:

Bivariat analys med ggpair med Grouping

Bivariat analys med ggpair med partiell grouping

Diagrammet nedan รคr lite annorlunda. Vi รคndrar kartans position.ping inuti 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))
)

Code Fรถrklaring

  • Exakt samma kod som fรถregรฅende exempel fรถrutom:
  • kartaping = aes(color = children_fac): Flyttar listan i upper = list(). Vi vill bara ha berรคkningen staplad gruppvis i den รถvre delen av grafen.

Produktion:

Bivariat analys med ggpair med partiell grouping

Sammanfattning

  • Ett bivariat samband beskriver ett samband -eller korrelation- mellan tvรฅ variabler i R.
  • Det finns tvรฅ primรคra metoder fรถr att berรคkna korrelationen mellan tvรฅ variabler i R-programmering: Pearson & Spearman.
  • Pearson-korrelationsmetoden anvรคnds vanligtvis som en primรคr kontroll fรถr sambandet mellan tvรฅ variabler.
  • En rangkorrelation sorterar observationerna efter rangordning och berรคknar graden av likhet mellan rangordningen.
  • Spearmans rangkorrelation, , รคr alltid mellan -1 och 1 med ett vรคrde nรคra extremiteten indikerar starkt samband.
  • En korrelationsmatris รคr en matris som representerar parkorrelationen fรถr alla variabler.
  • Signifikansnivรฅn รคr anvรคndbar i vissa situationer nรคr vi anvรคnder pearson- eller spearmanmetoden.

Vi kan sammanfatta alla korrelationsfunktioner i R i tabellen nedan:

Bibliotek Mรฅl Metod Code
Bas bivariat korrelation Pearson
cor(dfx2, method = "pearson")
Bas bivariat korrelation Spearman
cor(dfx2, method = "spearman")
Bas Multivariat korrelation Pearson
cor(df, method = "pearson")
Bas Multivariat korrelation Spearman
cor(df, method = "spearman")
Hmisc P-vรคrde
rcorr(as.matrix(data[,1:9]))[["P"]]
Ggally vรคrmekarta
ggcorr(df)
Multivariata plotter
cf code below

Sammanfatta detta inlรคgg med: