Korreláció R-ben: Pearson & Spearman mátrix példával

A kétváltozós kapcsolat két változó közötti kapcsolatot vagy korrelációt ír le, és. Ebben az oktatóanyagban megvitatjuk a korreláció fogalmát, és megmutatjuk, hogyan lehet mérni a két változó közötti kapcsolatot.

Két változó közötti korreláció kiszámítására két elsődleges módszer létezik.

  • Pearson: Parametrikus összefüggés
  • Spearman: Nem paraméteres összefüggés

Ebben az oktatóanyagban megtanulja

  • Pearson-korreláció
  • Spearman rang korreláció
  • Korrelációs mátrix
  • Vizualizálja a korrelációs mátrixot

Pearson-korreláció

A Pearson-korrelációs módszert általában két változó kapcsolatának elsődleges ellenőrzéseként használják.

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

val vel

  • , azaz szórása
  • , azaz szórása

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

  • A 0-hoz közeli vagy azzal egyenlő érték kevés vagy egyáltalán nem lineáris kapcsolatot jelent a és között.
  • Ezzel szemben minél közelebb kerül az 1 vagy -1 értékhez, annál erősebb a lineáris kapcsolat.

Kiszámíthatjuk a t-tesztet az alábbiak szerint, és ellenőrizhetjük az elosztási táblázatot, ha a szabadság mértéke megegyezik:

Spearman rang korreláció

A rangkorreláció rangsor szerint rendezi a megfigyeléseket, és kiszámítja a rang közötti hasonlóság szintjét. A rangkorrelációnak az az előnye, hogy robusztus a kiugró értékekkel szemben, és nem kapcsolódik az adatok eloszlásához. Ne feledje, hogy a rangváltozás alkalmas a rendes változóra.

Spearman rangkorrelációja,, mindig -1 és 1 között van, a végtaghoz közeli érték erős kapcsolatot mutat. Kiszámítása a következőképpen történik:

azzal, hogy megállapították a rang és a kovariancia között. A nevező kiszámítja a szórásokat.

R-ben használhatjuk a cor () függvényt. Három argumentumra, és a módszerre van szükség.

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észletet fogjuk használni. Ez az adatkészlet a brit háztartások 1980 és 1982 közötti költségvetési elosztásáról számol be. 1519 megfigyelés létezik, amelyeknek tíz jellemzője van:

  • wfood: ossza meg az élelmiszer-megosztást
  • wfuel: ossza meg az üzemanyag-kiadásokat
  • wcloth: a ruházati kiadások költségvetési részesedése
  • walc: ossza meg az alkoholköltségeket
  • wtrans: ossza meg a közlekedési kiadásokat
  • wother: az egyéb áruk költése
  • totexp: a háztartások összes kiadása fontban
  • jövedelem összes nettó háztartási jövedelem
  • életkor: a háztartás kora
  • gyermekek: a 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 meghaladja az 500 000-et, ezért úgy döntöttünk, hogy kizárjuk őket.
  • A monetáris változó log-ban történő konvertálása bevett gyakorlat. Segít csökkenteni a kiugró értékek hatását és csökkenti az adatkészlet torzulását.

Kimenet:

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

Kiszámíthatjuk 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.

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

Kimenet:

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

Kimenet:

## [1] -0.2501252 

Korrelációs mátrix

A kétváltozós korreláció jó kezdet, de többváltozós elemzéssel szélesebb képet kaphatunk. A korrelációs mátrix belsejében számos változóval korreláció látható . A korrelációs mátrix olyan mátrix, amely az összes változó párkorrelációját képviseli.

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

Ne feledje, hogy a tényezőváltozóhoz nem lehet korrelációt kiszámítani. Meg kell győződnünk arról, hogy elvetjük-e a kategorikus jellemzőt, mielőtt átadnánk az adatkeretet a cor () belsejében.

A korrelációs mátrix szimmetrikus, ami azt jelenti, hogy az átló fölötti értékek megegyeznek az alábbi értékekkel. Vizuálisabb a mátrix felének megjelenítése.

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

# 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

Kód Magyarázat

  • cor (adatok): Megjeleníti a korrelációs mátrixot
  • kör (adat, 2): Két tizedessel kerekítse a korrelációs mátrixot
  • as.dist (): Csak a második felét mutatja

Kimenet:

## 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őségi szint

A szignifikancia szint bizonyos esetekben hasznos, amikor a pearson vagy a spearman módszert alkalmazzuk. A Hmisc könyvtár rcorr () függvénye kiszámítja számunkra a p-értéket. Letölthetjük a könyvtárat a condából, és átmásolhatjuk a kódot, hogy beillesszük a terminálba:

conda install -c r r-hmisc 

Az rcorr () megköveteli, hogy egy adatkeretet mátrixként tároljon. Korábban átalakíthatjuk adatainkat mátrixsá, 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és száma
  • P: p-érték

A harmadik elem, a p-érték érdekel. Gyakori, hogy a korrelációs mátrixot a p-értékkel mutatjuk be 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
  • kör (mat_2 [["P"]], 3): Az elemeket kerekítse három számjeggyel

Kimenet:

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

Vizualizálja a korrelációs mátrixot

A korrelációs mátrix megmutatásának másik módja a hőtérkép. A GGally könyvtár a ggplot2 kiterjesztése. Jelenleg nem érhető el a társasházi könyvtárban. Telepíthetjük közvetlenül a konzolba.

install.packages("GGally")

