Korelace v R: Pearson & Spearman with Matrix Příklad

Bivariační vztah popisuje vztah - nebo korelaci - mezi dvěma proměnnými a. V tomto kurzu probereme koncept korelace a ukážeme, jak jej lze použít k měření vztahu mezi libovolnými dvěma proměnnými.

K výpočtu korelace mezi dvěma proměnnými existují dvě primární metody.

  • Pearson: Parametrická korelace
  • Spearman: Neparametrická korelace

V tomto výukovém programu se naučíte

  • Pearsonova korelace
  • Spearman Rank Korelace
  • Korelační matice
  • Vizualizujte korelační matici

Pearsonova korelace

Pearsonova korelační metoda se obvykle používá jako primární kontrola vztahu mezi dvěma proměnnými.

Korelační koeficient , je měřítkem síly lineárního vztahu mezi dvěma proměnnými a. Vypočítává se následovně:

s

  • , tj. směrodatná odchylka
  • , tj. směrodatná odchylka

Korelace se pohybuje mezi -1 a 1.

  • Hodnota blízká nebo rovná 0 znamená malý nebo žádný lineární vztah mezi a.
  • Naproti tomu čím blíže je 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:

Spearman Rank Korelace

Korelační hodnost třídí pozorování podle hodnosti a vypočítává úroveň podobnosti mezi hodnostmi. Výhodou korelační korelace je robustnost vůči odlehlým hodnotám a není spojena s distribucí dat. Všimněte si, že pro řadovou proměnnou je vhodná korelační hodnost.

Spearmanova pozice korelace,, je vždy mezi -1 a 1 s hodnotou blízkou končetině naznačuje silný vztah. Vypočítává se následovně:

s uvedenou kovariancí mezi hodností a. Jmenovatel vypočítá standardní odchylky.

V R můžeme použít funkci cor (). Trvá tři argumenty, a metoda.

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"
    • "kendall"
    • "kopiník"

Pokud vektory obsahují chybějící hodnotu, lze přidat volitelný argument: use = "complete.obs"

Použijeme datovou sadu BudgetUK. Tento datový soubor uvádí rozdělení rozpočtu britských domácností v letech 1980 až 1982. Existuje 1519 pozorování s deseti funkcemi, mezi nimi:

  • wfood: share food share spend
  • wfuel: sdílení výdajů na palivo
  • wcloth: podíl rozpočtu na utrácení oblečení
  • walc: sdílejte výdaje na alkohol
  • wtrans: sdílení výdajů na dopravu
  • wother: podíl výdajů na jiné zboží
  • totexp: celkové výdaje domácnosti v librách
  • příjem celkem čistý příjem domácnosti
  • věk: 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 na funkci glimpse () z knihovny dplyr.
  • Tři body jsou nad 500 kB, proto jsme se rozhodli je vyloučit.
  • Je běžnou praxí převést peněžní proměnnou v logu. Pomáhá snížit dopad odlehlých hodnot a snižuje šikmost v datové sadě.

Výstup:

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

Můžeme vypočítat korelační koeficient mezi proměnnými příjmů a wfood pomocí metod „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

Bivariační korelace je dobrým začátkem, ale pomocí vícerozměrné analýzy můžeme získat širší obraz. Korelace s mnoha proměnnými je zobrazena uvnitř 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ým rozdílem v bivariační korelaci je, že nemusíme specifikovat, které proměnné. Ve výchozím nastavení R vypočítává korelaci mezi všemi proměnnými.

U proměnné faktoru nelze vypočítat korelaci. Než projdeme datovým rámcem uvnitř cor (), musíme se ujistit, že upustíme od kategorické funkce.

Korelační matice je symetrická, což znamená, že hodnoty nad úhlopříčkou mají stejné hodnoty jako níže. Je více vizuální zobrazit polovinu matice.

Vylučujeme children_fac, protože se jedná o proměnnou na úrovni faktoru. cor neprovádí korelaci s kategorickou proměnnou.

# 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

Vysvětlení kódu

  • cor (data): Zobrazí korelační matici
  • zaokrouhlit (data, 2): zaokrouhlit korelační matici dvěma desetinnými místy
  • 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ň důležitosti

Úroveň 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 pro nás vypočítá p-hodnotu. Můžeme stáhnout knihovnu z conda a zkopírovat kód a vložit 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čítáme korelační matici s hodnotou p.

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: hodnota p

Zajímá nás třetí prvek, p-hodnota. Je běžné zobrazit korelační matici s hodnotou p místo korelačního koeficientu.

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

Vysvětlení kódu

  • mat_2 [["P"]]: Hodnoty p jsou uloženy v prvku zvaném P
  • zaokrouhlit (mat_2 [["P"]], 3): Zaokrouhlit prvky třemi číslicemi

Výstup:

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

Vizualizujte korelační matici

