Korreláció az R: Pearson & Spearman korrelációs mátrixban

Kétváltozós korreláció az R-ben

A kétváltozós kapcsolat az R két változója közötti kapcsolatot -vagy korrelációt- írja le. Ebben az oktatóanyagban a korreláció fogalmát tárgyaljuk, és bemutatjuk, hogyan használható az R-beli két változó közötti kapcsolat mérésére.

Korreláció az R programozásban

Két elsődleges módszer létezik a két változó közötti korreláció kiszámítására az R programozásban:

  • Pearson: Paraméteres korreláció
  • Dárdás: Nem paraméteres korreláció

Pearson korrelációs mátrix az R

A Pearson korrelációs módszert általában a két változó közötti kapcsolat elsődleges ellenőrzésére használják.

A korrelációs együttható, , az erősségének mértéke lineáris kapcsolat két változó és . Kiszámítása a következőképpen történik:

Pearson korrelációs mátrix az R

dolgoztam, ahol az

  • Pearson korrelációs mátrix az R, azaz szórása
  • Pearson korrelációs mátrix az R, azaz szórása

A korreláció -1 és 1 között van.

  • A 0-hoz közeli vagy azzal egyenlő érték kevés vagy semmilyen lineáris kapcsolatot jelent és között.
  • Ezzel szemben minél közelebb van az 1-hez vagy -1-hez, annál erősebb a lineáris kapcsolat.

Kiszámíthatjuk a t-próbát a következőképpen, és ellenőrizhetjük az eloszlási táblát a következő szabadságfokkal:

Pearson korrelációs mátrix az R

Spearman rangkorreláció az R-ben

A rangkorreláció rang szerint rendezi a megfigyeléseket, és kiszámítja a rangsor közötti hasonlóság szintjét. A rangkorrelációnak megvan az az előnye, hogy robusztus a kiugró értékekre, és nem kapcsolódik az adatok eloszlásához. Megjegyezzük, hogy a rangkorreláció alkalmas az ordinális változóra.

A Spearman-féle rangkorreláció mindig -1 és 1 között van, a végponthoz közeli érték pedig erős kapcsolatot jelez. Kiszámítása a következőképpen történik:

Spearman rangkorreláció az R-ben

-val a rang és a közötti kovariancia megadása. A nevező kiszámítja a szórásokat.

R-ben használhatjuk a cor() függvényt. Ehhez három argumentum, , és a metódus szükséges.

cor(x, y, method)

érvek:

  • x: Első vektor
  • y: Második vektor
  • módszer: A korreláció kiszámításához használt képlet. Három karakterlánc érték:
    • "pearson"
    • "kendall"
    • "dárdás"

Opcionális argumentum hozzáadható, ha a vektorok hiányzó értéket tartalmaznak: use = “complete.obs”

A BudgetUK adatkészletét fogjuk használni. Ez az adatkészlet a brit háztartások költségvetési allokációját mutatja be 1980 és 1982 között. 1519 megfigyelés van tíz jellemzővel, köztük:

  • wfood: ossz meg ételt osztj el
  • wüzemanyag: oszd meg az üzemanyagköltést
  • wcruha: költségvetési rész a ruházati kiadásokra
  • walc: oszd meg az alkoholfogyasztást
  • wtrans: ossza meg a szállítási kiadásokat
  • anya: egyéb javakra fordított arány
  • totexp: teljes háztartási kiadás fontban
  • jövedelem: teljes nettó háztartási jövedelem
  • kor: háztartás kora
  • gyerekek: Gyermekek száma

Példa

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)

Kód Magyarázat

  • Először importáljuk az adatokat, és megnézzük a glimpse() függvényt a dplyr könyvtárból.
  • Három pont 500K felett van, ezért úgy döntöttünk, hogy kizárjuk őket.
  • Általános gyakorlat, hogy egy monetáris változót logban konvertálnak. Segít csökkenteni a kiugró értékek hatását, és csökkenti az adatkészlet ferdeségét.

output:

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

A jövedelem és a wfood változók közötti korrelációs együtthatót a „pearson” és a „spearman” módszerekkel tudjuk kiszámítani.

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

output:

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

output:

## [1] -0.2501252

Korrelációs mátrix az R-ben

A kétváltozós korreláció jó kezdet, de többváltozós elemzéssel tágabb képet kaphatunk. Egy sok változós korreláció látható a az a belsejében korrelációs mátrix. A korrelációs mátrix egy olyan mátrix, amely az összes változó páros korrelációját reprezentálja.

A cor() függvény egy korrelációs mátrixot ad vissza. Az egyetlen különbség a kétváltozós korrelációval szemben, hogy nem kell megadnunk, mely változókat. Alapértelmezés szerint az R kiszámítja az összes változó közötti korrelációt.

Vegye figyelembe, hogy a korreláció nem számítható ki faktorváltozóra. Meg kell győződnünk arról, hogy eldobjuk a kategorikus jellemzőket, mielőtt átadnánk az adatkeretet a cor()-on belül.

