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:
dolgoztam, ahol az
- , azaz szórása
- , 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:
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:
-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")
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:
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:
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:
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 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:
Ö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 |