Корелация в R: корелационна матрица на Pearson & Spearman

Двумерна корелация в R

Двумерната връзка описва връзка - или корелация - между две променливи в R. В този урок ще обсъдим концепцията за корелация и ще покажем как тя може да се използва за измерване на връзката между две променливи в R.

Корелация в R програмирането

Има два основни метода за изчисляване на корелацията между две променливи в R програмирането:

  • Pearson: Параметрична корелация
  • копиеносец: Непараметрична корелация

Корелационна матрица на Pearson в R

Корелационният метод на Pearson обикновено се използва като основна проверка за връзката между две променливи.

- коефициент на корелация, , е мярка за силата на линеен връзката между две променливи и . Изчислява се както следва:

Корелационна матрица на Pearson в R

с

  • Корелационна матрица на Pearson в R, т.е. стандартно отклонение на
  • Корелационна матрица на Pearson в R, т.е. стандартно отклонение на

Корелацията варира между -1 и 1.

  • Стойност, близка или равна на 0, предполага малка или никаква линейна връзка между и.
  • За разлика от това, колкото по-близо е до 1 или -1, толкова по-силна е линейната връзка.

Можем да изчислим t-теста, както следва, и да проверим таблицата на разпределението със степен на свобода, равна на:

Корелационна матрица на Pearson в R

Рангова корелация на Спирман в R

Ранговата корелация сортира наблюденията по ранг и изчислява нивото на сходство между ранга. Ранговата корелация има предимството да е стабилна спрямо отклоненията и не е свързана с разпределението на данните. Имайте предвид, че ранговата корелация е подходяща за ординалната променлива.

Ранговата корелация на Spearman, , винаги е между -1 и 1 със стойност, близка до крайната точка, показва силна връзка. Изчислява се както следва:

Рангова корелация на Спирман в R

с посочените ковариации между ранг и . Знаменателят изчислява стандартните отклонения.

В R можем да използваме функцията cor(). Необходими са три аргумента, и методът.

cor(x, y, method)

Аргументи:

  • x: Първи вектор
  • y: Втори вектор
  • метод: Формулата, използвана за изчисляване на корелацията. Три низови стойности:
    • „пиърсън“
    • "кендъл"
    • „копиеносец“

Може да се добави незадължителен аргумент, ако векторите съдържат липсваща стойност: use = “complete.obs”

Ще използваме набора от данни BudgetUK. Този набор от данни отчита бюджетното разпределение на британските домакинства между 1980 и 1982 г. Има 1519 наблюдения с десет характеристики, сред които:

  • wfood: споделяйте храна споделяйте харчете
  • wfuel: споделете разхода на гориво
  • тоалетна кърпа: бюджетен дял за разходи за облекло
  • ходене: споделете харченето на алкохол
  • wtrans: споделете разходите за транспорт
  • майка: дял от разходите за други стоки
  • totexp: общите разходи на домакинството в лири
  • доход: общ нетен доход на домакинството
  • възраст: възраст на домакинството
  • деца: брой деца

Пример

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)

Обяснение на кода

  • Първо импортираме данните и разглеждаме с функцията glimpse() от библиотеката dplyr.
  • Три точки са над 500K, затова решихме да ги изключим.
  • Често срещана практика е парична променлива да се конвертира в log. Помага за намаляване на въздействието на отклоненията и намалява неравномерността в набора от данни.

Изход:

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

Можем да изчислим коефициента на корелация между променливите доход и wfood с методите „pearson“ и „spearman“.

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

Изход:

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

Изход:

## [1] -0.2501252

Корелационна матрица в R

Двумерната корелация е добро начало, но можем да получим по-широка картина с многовариантен анализ. Корелация с много променливи е изобразена вътре в a корелационна матрица. Корелационната матрица е матрица, която представлява двойната корелация на всички променливи.

Функцията cor() връща корелационна матрица. Единствената разлика с двумерната корелация е, че не е необходимо да уточняваме кои променливи. По подразбиране R изчислява корелацията между всички променливи.

Имайте предвид, че не може да се изчисли корелация за факторна променлива. Трябва да сме сигурни, че изпускаме категорична функция, преди да предадем рамката с данни в cor().

Корелационната матрица е симетрична, което означава, че стойностите над диагонала имат същите стойности като тази по-долу. По-визуално е да се покаже половината от матрицата.

Ние изключваме children_fac, защото това е променлива на ниво фактор. cor не извършва корелация на категорична променлива.

# 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

