Корелация в R: Pearson & Пример за копие с матрица

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

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

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

В този урок ще научите

  • Корелация на Пиърсън
  • Корелация на Spearman Rank
  • Корелационна матрица
  • Визуализирайте корелационна матрица

Корелация на Пиърсън

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

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

с

  • , т.е. стандартно отклонение на
  • , т.е. стандартно отклонение на

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

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

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

Корелация на Spearman Rank

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

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

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

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

cor(x, y, method)

Аргументи :

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

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

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

  • wfood: споделяне на разходи за споделяне на храна
  • wfuel: споделяне на разходите за гориво
  • wcloth: бюджетен дял за разходи за облекло
  • walc: споделяйте разходите за алкохол
  • wtrans: споделяне на разходите за транспорт
  • wother: дял от други разходи за стоки
  • 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, затова решихме да ги изключим.
  • Честа практика е да конвертирате парична променлива в дневник. Помага за намаляване на въздействието на извънредните стойности и намалява изкривяването в набора от данни.

Изход:

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

Можем да изчислим коефициента на корелация между променливите на дохода и 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 

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

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

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

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

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

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

# 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

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

  • cor (данни): Показва матрицата на корелация
  • кръг (данни, 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

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

Нивото на значимост е полезно в някои ситуации, когато използваме метода на персона или копиеносца. Функцията 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_value <-round(mat_2[["P"]], 3)p_value

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

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

Изход:

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

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

Топлинната карта е друг начин за показване на корелационна матрица. Библиотеката 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
  • ниско : Контролирайте по-ниското ниво на оцветяване
  • mid : контролирайте средното ниво на оцветяването
  • високо : Контролирайте високото ниво на оцветяване
  • geom : Контролирайте формата на геометричния аргумент. По подразбиране "плочка"
  • етикет : Булева стойност. Показвайте или не етикета. По подразбиране е зададено на „FALSE“

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

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

library(GGally)ggcorr(data)

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

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

Изход:

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

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

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

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

  • nbreaks = 6: разбийте легендата с 6 ранга.
  • low = "steelblue": Използвайте по-светли цветове за отрицателна корелация
  • mid = "white": Използвайте бели цветове за корелация на средните диапазони
  • high = "darkred": Използвайте тъмни цветове за положителна корелация
  • geom = "circle": Използвайте кръг като форма на прозорците в топлинната карта. Размерът на кръга е пропорционален на абсолютната стойност на корелацията.

Изход:

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

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

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

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

  • label = TRUE: Добавете стойностите на коефициентите на корелация в топлинната карта.
  • color = "grey50": Изберете цвета, т.е. сив
  • label_size = 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 да изчисли корелацията. Имайте предвид, че аргументът трябва да бъде списък. Могат да се използват и други аргументи, вижте [винетка] ("http://ggobi.github.io/ggally/#custom_functions") за повече информация.
  • Долно : Контролирайте полетата под диагонала.
  • Картиране : Показва естетиката на графиката. Например, можем да изчислим графиката за различни групи.

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

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

  • Корелационната матрица между log_totexp, log_income, age и 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 = "Двуфанен анализ на приходите от британското домакинство": Добавете заглавие
  • upper = list (): Контролирайте горната част на графиката. Т.е. Над диагонала
  • непрекъснато = увиване ("cor", размер = 3)): Изчислява се коефициентът на корелация. Увиваме аргумента непрекъснато във функцията wrap (), за да контролираме естетиката на графиката (т.е. размер = 3) -lower = list (): Контролирайте долната част на графиката. Т.е. под диагонала.
  • непрекъснато = увиване ("гладко", алфа = 0,3, размер = 0,1): Добавете разпръснат график с линейна тенденция. Увиваме аргумента непрекъснато във функцията wrap (), за да контролираме естетиката на графиката (т.е. размер = 0,1, алфа = 0,3)
  • mapping = aes (color = children_fac): Искаме всяка част от графиката да бъде подредена от променливата children_fac, която е категорична променлива, приемаща стойността 1, ако домакинството няма деца и 2 в противен случай

Изход:

Двувариатен анализ с 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): Преместете списъка в горния = списък (). Искаме само изчислението подредено по групи в горната част на графиката.

Изход:

Обобщение

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

библиотека

Обективен

метод

код

Основа

двувариантна корелация

Пиърсън

cor(dfx2, method = "pearson")

Основа

двувариантна корелация

Спиърман

cor(dfx2, method = "spearman")

Основа

Многовариантна корелация

персон

cor(df, method = "pearson")

Основа

Многовариантна корелация

Спиърман

cor(df, method = "spearman")

Hmisc

P стойност

rcorr(as.matrix(data[,1:9]))[["P"]]

Ggally

топлина карта

ggcorr(df)

Многовариантни парцели

cf code below

Интересни статии...