A könyvtár különféle 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 ​​egy mátrixban.

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áros és a Pearson kerül kiszámításra
  • nbreaks : Visszaad egy kategorikus tartományt az együtthatók színéhez . Alapértelmezés szerint nincs törés és a színátmenet folyamatos
  • számjegyek : A korrelációs együttható kerekítése. Alapértelmezés szerint 2-re áll
  • alacsony : szabályozza a szín alsó szintjét
  • közepe : A színezés középső szintjének szabályozása
  • magas : A színezés magas szintjének szabályozása
  • geom : A geometriai argumentum alakjának szabályozása. Alapértelmezés szerint "csempe"
  • címke : Boole-érték. Megjeleníti a címkét vagy sem. Alapértelmezés szerint a „FALSE” értékre van állítva

Alapvető hőtérkép

A csomag legalapvetőbb ábrája egy hőtérkép. A grafikon jelmagyarázata gradiens színt mutat - 1 és 1 között, a forró szín jelzi az erős pozitív korrelációt, a hideg szín pedig a negatív korrelációt.

library(GGally)ggcorr(data)

Kód Magyarázat

  • ggcorr (adatok): Csak egy argumentumra van szükség, amely az adatkeret neve. A tényező szintű változókat a diagram nem tartalmazza.

Kimenet:

Adja hozzá az irányítást a hőtérképhez

További vezérlőket adhatunk a grafikonhoz.

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

Kód Magyarázat

  • nbreaks = 6: szakítsa meg a legendát 6 ranggal.
  • alacsony = "acélkék": Világosabb színeket használjon a negatív korrelációhoz
  • mid = "white": Használjon fehér színeket a középtartományok korrelációjához
  • high = "darkred": Használjon sötét színeket a pozitív korrelációhoz
  • 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.

Kimenet:

Adjon címkét a hőtérképhez

A GGally lehetővé teszi számunkra, hogy címkét adjunk az ablakok belsejébe.

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

Kód Magyarázat

  • label = TRUE: Adja hozzá a korrelációs együtthatók értékeit a hőtérképen belül.
  • color = "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-nak

Kimenet:

ggpairs

Végül bemutatunk egy másik funkciót a GGaly könyvtárból. Ggpair. Mátrix formátumú grafikont állít elő. Háromféle számítást tudunk megjeleníteni egy grafikonon belül. A mátrix egy dimenzió, megegyezik a megfigyelések számával. A felső / alsó rész az ablakokat és az átlót mutatja. Ellenőrizhetjük, hogy a mátrix egyes részeiben milyen információkat akarunk 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 megrajzolásához
  • cím : Tartalmazzon címet
  • felső : Vezesse a mezőket az ábra átlója felett. A visszatéréshez meg kell adnia a számítások vagy a grafikon típusát. Ha folytonos = "cor", akkor megkérjük R-t, hogy számolja ki a korrelációt. Vegye figyelembe, hogy az argumentumnak listának kell lennie. Egyéb argumentumok is használhatók, további információkért lásd: [matrica] ("http://ggobi.github.io/ggally/#custom_functions").
  • Alsó : Vezesse át az átló alatti dobozokat.
  • Térképezés : A grafikon esztétikáját jelzi. Kiszámíthatjuk például 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 korrelációs mátrix a log_totexp, a log_income, az életkor és a wtrans változó között, csoportosítva, hogy a háztartásban van-e gyerek.
  • Ábrázolja az egyes változók csoportonkénti megoszlását
  • Jelenítse meg a szórási diagramot a trendekkel 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": Adjon címet
  • felső = lista (): A grafikon felső részének vezérlése. Vagyis az átló felett
  • folyamatos = burkolás ("cor", méret = 3)): Számítsa ki a korrelációs együtthatót. A folytonos argumentumot a wrap () függvénybe csomagoljuk, hogy ellenőrizzük a gráf esztétikáját (azaz méret = 3) - alsó = lista (): Vezéreljük a grafikon alsó részét. Vagyis Az átló alatt.
  • folytonos = burkolás ("sima", alfa = 0,3, méret = 0,1): Adjon hozzá egy lineáris trenddel rendelkező szóródási diagramot. A folytonos argumentumot a wrap () függvénybe csomagoljuk, hogy ellenőrizzük a gráf esztétikáját (azaz méret = 0,1, alfa = 0,3)
  • mapping = aes (color = children_fac): Azt akarjuk, hogy a gráf minden egyes részét a children_fac változó halmozza, amely egy kategorikus változó, amely 1 értéket vesz fel, ha a háztartásban nincs gyerek, és 2 különben

Kimenet:

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

Az alábbi grafikon kicsit más. Megváltoztatjuk a leképezés helyzetét a felső argumentumon belül.

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

  • Pontos kód, mint az előző példában, kivéve:
  • mapping = aes (color = children_fac): Mozgassa a listát a felső = list () mezőbe. Csak azt akarjuk, hogy a számítás csoportonként halmozott legyen a grafikon felső részében.

Kimenet:

Összegzés

Az alábbi táblázatban összefoglalhatjuk a függvényt:

könyvtár

Célkitűzés

módszer

kód

Bázis

kétváltozós összefüggés

Pearson

cor(dfx2, method = "pearson")

Bázis

kétváltozós összefüggés

Dárdás

cor(dfx2, method = "spearman")

Bázis

Többváltozós összefüggés

Pearson

cor(df, method = "pearson")

Bázis

Többváltozós összefüggés

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 parcellák

cf code below

érdekes cikkek...