A korrelációs mátrix szimmetrikus, ami azt jelenti, hogy az átló feletti értékek megegyeznek az alábbi értékekkel. Vizuálisabb a mátrix felét megjeleníteni.

Kizárjuk a children_fac-ot, mert ez egy faktorszintű változó. cor nem végez korrelációt kategorikus változón.

# 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

Kód Magyarázat

  • cor(adat): A korrelációs mátrix megjelenítése
  • forduló (adat, 2): A korrelációs mátrixot kerekítse két tizedesjegyre
  • as.dist(): Csak a második félidőt mutatja

output:

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

Jelentősségi szint

A szignifikancia szint hasznos bizonyos helyzetekben, amikor a Pearson vagy Spearman módszert használjuk. Az rcorr() függvény a Hmisc könyvtárból kiszámolja nekünk a p-értéket. A könyvtárat innen tudjuk letölteni megye és másolja ki a kódot, hogy beillessze a terminálba:

conda install -c r r-hmisc

Az rcorr() egy adatkeretet igényel mátrixként. Adatainkat korábban mátrixmá alakíthatjuk, hogy kiszámítsuk a korrelációs mátrixot a p-értékkel.

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

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

A mat_2 listaobjektum három elemet tartalmaz:

  • r: A korrelációs mátrix kimenete
  • n: Megfigyelések száma
  • P: p-érték

Minket a harmadik elem, a p-érték érdekel. Gyakori, hogy a korrelációs mátrixot a p-értékkel tüntetik fel a korrelációs együttható helyett.

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

Kód Magyarázat

  • mat_2[["P"]]: A p-értékeket a P nevű elem tárolja
  • round(mat_2[["P"]], 3): Az elemek kerekítése három számjeggyel

output:

           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

A korrelációs mátrix megjelenítése R-ben

A hőtérkép egy másik módja a korrelációs mátrix megjelenítésének. A GGally könyvtár a ggplot2 kiterjesztése. Jelenleg nem érhető el a conda könyvtárban. Közvetlenül a konzolba telepíthetjük.

install.packages("GGally")

Vizualizáló korrelációs mátrix

A könyvtár különböző funkciókat tartalmaz az összefoglaló statisztikák megjelenítésére, mint például az összes változó korrelációja és eloszlása. mátrix.

A ggcorr() függvénynek sok argumentuma van. Csak azokat az érveket mutatjuk be, amelyeket az oktatóanyagban használunk:

A ggcorr függvény

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

érvek:

  • df: Használt adatkészlet
  • módszer: Képlet a korreláció kiszámításához. Alapértelmezés szerint a páronkénti és a Pearson kiszámítása történik
  • nbreaks: Egy kategorikus tartományt ad vissza az együtthatók színezésére. Alapértelmezés szerint nincs törés, és a színátmenet folyamatos
  • számjegy: A korrelációs együttható kerekítése. Alapértelmezés szerint állítsa 2-re
  • alacsony: A színezés alsó szintjének szabályozása
  • középső: A színezés középső szintjének szabályozása
  • nagy: A színezés magas szintjének szabályozása
  • geom: A geometriai argumentum alakjának szabályozása. Alapértelmezés szerint „mozaik”
  • címke: Logikai érték. Megjeleníteni vagy sem a címkét. Alapértelmezés szerint állítsa 'HAMIS' értékre

Alap hőtérkép

A csomag legalapvetőbb rajza egy hőtérkép. A grafikon jelmagyarázata gradiens színt mutat – 1-től 1-ig, a meleg szín erős pozitív korrelációt, a hideg szín pedig a negatív korrelációt jelzi.

library(GGally)
ggcorr(data)

Kód Magyarázat

  • ggcorr(adat): Csak egy argumentum szükséges, ez az adatkeret neve. A faktorszintű változók nem szerepelnek a diagramban.

output:

Alap hőtérkép

Vezérlés hozzáadása a hőtérképhez

További vezérlőelemeket adhatunk a grafikonhoz:

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

Kód Magyarázat

  • nbreaks=6: törd meg a legendát 6 ranggal.
  • alacsony = „acélkék”: Negatív korrelációhoz használjon világosabb színeket
  • közép = "fehér": Használjon fehér színeket a középső tartományok korrelációjához
  • magas = "sötét": Pozitív korrelációhoz használjon sötét színeket
  • geom = "kör": Használja a kört az ablakok alakjaként a hőtérképen. A kör mérete arányos a korreláció abszolút értékével.

output:

Vezérlés hozzáadása a hőtérképhez

Címke hozzáadása a hőtérképhez

A GGally lehetővé teszi, hogy címkét adjunk hozzá az ablakokhoz:

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

Kód Magyarázat

  • címke = IGAZ: Adja hozzá a hőtérképen belüli korrelációs együtthatók értékeit.
  • szín = "grey50": Válassza ki a színt, azaz a szürkét
  • label_size = 3: Állítsa be a címke méretét 3-ra

output:

Címke hozzáadása a hőtérképhez

A ggpairs függvény