Обяснение на кода

  • кор(данни): Показване на корелационната матрица
  • кръг (данни, 2): Закръглете корелационната матрица с два знака след десетичната запетая
  • as.dist(): Показва само втората половина

Изход:

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

Ниво на значимост

Нивото на значимост е полезно в някои ситуации, когато използваме метода на Pearson или Spearman. Функцията rcorr() от библиотеката Hmisc изчислява вместо нас p-стойността. Можем да изтеглим библиотеката от Conda и копирайте кода, за да го поставите в терминала:

conda install -c r r-hmisc

Rcorr() изисква рамка от данни да бъде съхранена като матрица. Можем да преобразуваме нашите данни в матрица, преди да изчислим корелационната матрица с 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

Списъчният обект mat_2 съдържа три елемента:

  • r: Изход на корелационната матрица
  • n: Брой наблюдение
  • P: p-стойност

Интересуваме се от третия елемент, p-стойността. Обичайно е корелационната матрица да се показва с p-стойността вместо с коефициента на корелация.

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

Обяснение на кода

  • mat_2[[“P”]]: p-стойностите се съхраняват в елемента, наречен P
  • кръгъл (mat_2[[“P”]], 3): Закръглете елементите с три цифри

Изход:

           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

Визуализиране на корелационната матрица в R

Топлинната карта е друг начин за показване на корелационна матрица. Библиотеката GGally е разширение на ggplot2. В момента не е наличен в библиотеката на conda. Можем да инсталираме директно в конзолата.

install.packages("GGally")

Визуализация на корелационната матрица

Библиотеката включва различни функции за показване на обобщената статистика, като например корелация и разпределение на всички променливи в матрица.

Функцията ggcorr() има много аргументи. Ще представим само аргументите, които ще използваме в урока:

Функцията ggcorr

ggcorr(df, method = c("pairwise", "pearson"),
  nbreaks = NULL, digits = 2, low = "#3B9AB2",
  mid = "#EEEEEE", high = "#F21A00",
  geom = "tile", label = FALSE,
  label_alpha = FALSE)

аргументи:

  • df: Използван набор от данни
  • метод: Формула за изчисляване на корелацията. По подразбиране се изчисляват по двойки и Pearson
  • nbreaks: Връща категоричен диапазон за оцветяването на коефициентите. По подразбиране няма прекъсване и цветният градиент е непрекъснат
  • цифри: Закръглете коефициента на корелация. По подразбиране е зададено на 2
  • ниско: Контролирайте по-ниското ниво на оцветяването
  • среден: Контролирайте средното ниво на оцветяването
  • Високо: Контролирайте високото ниво на оцветяването
  • геом: Контролирайте формата на геометричния аргумент. По подразбиране „плочка“
  • етикет: булева стойност. Покажете или не етикета. По подразбиране е зададено на `FALSE`

Основна топлинна карта

Най-основният график на пакета е топлинна карта. Легендата на графиката показва градиентен цвят от – 1 до 1, като горещият цвят показва силна положителна корелация, а студеният цвят – отрицателна корелация.

library(GGally)
ggcorr(data)

Обяснение на кода

  • ggcorr(данни): Необходим е само един аргумент, който е името на рамката с данни. Променливите на ниво фактор не са включени в графиката.

Изход:

Основна топлинна карта

Добавяне на контрол към топлинната карта

Можем да добавим още контроли към графиката:

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

Обяснение на кода

  • nbreaks=6: разбийте легендата с 6 ранга.
  • ниско = „стоманеносиньо“: Използвайте по-светли цветове за отрицателна корелация
  • среден = „бял“: Използвайте бели цветове за корелация на средни диапазони
  • високо = „тъмно“: Използвайте тъмни цветове за положителна корелация
  • geom = „кръг“: Използвайте кръг като форма на прозорците в топлинната карта. Размерът на кръга е пропорционален на абсолютната стойност на корелацията.

Изход:

Добавяне на контрол към топлинната карта

Добавяне на етикет към топлинната карта

GGally ни позволява да добавим етикет вътре в прозорците:

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

Обяснение на кода

  • етикет = TRUE: Добавете стойностите на коефициентите на корелация в топлинната карта.
  • цвят = "сив50": Изберете цвят, т.е. сиво
  • етикет_размер = 3: Задайте размера на етикета равен на 3

Изход:

Добавяне на етикет към топлинната карта

Функцията ggpairs

