R'deki Korelasyon: Pearson & Matrix Örneği ile Spearman

İki değişkenli bir ilişki, iki değişken arasındaki bir ilişkiyi veya korelasyonu tanımlar ve. Bu eğitimde, korelasyon kavramını tartışıyoruz ve herhangi iki değişken arasındaki ilişkiyi ölçmek için nasıl kullanılabileceğini gösteriyoruz.

İki değişken arasındaki korelasyonu hesaplamanın iki ana yöntemi vardır.

  • Pearson: Parametrik korelasyon
  • Spearman: Parametrik olmayan korelasyon

Bu eğitimde öğreneceksiniz

  • Pearson Korelasyonu
  • Mızrakçı Sıra Korelasyonu
  • Korelasyon Matrisi
  • Korelasyon Matrisini Görselleştirin

Pearson Korelasyonu

Pearson korelasyon yöntemi genellikle iki değişken arasındaki ilişki için birincil kontrol olarak kullanılır.

Korelasyon katsayısı , gücünün bir ölçüsüdür doğrusal iki değişken arasındaki ilişki. Aşağıdaki gibi hesaplanır:

ile

  • yani standart sapma
  • yani standart sapma

Korelasyon -1 ile 1 arasında değişir.

  • 0'a yakın veya eşit bir değer, ve arasında çok az veya hiç doğrusal ilişki olmadığını gösterir.
  • Buna karşılık, 1 veya -1'e ne kadar yakın olursa, doğrusal ilişki o kadar güçlüdür.

T testini aşağıdaki gibi hesaplayabilir ve dağıtım tablosunu şuna eşit bir serbestlik derecesi ile kontrol edebiliriz:

Mızrakçı Sıra Korelasyonu

Bir sıra korelasyonu, gözlemleri dereceye göre sıralar ve sıra arasındaki benzerlik seviyesini hesaplar. Bir sıra korelasyonu, aykırı değerlere karşı sağlam olma avantajına sahiptir ve verilerin dağıtımıyla bağlantılı değildir. Sıralı değişken için bir sıra korelasyonunun uygun olduğuna dikkat edin.

Spearman sıra korelasyonu, her zaman -1 ile 1 arasındadır ve ekstremiteye yakın bir değer güçlü bir ilişkiyi gösterir. Aşağıdaki gibi hesaplanır:

ile rank ve arasındaki kovaryansları belirtti. Payda, standart sapmaları hesaplar.

R'de cor () işlevini kullanabiliriz. Üç argüman ve yöntem alır.

cor(x, y, method)

Bağımsız değişkenler :

  • x: İlk vektör
  • y: İkinci vektör
  • yöntem: Korelasyonu hesaplamak için kullanılan formül. Üç dize değeri:
    • "pearson"
    • "kendall"
    • "mızrakçı"

Vektörler eksik değer içeriyorsa isteğe bağlı bir argüman eklenebilir: use = "complete.obs"

BudgetUK veri kümesini kullanacağız. Bu veri seti, 1980 ile 1982 yılları arasında İngiliz hanehalklarının bütçe dağılımını bildirmektedir. Aralarında on özellik bulunan 1519 gözlem vardır:

  • wfood: yemek paylaşım harcamalarını paylaşın
  • wfuel: yakıt harcamasını paylaş
  • wcloth: giyim harcamaları için bütçe payı
  • walc: alkol harcamasını paylaşma
  • wtrans: ulaşım harcamasını paylaşma
  • wother: diğer malların harcama payı
  • totexp: pound cinsinden toplam hane harcaması
  • gelir toplam net hane geliri
  • yaş: hane halkı yaşı
  • çocuklar: çocuk sayısı
Misal
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)

Kod Açıklama

  • Önce verileri içe aktarıyoruz ve dplyr kitaplığından glimpse () işlevine bir göz atıyoruz.
  • Üç puan 500K'nın üzerindedir, bu yüzden onları hariç tutmaya karar verdik.
  • Parasal bir değişkeni günlüğe dönüştürmek yaygın bir uygulamadır. Aykırı değerlerin etkisini azaltmaya yardımcı olur ve veri kümesindeki çarpıklığı azaltır.

Çıktı:

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

Gelir ve wfood değişkenleri arasındaki korelasyon katsayısını "pearson" ve "spearman" yöntemleri ile hesaplayabiliriz.

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

çıktı:

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

Çıktı:

## [1] -0.2501252 

Korelasyon Matrisi

İki değişkenli korelasyon iyi bir başlangıçtır, ancak çok değişkenli analizle daha geniş bir resim elde edebiliriz. Bir korelasyon matrisi içinde birçok değişkenle bir korelasyon resmedilmiştir . Bir korelasyon matrisi, tüm değişkenlerin çift korelasyonunu temsil eden bir matristir.