Végül bemutatunk egy másik funkciót a GGaly könyvtárból. Ggpair. Egy grafikont hoz létre mátrix formátumban. Egy grafikonon belül háromféle számítást tudunk megjeleníteni. A mátrix egy dimenzió, amely egyenlő a megfigyelések számával. A felső/alsó rész ablakokat és átlósan jelenít meg. Szabályozhatjuk, hogy a mátrix egyes részeiben milyen információkat szeretnénk megjeleníteni. A ggpair képlete:

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

érvek:

  • df: Használt adatkészlet
  • oszlopok: Válassza ki az oszlopokat a diagram rajzolásához
  • cím: Adjon meg egy címet
  • felső: Irányítsd a mezőket a telek átlója felett. Meg kell adnia a számítások típusát vagy a visszatéréshez szükséges grafikont. Ha folytonos = „cor”, akkor megkérjük R-t, hogy számítsa ki a korrelációt. Vegye figyelembe, hogy az argumentumnak listának kell lennie. Más argumentumok is használhatók, további információért tekintse meg a [vignette] („http://ggobi.github.io/ggally/#custom_functions”) részt.
  • Alsó: Az átló alatti mezők vezérlése.
  • Mapping: A grafikon esztétikáját jelzi. Például kiszámíthatjuk a grafikont különböző csoportokhoz.

Kétváltozós elemzés ggpair-rel csoportosítással

A következő grafikon három információt ábrázol:

  • A log_totexp, log_income, kor és wtrans változó közötti korrelációs mátrix, csoportosítva, hogy a háztartásnak van-e gyereke vagy sem.
  • Ábrázolja az egyes változók csoportonkénti eloszlását!
  • Jelenítse meg a szórásdiagramot a trenddel csoportonként
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))

Kód Magyarázat

  • oszlopok = c("log_totexp", "log_income", "age", "wtrans"): Válassza ki a grafikonon megjelenítendő változókat
  • title = „A brit háztartás bevételi kiadásainak kétváltozós elemzése”: Cím hozzáadása
  • felső = lista(): A grafikon felső részének vezérlése. Azaz az átló felett
  • folyamatos = becsomagolás ("cor", méret = 3)): Számítsa ki a korrelációs együtthatót. Az argumentumot a wrap() függvényben folytonosan becsomagoljuk, hogy ellenőrizzük a gráf esztétikáját (azaz méret = 3) -lower = list(): A gráf alsó részét szabályozzuk. Azaz az átló alatt.
  • folyamatos = becsomagolás ("sima", alfa = 0.3, méret = 0.1): Lineáris trenddel rendelkező szóródiagram hozzáadása. Az argumentumot a wrap() függvényen belül folyamatosan csomagoljuk, hogy ellenőrizzük a gráf esztétikáját (azaz size=0.1, alfa=0.3).
  • leképezés = aes(szín = children_fac): Azt akarjuk, hogy a grafikon minden részét a children_fac változó halmozza fel, amely egy kategorikus változó, amelynek értéke 1, ha a háztartásnak nincs gyereke, és 2 értéket egyébként.

output:

Kétváltozós elemzés ggpair-rel csoportosítással

Kétváltozós elemzés ggpair-rel részleges csoportosítással

Az alábbi grafikon egy kicsit más. Megváltoztatjuk a leképezés pozícióját a felső argumentumban.

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

Kód Magyarázat

  • Pontosan ugyanaz a kód, mint az előző példában, kivéve:
  • mapping = aes(color = children_fac): A lista mozgatása a felső = list() pontban. Csak azt szeretnénk, hogy a számítás a gráf felső részében csoportonként legyen halmozottan.

output:

Kétváltozós elemzés ggpair-rel részleges csoportosítással

Összegzésként

  • A kétváltozós kapcsolat az R két változója közötti kapcsolatot - vagy korrelációt - írja le.
  • Két elsődleges módszer létezik a két változó közötti korreláció kiszámítására R programozás: Pearson & Spearman.
  • A Pearson korrelációs módszert általában a két változó közötti kapcsolat elsődleges ellenőrzésére használják.
  • A rangkorreláció rang szerint rendezi a megfigyeléseket, és kiszámítja a rangsor közötti hasonlóság szintjét.
  • A Spearman-féle rangkorreláció mindig -1 és 1 között van, a végponthoz közeli érték pedig erős kapcsolatot jelez.
  • A korrelációs mátrix egy olyan mátrix, amely az összes változó páros korrelációját reprezentálja.
  • A szignifikancia szint hasznos bizonyos helyzetekben, amikor a Pearson vagy Spearman módszert használjuk.

Az R-ben szereplő összes korrelációs függvényt az alábbi táblázatban foglalhatjuk össze:

könyvtár Objektív Módszer Kód
Bázis kétváltozós korreláció Pearson
cor(dfx2, method = "pearson")
Bázis kétváltozós korreláció Dárdás
cor(dfx2, method = "spearman")
Bázis Többváltozós korreláció Pearson
cor(df, method = "pearson")
Bázis Többváltozós korreláció Dárdás
cor(df, method = "spearman")
Hmisc P érték
rcorr(as.matrix(data[,1:9]))[["P"]]
Ggally hőtérkép
ggcorr(df)
Többváltozós telkek
cf code below