И накрая, представяме още една функция от библиотеката GGaly. Ggpair. Той създава графика в матричен формат. Можем да покажем три вида изчисления в една графика. Матрицата е измерение, което е равно на броя на наблюденията. Горната/долната част показва прозорци и по диагонал. Можем да контролираме каква информация искаме да покажем във всяка част от матрицата. Формулата за ggpair е:

ggpair(df, columns = 1: ncol(df), title = NULL,
    upper = list(continuous = "cor"),
    lower = list(continuous = "smooth"),
    mapping = NULL)		

аргументи:

  • df: Използван набор от данни
  • колони: Изберете колоните, за да начертаете диаграмата
  • заглавие: Включете заглавие
  • горен: Контролирайте полетата над диагонала на графиката. Необходимо е да предоставите вида на изчисленията или графиката, които да върнете. Ако непрекъснато = „cor“, молим R да изчисли корелацията. Имайте предвид, че аргументът трябва да бъде списък. Могат да се използват и други аргументи, вижте [vignette](„http://ggobi.github.io/ggally/#custom_functions“) за повече информация.
  • Спуснете: Контролирайте полетата под диагонала.
  • Mapping: Показва естетиката на графиката. Например, можем да изчислим графиката за различни групи.

Двумерен анализ с ggpair с групиране

Следващата графика изобразява три информация:

  • Корелационната матрица между променливите log_totex, log_income, възраст и wtrans, групирани според това дали домакинството има дете или не.
  • Начертайте разпределението на всяка променлива по групи
  • Покажете диаграмата на разсейване с тенденцията по групи
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))

Обяснение на кода

  • колони = c(“log_totexp”, “log_income”, “age”, “wtrans”): Изберете променливите за показване в графиката
  • title = „Двумерен анализ на разходите за приходи от британското домакинство“: Добавете заглавие
  • горен = списък (): Контролирайте горната част на графиката. Т.е. над диагонала
  • непрекъснато = обвиване ("кор", размер = 3)): Изчислете коефициента на корелация. Обгръщаме аргумента непрекъснато във функцията wrap(), за да контролираме естетиката на графиката (т.е. размер = 3) -lower = list(): Контролираме долната част на графиката. Т.е. под диагонала.
  • непрекъснато = обвиване („гладко“, алфа = 0.3, размер = 0.1): Добавяне на точкова диаграма с линейна тенденция. Обгръщаме аргумента непрекъснато във функцията wrap(), за да контролираме естетиката на графиката (т.е. size=0.1, alpha=0.3)
  • картографиране = aes (цвят = children_fac): Искаме всяка част от графиката да бъде подредена от променливата children_fac, която е категорична променлива, приемаща стойност 1, ако домакинството няма деца, и 2 в противен случай

Изход:

Двумерен анализ с ggpair с групиране

Двумерен анализ с ggpair с частично групиране

Графиката по-долу е малко по-различна. Променяме позицията на картографирането вътре в горния аргумент.

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

Обяснение на кода

  • Същият код като предишния пример, с изключение на:
  • mapping = aes(color = children_fac): Преместете списъка в upper = list(). Искаме само изчислението, подредено по групи в горната част на графиката.

Изход:

Двумерен анализ с ggpair с частично групиране

Oбобщение

  • Двумерната връзка описва връзка - или корелация - между две променливи в R.
  • Има два основни метода за изчисляване на корелацията между две променливи R Програмиране: Pearson & Spearman.
  • Корелационният метод на Pearson обикновено се използва като основна проверка за връзката между две променливи.
  • Ранговата корелация сортира наблюденията по ранг и изчислява нивото на сходство между ранга.
  • Ранговата корелация на Spearman, , винаги е между -1 и 1 със стойност, близка до крайната точка, показва силна връзка.
  • Корелационната матрица е матрица, която представлява двойната корелация на всички променливи.
  • Нивото на значимост е полезно в някои ситуации, когато използваме метода на Pearson или Spearman.

Можем да обобщим всички корелационни функции в R в таблицата по-долу:

Библиотека Цел Начин на доставка код
база двумерна корелация Pearson
cor(dfx2, method = "pearson")
база двумерна корелация копиеносец
cor(dfx2, method = "spearman")
база Многомерна корелация Pearson
cor(df, method = "pearson")
база Многомерна корелация копиеносец
cor(df, method = "spearman")
Hmisc P стойност
rcorr(as.matrix(data[,1:9]))[["P"]]
Ggally топлина карта
ggcorr(df)
Многовариантни сюжети
cf code below