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ě:

Pearsonova korelační matice v R

s

  • Pearsonova korelační matice v R, tj. směrodatná odchylka
  • Pearsonova korelační matice v R, 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:

Pearsonova korelační matice v R

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ě:

Korelace hodnosti Spearmana v R

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

Vizualizace korelační matice

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:

Základní tepelná mapa

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í kontroly do tepelné mapy

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:

Přidání štítku do tepelné mapy

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:

Dvourozměrná analýza s ggpair se seskupením

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:

Dvourozměrná analýza s ggpair s částečným seskupením

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