Tepelná mapa je dalším způsobem, jak zobrazit korelační matici. Knihovna GGally je příponou ggplot2. V současné době není k dispozici v knihovně conda. Můžeme nainstalovat přímo do konzoly.

install.packages("GGally")

Knihovna obsahuje různé funkce pro zobrazení souhrnných statistik, jako je korelace a distribuce všech proměnných v matici.

Funkce ggcorr () má spoustu argumentů. Představíme 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čítají páry a Pearson
  • nbreaks : Vrátí kategorický rozsah pro zabarvení koeficientů. Ve výchozím nastavení není přerušení a barevný přechod je spojitý
  • číslice : Zaokrouhlete korelační koeficient. Ve výchozím nastavení je nastavena na 2
  • nízké : Ovládá nižší úroveň zbarvení
  • mid : Ovládá střední úroveň zabarvení
  • vysoká : Ovládá vysokou úroveň zabarvení
  • geom : Ovládá tvar geometrického argumentu. Ve výchozím nastavení „dlaždice“
  • štítek : Booleovská hodnota. Zobrazit štítek nebo ne. Ve výchozím nastavení je nastavena hodnota `FALSE`

Základní teplotní mapa

Nejzákladnějším grafem balíčku je tepelná mapa. Legenda grafu ukazuje gradientní barvu od - 1 do 1, přičemž horká barva označuje 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 do grafu zahrnuty.

Výstup:

Přidejte ovládání 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: prolomte legendu 6 řadami.
  • low = "steelblue": Pro negativní korelaci použijte světlejší barvy
  • mid = "white": Pro korelaci středních rozsahů použijte bílé barvy
  • high = "darkred": Pro pozitivní korelaci použijte tmavé barvy
  • geom = "circle": Použijte kruh jako tvar oken v tepelné mapě. Velikost kruhu je úměrná absolutní hodnotě korelace.

Výstup:

Přidejte štítek 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

  • label = TRUE: Přidejte hodnoty koeficientů korelace uvnitř tepelné mapy.
  • color = "grey50": Vyberte barvu, tj. šedou
  • label_size = 3: Nastavit velikost štítku na 3

Výstup:

gpair

Nakonec představíme další funkci z knihovny GGaly. Ggpair. Produkuje graf v maticovém formátu. V jednom grafu můžeme zobrazit tři druhy výpočtu. Matice je dimenze, která se rovná počtu pozorování. Horní / dolní část zobrazuje okna a v úhlopříčce. Můžeme řídit, 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, které chcete nakreslit
  • title : Uveďte název
  • horní : Ovládejte políčka nad úhlopříčkou grafu. Chcete-li se vrátit, musíte zadat typ výpočtu nebo grafu. Pokud spojitý = "cor", požádáme R, aby vypočítal korelaci. Všimněte si, že argument musí být seznam. Lze použít i další argumenty, další informace najdete na [viněta] („http://ggobi.github.io/ggally/#custom_functions“).
  • Dolní : Ovládejte políčka pod úhlopříčkou.
  • Mapování : Označuje estetiku grafu. Například můžeme vypočítat graf pro různé skupiny.

Bivariační analýza s ggpair se seskupením

Následující graf vykresluje tři informace:

  • Korelační matice mezi proměnnými log_totexp, log_income, age a wtrans seskupenými podle toho, zda má domácnost dítě nebo ne.
  • Vykreslete 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

  • columns = c ("log_totexp", "log_income", "age", "wtrans"): Vyberte proměnné, které se mají zobrazit v grafu
  • title = "Bivariační analýza příjmových výdajů britské domácnosti": Přidat název
  • upper = list (): Ovládá horní část grafu. Tj. Nad úhlopříčkou
  • Continuous = wrap ("cor", size = 3)): Vypočítejte korelační koeficient. Zabalíme argument spojitý uvnitř funkce wrap (), abychom ovládali estetiku grafu (tj. Size = 3) -lower = list (): Ovládáme spodní část grafu. Tj Pod úhlopříčkou.
  • Continuous = wrap ("smooth", alpha = 0,3, size = 0,1): Přidejte bodový graf s lineárním trendem. Zabalíme argument spojitý uvnitř funkce wrap () pro ovládání estetiky grafu (tj. Velikost = 0,1, alfa = 0,3)
  • mapping = aes (color = children_fac): Chceme, aby každá část grafu byla skládána pomocí proměnné children_fac, což je kategorická proměnná, která má hodnotu 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ý. Změnili jsme pozici mapování uvnitř horního argumentu.

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 v předchozím příkladu s výjimkou:
  • mapping = aes (color = children_fac): Přesuňte seznam do upper = list (). Chceme pouze výpočet seskupený podle skupiny v horní části grafu.

Výstup:

souhrn

Funkci můžeme shrnout do následující tabulky:

knihovna

Objektivní

metoda

kód

Základna

bivariate korelace

Pearson

cor(dfx2, method = "pearson")

Základna

bivariate 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

Zajímavé články...