Korelace v R: Pearson & Spearman Correlation Matrix
Dvourozměrná korelace v R
Dvourozměrný vztah popisuje vztah – nebo korelaci – mezi dvěma proměnnými v R. V tomto tutoriálu probereme koncept korelace a ukážeme, jak jej lze použít k měření vztahu mezi libovolnými dvěma proměnnými v R.
Korelace v R programování
Existují dvě primární metody pro výpočet korelace mezi dvěma proměnnými v programování R:
- Pearson: Parametrická korelace
- Spearman: Neparametrická korelace
Pearsonova korelační matice v R
Pearsonova korelační metoda se obvykle používá jako primární kontrola vztahu mezi dvěma proměnnými.
Jedno koeficient korelace, , je měřítkem síly lineární vztah mezi dvěma proměnnými a . Vypočítá se následovně:
s
, tj. směrodatná odchylka
, tj. směrodatná odchylka
Korelace se pohybuje mezi -1 a 1.
- Hodnota blízká nebo rovna 0 implikuje malý nebo žádný lineární vztah mezi a .
- Naproti tomu čím blíže k 1 nebo -1, tím silnější je lineární vztah.
Můžeme vypočítat t-test následovně a zkontrolovat distribuční tabulku se stupněm volnosti rovným:
Korelace hodnosti Spearmana v R
Pořadová korelace třídí pozorování podle pořadí a vypočítává úroveň podobnosti mezi pořadím. Pořadová korelace má tu výhodu, že je robustní vůči odlehlým hodnotám a není spojena s distribucí dat. Všimněte si, že pro ordinální proměnnou je vhodná korelace pořadí.
Spearmanova hodnostní korelace, , je vždy mezi -1 a 1 s hodnotou blízkou extrému označuje silný vztah. Vypočítá se následovně:
s uvedenou kovariancí mezi hodností a . Jmenovatel vypočítá směrodatné odchylky.
V R můžeme použít funkci cor(). Vyžaduje tři argumenty, a metodu.
cor(x, y, method)
Argumenty:
- x: První vektor
- y: Druhý vektor
- metoda: Vzorec použitý k výpočtu korelace. Tři hodnoty řetězce:
- "pearson"
- "kendal"
- "kopiník"
Pokud vektory obsahují chybějící hodnotu, lze přidat volitelný argument: use = “complete.obs”
Použijeme datovou sadu BudgetUK. Tento soubor údajů uvádí rozpočtové alokace britských domácností v letech 1980 až 1982. Existuje 1519 pozorování s deseti rysy, mezi nimi:
- wfood: sdílet jídlo sdílet utrácet
- wfuel: podíl na útratě paliva
- wcloth: podíl rozpočtu na výdaje na oblečení
- walc: sdílet alkohol utrácet
- wtrans: sdílet výdaje na dopravu
- wother: podíl na útratě ostatního zboží
- totexp: celkové výdaje domácnosti v librách
- příjem: celkový čistý příjem domácnosti
- stáří: věk domácnosti
- děti: počet dětí
Příklad
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)
Vysvětlení kódu
- Nejprve importujeme data a podíváme se pomocí funkce glimpse() z knihovny dplyr.
- Tři body jsou nad 500 XNUMX, takže jsme se rozhodli je vyloučit.
- Je běžnou praxí převádět peněžní proměnnou v log. Pomáhá snížit dopad odlehlých hodnot a snižuje zkreslení datové sady.
Výstup:
## 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, ...
Korelační koeficient mezi příjmovými a wfood proměnnými můžeme vypočítat metodami „pearson“ a „spearman“.
cor(data$log_income, data$wfood, method = "pearson")
Výstup:
## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")
Výstup:
## [1] -0.2501252
Korelační matice v R
Dvourozměrná korelace je dobrý začátek, ale pomocí vícerozměrné analýzy můžeme získat širší obrázek. Korelace s mnoha proměnnými je zobrazena uvnitř a korelační matice. Korelační matice je matice, která představuje párovou korelaci všech proměnných.
Funkce cor() vrací korelační matici. Jediný rozdíl oproti bivariační korelaci je, že nemusíme specifikovat, které proměnné. Ve výchozím nastavení R počítá korelaci mezi všemi proměnnými.
Všimněte si, že pro proměnnou faktoru nelze vypočítat korelaci. Než předáme datový rámec uvnitř cor(), musíme se ujistit, že vynecháme kategorický prvek.
Korelační matice je symetrická, což znamená, že hodnoty nad úhlopříčkou mají stejné hodnoty jako ta níže. Vizuálnější je zobrazit polovinu matice.
Děti_fac vylučujeme, protože se jedná o proměnnou na úrovni faktoru. cor neprovádí korelaci na kategorické proměnné.
# 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
Vysvětlení kódu
- cor(data): Zobrazení korelační matice
- kolo(data, 2): Zaokrouhlete korelační matici na dvě desetinná místa
- as.dist(): Zobrazuje pouze druhou polovinu
Výstup:
## 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
Úroveň významnosti
Hladina významnosti je užitečná v některých situacích, kdy používáme metodu pearson nebo spearman. Funkce rcorr() z knihovny Hmisc nám vypočítá p-hodnotu. Knihovnu si můžeme stáhnout z Conda a zkopírujte kód a vložte jej do terminálu:
conda install -c r r-hmisc
rcorr() vyžaduje, aby byl datový rámec uložen jako matice. Můžeme převést naše data do matice předtím, než vypočítat korelační matici s p-hodnotou.
library("Hmisc") data_rcorr <-as.matrix(data[, 1: 9]) mat_2 <-rcorr(data_rcorr) # mat_2 <-rcorr(as.matrix(data)) returns the same output
Objekt seznamu mat_2 obsahuje tři prvky:
- r: Výstup korelační matice
- n: Počet pozorování
- P: p-hodnota
Zajímá nás třetí prvek, p-hodnota. Je běžné ukazovat korelační matici s p-hodnotou namísto korelačního koeficientu.
p_value <-round(mat_2[["P"]], 3) p_value
Vysvětlení kódu
- mat_2[[“P”]]: P-hodnoty jsou uloženy v prvku zvaném P
- kolo(mat_2[[“P”]], 3): Zaokrouhlete prvky na tři číslice
Výstup:
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
Vizualizace korelační matice v R
Tepelná mapa je další způsob, jak zobrazit korelační matici. Knihovna GGally je rozšířením ggplot2. V současné době není k dispozici v knihovně conda. Můžeme nainstalovat přímo do konzole.
install.packages("GGally")
Knihovna obsahuje různé funkce pro zobrazení souhrnných statistik, jako je korelace a distribuce všech proměnných v a matice.
Funkce ggcorr() má spoustu argumentů. Uvedeme pouze argumenty, které použijeme v tutoriálu:
Funkce ggcorr
ggcorr(df, method = c("pairwise", "pearson"), nbreaks = NULL, digits = 2, low = "#3B9AB2", mid = "#EEEEEE", high = "#F21A00", geom = "tile", label = FALSE, label_alpha = FALSE)
argumenty:
- df: Použitá datová sada
- metoda: Vzorec pro výpočet korelace. Ve výchozím nastavení se počítá párově a Pearson
- nbreaks: Vrátí kategorický rozsah pro zabarvení koeficientů. Ve výchozím nastavení bez přerušení a barevný přechod je souvislý
- číslice: Zaokrouhlete korelační koeficient. Ve výchozím nastavení nastavte na 2
- nízký: Ovládání nižší úrovně zabarvení
- střední: Ovládání střední úrovně zabarvení
- vysoký: Ovládání vysoké úrovně zabarvení
- geom: Ovládání tvaru geometrického argumentu. Ve výchozím nastavení „dlaždice“
- štítek: Booleovská hodnota. Zobrazit nebo nezobrazit štítek. Ve výchozím nastavení je nastaveno na `FALSE`
Základní tepelná mapa
Nejzákladnější zápletkou balíčku je tepelná mapa. Legenda grafu ukazuje barvu gradientu od – 1 do 1, přičemž horká barva indikuje silnou pozitivní korelaci a studená barva, negativní korelaci.
library(GGally) ggcorr(data)
Vysvětlení kódu
- ggcorr(data): Je potřeba pouze jeden argument, kterým je název datového rámce. Proměnné na úrovni faktoru nejsou v grafu zahrnuty.
Výstup:
Přidání kontroly do tepelné mapy
Do grafu můžeme přidat další ovládací prvky:
ggcorr(data, nbreaks = 6, low = "steelblue", mid = "white", high = "darkred", geom = "circle")
Vysvětlení kódu
- nbreaks=6: rozbít legendu se 6 pozicemi.
- nízká = „ocelově modrá“: Použijte světlejší barvy pro negativní korelaci
- střední = „bílá“: Pro korelaci středních rozsahů použijte bílé barvy
- vysoký = „tmavý“: Použijte tmavé barvy pro pozitivní korelaci
- geom = "kruh": Použijte kruh jako tvar oken v tepelné mapě. Velikost kruhu je úměrná absolutní hodnotě korelace.
Výstup:
Přidání štítku do tepelné mapy
GGally nám umožňuje přidat štítek do oken:
ggcorr(data, nbreaks = 6, label = TRUE, label_size = 3, color = "grey50")
Vysvětlení kódu
- štítek = PRAVDA: Přidejte hodnoty korelačních koeficientů uvnitř tepelné mapy.
- barva = "šedá50": Vyberte barvu, tj. šedou
- velikost_štítku = 3: Nastavte velikost štítku na 3
Výstup:
Funkce ggpairs
Na závěr si představíme další funkci z knihovny GGaly. Ggpair. Vytváří graf v maticovém formátu. V rámci jednoho grafu můžeme zobrazit tři druhy výpočtů. Matice je dimenze, jejíž počet se rovná počtu pozorování. Horní/spodní část zobrazuje okna a v diagonále. Můžeme ovládat, jaké informace chceme zobrazit v každé části matice. Vzorec pro ggpair je:
ggpair(df, columns = 1: ncol(df), title = NULL, upper = list(continuous = "cor"), lower = list(continuous = "smooth"), mapping = NULL)
argumenty:
- df: Použitá datová sada
- sloupce: Vyberte sloupce pro kreslení grafu
- titul: Vložit název
- horní: Ovládejte políčka nad úhlopříčkou pozemku. Potřebujete dodat typ výpočtů nebo grafu, který chcete vrátit. Je-li spojité = „cor“, požádáme R, aby vypočítal korelaci. Všimněte si, že argumentem musí být seznam. Lze použít i jiné argumenty, další informace naleznete na [vinětě](“http://ggobi.github.io/ggally/#custom_functions”).
- Spodní: Ovládejte políčka pod úhlopříčkou.
- Mapování: Označuje estetiku grafu. Například můžeme vypočítat graf pro různé skupiny.
Dvourozměrná analýza s ggpair se seskupováním
Následující graf zobrazuje tři informace:
- Korelační matice mezi proměnnými log_totexp, log_income, věk a wtrans seskupené podle toho, zda má domácnost dítě nebo ne.
- Nakreslete distribuci každé proměnné podle skupiny
- Zobrazte bodový graf s trendem podle skupiny
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))
Vysvětlení kódu
- sloupce = c(“log_totexp”, “log_income”, “age”, “wtrans”): Vyberte proměnné, které se mají zobrazit v grafu
- title = „Bivariační analýza výdajů na příjmy britské domácnosti“: Přidejte název
- horní = seznam(): Ovládání horní části grafu. Tj. Nad úhlopříčkou
- kontinuální = wrap(“cor”, velikost = 3)): Vypočtěte korelační koeficient. Argument spojitě zabalíme do funkce wrap() pro kontrolu estetiky grafu (tj. velikost = 3) -lower = list(): Ovládání spodní části grafu. Tj. pod úhlopříčkou.
- kontinuální = obal (“hladký”, alfa = 0.3, velikost=0.1): Přidá bodový graf s lineárním trendem. Argument spojitý zabalíme do funkce wrap(), abychom ovládali estetiku grafu (tj. velikost=0.1, alfa=0.3)
- mapování = aes(barva = children_fac): Chceme, aby každá část grafu byla naskládána proměnnou children_fac, což je kategorická proměnná nabývající hodnoty 1, pokud domácnost nemá děti, a 2 jinak
Výstup:
Bivariační analýza s ggpair s částečným seskupením
Níže uvedený graf je trochu jiný. Uvnitř horního argumentu změníme pozici mapování.
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)) )
Vysvětlení kódu
- Přesně stejný kód jako předchozí příklad s výjimkou:
- mapping = aes(color = children_fac): Přesune seznam v horní = list(). Chceme pouze výpočet naskládaný podle skupin v horní části grafu.
Výstup:
Shrnutí
- Dvourozměrný vztah popisuje vztah – nebo korelaci – mezi dvěma proměnnými v R.
- Existují dvě primární metody pro výpočet korelace mezi dvěma proměnnými v R Programování: Pearson & Spearman.
- Pearsonova korelační metoda se obvykle používá jako primární kontrola vztahu mezi dvěma proměnnými.
- Pořadová korelace třídí pozorování podle pořadí a vypočítává úroveň podobnosti mezi pořadím.
- Spearmanova hodnostní korelace, , je vždy mezi -1 a 1 s hodnotou blízkou extrému označuje silný vztah.
- Korelační matice je matice, která představuje párovou korelaci všech proměnných.
- Hladina významnosti je užitečná v některých situacích, kdy používáme metodu pearson nebo spearman.
Všechny korelační funkce v R můžeme shrnout v tabulce níže:
Knihovna | Objektivní | Metoda | Kód |
---|---|---|---|
Základna | bivariační korelace | Pearson |
cor(dfx2, method = "pearson") |
Základna | bivariační korelace | Spearman |
cor(dfx2, method = "spearman") |
Základna | Vícerozměrná korelace | Pearson |
cor(df, method = "pearson") |
Základna | Vícerozměrná korelace | Spearman |
cor(df, method = "spearman") |
Hmisc | Hodnota P |
rcorr(as.matrix(data[,1:9]))[["P"]] |
|
Ggally | teplotní mapa |
ggcorr(df) |
|
Vícerozměrné grafy |
cf code below |