Cor () işlevi bir korelasyon matrisi döndürür. İki değişkenli korelasyonla olan tek fark, hangi değişkenleri belirlememize gerek olmamasıdır. Varsayılan olarak, R tüm değişkenler arasındaki korelasyonu hesaplar.

Unutmayın, faktör değişkeni için bir korelasyon hesaplanamaz. Cor () içindeki veri çerçevesini geçmeden önce kategorik özelliği bıraktığımızdan emin olmalıyız.

Bir korelasyon matrisi simetriktir, bu, köşegenin üzerindeki değerlerin aşağıdaki ile aynı değerlere sahip olduğu anlamına gelir. Matrisin yarısını göstermek daha görseldir.

Children_fac'i bir faktör seviyesi değişkeni olduğu için hariç tutuyoruz. cor, kategorik bir değişken üzerinde korelasyon gerçekleştirmez.

# 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

Kod Açıklama

  • cor (veri): Korelasyon matrisini görüntüleyin
  • round (data, 2): Korelasyon matrisini iki ondalık sayı ile yuvarlayın
  • as.dist (): Yalnızca ikinci yarıyı gösterir

Çıktı:

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

Önem düzeyi

Pearson veya spearman yöntemini kullandığımızda bazı durumlarda önem seviyesi yararlıdır. Hmisc kütüphanesindeki rcorr () fonksiyonu bizim için p değerini hesaplar. Kitaplığı conda'dan indirebilir ve terminale yapıştırmak için kodu kopyalayabiliriz:

conda install -c r r-hmisc 

Rcorr (), matris olarak depolanacak bir veri çerçevesi gerektirir. Korelasyon matrisini p değeriyle hesaplamadan önce verilerimizi bir matrise dönüştürebiliriz.

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 liste nesnesi üç öğe içerir:

  • r: Korelasyon matrisinin çıktısı
  • n: Gözlem sayısı
  • P: p-değeri

Üçüncü unsur olan p değeriyle ilgileniyoruz. Korelasyon matrisini korelasyon katsayısı yerine p değeri ile göstermek yaygındır.

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

Kod Açıklama

  • mat_2 [["P"]]: p değerleri, P adlı öğede saklanır
  • round (mat_2 [["P"]], 3): Öğeleri üç basamaklı yuvarlayın

Çıktı:

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

Korelasyon Matrisini Görselleştirin

Bir ısı haritası, bir korelasyon matrisini göstermenin başka bir yoludur. GGally kitaplığı, ggplot2'nin bir uzantısıdır. Şu anda conda kitaplığında mevcut değildir. Doğrudan konsola kurabiliriz.

install.packages("GGally")

Kitaplık, bir matristeki tüm değişkenlerin korelasyonu ve dağılımı gibi özet istatistikleri göstermek için farklı işlevler içerir.

Ggcorr () işlevinin birçok bağımsız değişkeni vardır. Sadece eğitimde kullanacağımız argümanları tanıtacağız:

Ggcorr işlevi

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

Argümanlar:

  • df : Kullanılan veri kümesi
  • yöntem : Korelasyonu hesaplamak için formül. Varsayılan olarak, ikili ve Pearson hesaplanır
  • nbreaks : Katsayıların renklendirilmesi için kategorik bir aralık döndürür. Varsayılan olarak, kesinti yoktur ve renk geçişi süreklidir
  • rakamlar : Korelasyon katsayısını yuvarlayın. Varsayılan olarak 2'ye ayarlayın
  • düşük : Renklendirmenin düşük seviyesini kontrol edin
  • orta : Renklendirmenin orta seviyesini kontrol edin
  • yüksek : Renklendirmenin yüksek seviyesini kontrol edin
  • geom : Geometrik argümanın şeklini kontrol edin. Varsayılan olarak "kiremit"
  • etiket : Boole değeri. Etiketi gösterin ya da göstermeyin. Varsayılan olarak "YANLIŞ" olarak ayarlayın

Temel ısı haritası

Paketin en temel planı bir ısı haritasıdır. Grafiğin açıklaması, - 1'den 1'e kadar bir gradyan rengi gösterir; sıcak renk güçlü pozitif korelasyonu ve soğuk renk ise negatif bir korelasyon gösterir.

library(GGally)ggcorr(data)

Kod Açıklama

  • ggcorr (veri): Veri çerçevesi adı olan yalnızca bir bağımsız değişken gereklidir. Faktör düzeyindeki değişkenler grafiğe dahil edilmemiştir.

Çıktı:

Isı haritasına kontrol ekleyin

Grafiğe daha fazla kontrol ekleyebiliriz.

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

Kod Açıklama

  • nbreaks = 6: efsaneyi 6 kademeli kırın.
  • low = "steelblue": Negatif korelasyon için daha açık renkler kullanın
  • mid = "white": Orta aralık korelasyonu için beyaz renkler kullanın
  • yüksek = "koyu kırmızı": Pozitif korelasyon için koyu renkler kullanın
  • geom = "circle": Isı haritasındaki pencerelerin şekli olarak daireyi kullanın. Dairenin boyutu, korelasyonun mutlak değeriyle orantılıdır.

