R'deki Korelasyon: Pearson ve Spearman Korelasyon Matrisi

R'de İki Değişkenli Korelasyon

İki Değişkenli ilişki, R'deki iki değişken arasındaki ilişkiyi -veya korelasyonu- tanımlar. Bu derste, korelasyon kavramını tartışacağız ve bunun R'deki herhangi iki değişken arasındaki ilişkiyi ölçmek için nasıl kullanılabileceğini göstereceğiz.

R Programlamada Korelasyon

R Programlamada iki değişken arasındaki korelasyonu hesaplamak için iki temel yöntem vardır:

  • Pearson: Parametrik korelasyon
  • mızrakçı: Parametrik olmayan korelasyon

R'de Pearson Korelasyon Matrisi

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

The korelasyon katsayısı, , gücünün bir ölçüsüdür doğrusal İki değişken arasındaki ilişki ve . Aşağıdaki şekilde hesaplanır:

R'de Pearson Korelasyon Matrisi

ile

  • R'de Pearson Korelasyon Matrisi, yani standart sapması
  • R'de Pearson Korelasyon Matrisi, yani standart sapması

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

  • 0'a yakın veya XNUMX'a eşit bir değer, ve arasında doğrusal bir ilişkinin çok az olduğunu veya hiç olmadığını gösterir.
  • Bunun tersine, 1 veya -1'e ne kadar yaklaşılırsa doğrusal ilişki o kadar güçlü olur.

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

R'de Pearson Korelasyon Matrisi

R'de Spearman Sıra Korelasyonu

Sıra korelasyonu, gözlemleri sıraya göre sıralar ve sıralar arasındaki benzerlik düzeyini hesaplar. Sıra korelasyonu, aykırı değerlere karşı dayanıklı olma avantajına sahiptir ve verilerin dağıtımıyla bağlantılı değildir. Sıralı değişken için sıra korelasyonunun uygun olduğunu unutmayın.

Spearman'ın sıra korelasyonu, her zaman -1 ile 1 arasında olup uç noktaya yakın bir değer güçlü bir ilişkiye işaret eder. Aşağıdaki şekilde hesaplanır:

R'de Spearman Sıra Korelasyonu

ile sıra arasındaki kovaryansları belirttik. Payda standart sapmaları hesaplar.

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

cor(x, y, method)

Argümanlar:

  • x: Birinci 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 setini kullanacağız. Bu veri seti, 1980 ile 1982 yılları arasında İngiliz hanelerinin bütçe tahsisini rapor etmektedir. On özelliğe sahip 1519 gözlem bulunmaktadır; bunların arasında:

  • yemek: yiyeceği paylaş harcamayı paylaş
  • yakıt: yakıt harcamasını paylaş
  • kumaş: giyim harcaması için bütçe payı
  • yürüyüş: alkol harcamasını paylaş
  • wtrans: ulaşım harcamalarını paylaş
  • başka: diğer mal harcamalarının payı
  • totex: pound cinsinden toplam hane harcaması
  • gelir: toplam net hane geliri
  • yaş: hane yaşı
  • çocuklar için: Çocuk Sayısı

Örnek E-posta

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 kütüphanesinden bakış() fonksiyonuyla bir göz atıyoruz.
  • Üç puan 500K'nın üzerinde, bu yüzden onları hariç tutmaya karar verdik.
  • Günlükte parasal bir değişkeni 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        <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, ...

Gelir ve wfood değişkenleri arasındaki korelasyon katsayısını “pearson” ve “spearman” yöntemleriyle 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

R'de 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çok değişkenle bir korelasyon bir grafikte resmedilmiştir. korelasyon matrisi. Korelasyon matrisi, tüm değişkenlerin ikili korelasyonunu temsil eden bir matristir.

cor() fonksiyonu bir korelasyon matrisi döndürür. İki değişkenli korelasyonun tek farkı, hangi değişkenlerin olduğunu belirtmemize gerek olmamasıdır. Varsayılan olarak R, tüm değişkenler arasındaki korelasyonu hesaplar.

Faktör değişkeni için bir korelasyonun hesaplanamayacağını unutmayın. Veri çerçevesini cor() içine geçirmeden önce kategorik özelliği bıraktığımızdan emin olmalıyız.

Korelasyon matrisi simetriktir; bu, köşegenin üzerindeki değerlerin aşağıdaki değerlerle aynı olduğu anlamına gelir. Matrisin yarısını göstermek daha görseldir.

Children_fac'i faktör düzeyinde bir değişken 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 code
mat_1 <-as.dist(round(cor(data[,1:9]),2))
mat_1

Kod Açıklama

  • cor(veri): Korelasyon matrisini göster
  • yuvarlak(veri, 2): Korelasyon matrisini iki ondalık sayıyla 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

Anlamlılık düzeyi, Pearson veya Spearman yöntemini kullandığımız bazı durumlarda faydalıdır. Hmisc kütüphanesindeki rcorr() fonksiyonu bizim için p-değerini hesaplar. Kütüphaneyi şuradan indirebiliriz: ilçe ve terminale yapıştırmak için kodu kopyalayın:

conda install -c r r-hmisc

rcorr(), matris olarak saklanacak bir veri çerçevesi gerektirir. P değeri ile korelasyon matrisini 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ğeriyle göstermek yaygındır.

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

Kod Açıklama

  • mat_2[[“P”]]: P değerleri P adı verilen öğede saklanır
  • yuvarlak(mat_2[[“P”]], 3): Elemanları üç rakamla yuvarlayın

Çıktı:

           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'de Korelasyon Matrisinin Görselleştirilmesi

Isı haritası, korelasyon matrisini göstermenin başka bir yoludur. GGally kütüphanesi ggplot2'nin bir uzantısıdır. Şu anda conda kütüphanesinde mevcut değil. Doğrudan konsola kurulum yapabiliriz.

install.packages("GGally")

Korelasyon Matrisinin Görselleştirilmesi

Kütüphane, tüm değişkenlerin korelasyonu ve dağılımı gibi özet istatistiklerini göstermek için farklı işlevler içerir. matris.

ggcorr() fonksiyonunun birçok argümanı vardır. Yalnızca eğitimde kullanacağımız argümanları tanıtacağız:

ggcorr İş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, çiftler ve Pearson hesaplanır
  • molalar: Katsayıların renklendirilmesi için kategorik bir aralık döndürün. Varsayılan olarak kesinti yoktur ve renk gradyanı süreklidir
  • basamak: Korelasyon katsayısını yuvarlayın. Varsayılan olarak 2'ye ayarlıdır
  • düşük: Renklendirmenin alt seviyesini kontrol edin
  • orta: Renklendirmenin orta seviyesini kontrol edin
  • yüksek: Renklenmenin yüksek seviyesini kontrol edin
  • geom: Geometrik argümanın şeklini kontrol edin. Varsayılan olarak “döşeme”
  • etiket: Boole değeri. Etiketi görüntüleyin veya görüntülemeyin. Varsayılan olarak "YANLIŞ" olarak ayarlanmıştır

Temel ısı haritası

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

library(GGally)
ggcorr(data)

Kod Açıklama

  • ggdüzeltme(veri): Yalnızca bir bağımsız değişkene ihtiyaç vardır, o da veri çerçevesi adıdır. Faktör düzeyindeki değişkenler çizime dahil edilmemiştir.

Çıktı:

Temel Isı Haritası

Isı Haritasına Kontrol Ekleme

Grafiğe daha fazla kontrol ekleyebiliriz:

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

Kod Açıklama

  • nbreaks=6: 6 sıra ile efsaneyi kırın.
  • düşük = “çelikmavi”: Negatif korelasyon için daha açık renkler kullanın
  • orta = “beyaz”: Orta aralık korelasyonu için beyaz renkleri kullanın
  • yüksek = “koyu kırmızı”: Pozitif korelasyon için koyu renkler kullanın
  • geom = “daire”: Isı haritasındaki pencerelerin şekli olarak daireyi kullanın. Dairenin boyutu, korelasyonun mutlak değerine orantılıdır.

Çıktı:

Isı Haritasına Kontrol Ekleme

Isı Haritasına Etiket Ekleme

GGally pencerelerin içine bir etiket eklememize olanak tanır:

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.
  • renk = “gri50”: Rengi seçin, yani gri
  • etiket_boyutu = 3: Etiketin boyutunu 3'e eşit olarak ayarlayın