Çıktı:

Isı haritasına etiket ekleyin

GGally, pencerelerin içine bir etiket eklememize izin verir.

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

Kod Açıklama

  • etiket = DOĞRU: Isı haritasının içindeki korelasyon katsayılarının değerlerini ekleyin.
  • color = "grey50": Rengi seçin, yani gri
  • label_size = 3: "3" e eşit olan etiketin boyutunu ayarla

Çıktı:

ggpairs

Son olarak, GGaly kitaplığından başka bir işlevi tanıtıyoruz. Ggpair. Matris biçiminde bir grafik oluşturur. Tek bir grafikte üç tür hesaplama gösterebiliriz. Matris, gözlem sayısına eşit olan bir boyuttur. Üst / alt kısım pencereleri ve çapraz olarak gösterir. Matrisin her bir bölümünde hangi bilgileri göstermek istediğimizi kontrol edebiliriz. Ggpair'in formülü şudur:

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

Bağımsız değişkenler :

  • df : Kullanılan veri kümesi
  • sütunlar : Grafiği çizmek için sütunları seçin
  • başlık : Bir başlık ekleyin
  • üst : Grafiğin köşegeninin üstündeki kutuları kontrol edin. Döndürmek için hesaplama türü veya grafiği sağlamanız gerekir. Sürekli = "kor" ise, R'den korelasyonu hesaplamasını isteriz. Argümanın bir liste olması gerektiğini unutmayın. Diğer argümanlar kullanılabilir, daha fazla bilgi için bkz. [Vinyet] ("http://ggobi.github.io/ggally/#custom_functions").
  • Alt : Köşegenin altındaki kutuları kontrol edin.
  • Haritalama : Grafiğin estetiğini gösterir. Örneğin, grafiği farklı gruplar için hesaplayabiliriz.

Gruplandırmalı ggpair ile iki değişkenli analiz

Bir sonraki grafik üç bilgiyi gösterir:

  • Hanenin çocuğu olup olmadığına göre gruplandırılan log_totexp, log_income, yaş ve wtrans değişkeni arasındaki korelasyon matrisi.
  • Her değişkenin dağılımını gruba göre çizin
  • Gruplara göre trendle dağılım grafiğini görüntüleyin
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))

Kod Açıklama

  • column = c ("log_totexp", "log_income", "age", "wtrans"): Grafikte gösterilecek değişkenleri seçin
  • title = "İngiliz hanehalkı tarafından gelir harcamalarının iki değişkenli analizi": Bir başlık ekleyin
  • üst = liste (): Grafiğin üst kısmını kontrol edin. Yani çaprazın üstünde
  • sürekli = sarma ("kor", boyut = 3)): Korelasyon katsayısını hesaplayın. Grafiğin estetiğini kontrol etmek için sürekli argümanı wrap () işlevi içine sarıyoruz (yani size = 3) -lower = list (): Grafiğin alt kısmını kontrol edin. Yani köşegenin altında.
  • sürekli = sarma ("pürüzsüz", alfa = 0,3, boyut = 0,1): Doğrusal eğilimi olan bir dağılım grafiği ekleyin. Grafiğin estetiğini kontrol etmek için sürekli argümanı wrap () işlevinin içine sarıyoruz (yani boyut = 0.1, alfa = 0.3)
  • mapping = aes (color = children_fac): Grafiğin her bir parçasının, hane halkının çocuğu yoksa 1 ve aksi takdirde 2 değerini alan kategorik bir değişken olan children_fac değişkeni tarafından istiflenmesini istiyoruz.

Çıktı:

Kısmi gruplandırmalı ggpair ile iki değişkenli analiz

Aşağıdaki grafik biraz farklıdır. Eşlemenin konumunu üst argümanın içinde değiştiriyoruz.

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

Kod Açıklama

  • Aşağıdakiler dışında önceki örnekle aynı kod:
  • mapping = aes (color = children_fac): Listeyi üst = liste () içinde hareket ettirin. Hesaplamanın yalnızca grafiğin üst kısmında gruplara göre yığılmasını istiyoruz.

Çıktı:

Özet

Fonksiyonu aşağıdaki tabloda özetleyebiliriz:

kütüphane

Amaç

yöntem

kodu

Baz

iki değişkenli korelasyon

Pearson

cor(dfx2, method = "pearson")

Baz

iki değişkenli korelasyon

Mızrakçı

cor(dfx2, method = "spearman")

Baz

Çok değişkenli korelasyon

Pearson

cor(df, method = "pearson")

Baz

Çok değişkenli korelasyon

Mızrakçı

cor(df, method = "spearman")

Hmisc

P değeri

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

Ggally

sıcaklık haritası

ggcorr(df)

Çok değişkenli grafikler

cf code below

Ilginç makaleler...