Çıktı:

Isı Haritasına Etiket Ekleme

ggpairs İşlevi

Son olarak, GGaly kütüphanesinden başka bir fonksiyon tanıtıyoruz. Ggpair. Bir matris formatında bir grafik üretir. Bir grafikte üç çeşit hesaplamayı görüntüleyebiliriz. Matris, gözlem sayısına eşit bir boyuttur. Üst/alt kısım, pencereleri ve diyagonalde görüntüler. Matrisin her bir kısmında hangi bilgileri göstermek istediğimizi kontrol edebiliriz. ggpair formülü şudur:

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

argümanlar:

  • 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ürülecek hesaplama veya grafik türünü sağlamanız gerekir. Eğer continuous = “cor” 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 [vinyet](“http://ggobi.github.io/ggally/#custom_functions”)'a bakın.
  • Alt: Köşegenin altındaki kutuları kontrol edin.
  • Haritalama: Grafiğin estetiğini belirtir. Örneğin grafiği farklı gruplar için hesaplayabiliriz.

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

Sonraki grafikte üç bilgi gösterilmektedir:

  • Hanenin çocuğu olup olmamasına göre gruplanan log_totexp, log_income, age ve wtrans değişkenleri arasındaki korelasyon matrisi.
  • Her değişkenin dağılımını gruba göre çizin
  • Grup bazında trendi içeren 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

  • sütunlar = c(“log_totexp”, “log_gelir”, “yaş”, “wtrans”): Grafikte gösterilecek değişkenleri seçin
  • title = “İngiliz hane halkının gelir harcamasının iki değişkenli analizi”: Başlık ekle
  • üst = liste(): Grafiğin üst kısmını kontrol edin. Yani köşegenin üstünde
  • sürekli = sarma(“kor”, boyut = 3)): Korelasyon katsayısını hesaplayın. Grafiğin estetiğini kontrol etmek için argümanı sarma() fonksiyonunun içine sürekli sarıyoruz (yani boyut = 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ğilime sahip bir dağılım grafiği ekleyin. Grafiğin estetiğini kontrol etmek için argümanı sarma() fonksiyonunun içine sürekli sarıyoruz (yani boyut=0.1, alfa=0.3)
  • eşleme = aes(renk = çocuk_fac): Grafiğin her bir bölümünün children_fac değişkeni ile istiflenmesini istiyoruz. Bu değişken, hanede çocuk yoksa 1, yoksa 2 değerini alan kategorik bir değişkendir.

Çıktı:

Gruplandırma ile ggpair ile İki Değişkenli Analiz

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

Aşağıdaki grafik biraz farklı. Üst argümanın içindeki eşlemenin konumunu 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 tamamen aynı kod:
  • eşleme = aes(renk = kids_fac): Listeyi üst = liste() konumuna taşıyın. Hesaplamanın yalnızca grafiğin üst kısmında gruba göre istiflenmesini istiyoruz.

Çıktı:

Kısmi Gruplandırma ile ggpair ile iki değişkenli analiz

ÖZET

  • İki Değişkenli ilişki, R'deki iki değişken arasındaki ilişkiyi veya korelasyonu tanımlar.
  • İki değişken arasındaki korelasyonu hesaplamak için iki temel yöntem vardır. R Programlama: Pearson ve Spearman.
  • Pearson korelasyon yöntemi genellikle iki değişken arasındaki ilişkinin birincil kontrolü olarak kullanılır.
  • Sıra korelasyonu, gözlemleri sıraya göre sıralar ve sıralar arasındaki benzerlik düzeyini hesaplar.
  • Spearman'ın sıra korelasyonu, her zaman -1 ile 1 arasında olup uç noktaya yakın bir değer güçlü bir ilişkiye işaret eder.
  • Korelasyon matrisi, tüm değişkenlerin ikili korelasyonunu temsil eden bir matristir.
  • Anlamlılık düzeyi, Pearson veya Spearman yöntemini kullandığımız bazı durumlarda faydalıdır.

R'deki tüm Korelasyon fonksiyonlarını aşağıdaki tabloda özetleyebiliriz:

Kütüphane Nesnel Yöntem Kod
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