R'de Pearson ve Spearman Korelasyon Matrisi ve Örneği
⚡ Akıllı Özet
R'da Pearson ve Spearman Korelasyonu, iki değişkenin ne kadar güçlü bir şekilde birlikte hareket ettiğini ölçer; tek bir çift için `cor()` fonksiyonu, birçok çift için ise korelasyon matrisi kullanılır. Bu kılavuz, `Hmisc` ile anlamlılık testi eklemeyi ve sonucu `GGally` ısı haritalarıyla görselleştirmeyi göstermektedir.

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.
MKS korelasyon katsayısır harfiyle yazılan bu değer, gücünü ölçer. doğrusal İki değişken x ve y arasındaki ilişki. Aşağıdaki gibi hesaplanır:
'da
x'in standart sapmasıdır.
y'nin standart sapmasıdır.
Korelasyon -1 ile 1 arasında değişmektedir.
- r değerinin 0'a yakın veya 0'a eşit olması, x ve y arasında çok az veya hiç doğrusal ilişki olmadığını gösterir.
- r değeri 1 veya -1'e ne kadar yaklaşırsa, doğrusal ilişki o kadar güçlü olur.
Aşağıdaki t-istatistiğini kullanarak r'nin sıfırdan farklı olup olmadığını test edebilir ve bunu n – 2 serbestlik derecesine sahip Student dağılımıyla karşılaştırabilirsiniz:
R'de Spearman Sıra Korelasyonu
Sıralama korelasyonu, gözlemleri sıralamaya göre sıralar ve sıralamalar arasındaki benzerlik düzeyini hesaplar. Sıralama korelasyonunun avantajı, aykırı değerlere karşı dayanıklı olması ve verilerin dağılımıyla bağlantılı olmamasıdır. Sıralama korelasyonu ayrıca sıralı değişkenler için de doğru seçimdir.
Spearman sıra korelasyonu, rho olarak yazılır ve -1 ile 1 arasında değişir; uç noktalara yakın değerler güçlü, monoton bir ilişkiyi gösterir. Hesaplaması şu şekildedir:
Pay, x ve y'nin rankları arasındaki kovaryansı, payda ise standart sapmalarının çarpımını temsil eder.
R'da her ikisi de üç argüman alan cor() fonksiyonu ile hesaplanır: x, y ve method.
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)
Code açıklama
- Önce verileri içe aktarıyoruz ve dplyr kütüphanesinden bakış() fonksiyonuyla bir göz atıyoruz.
- Üç hane 500 veya daha fazla gelir bildirdiğinden, filter(income < 500) bu haneleri kaldırır ve satır sayısı 1,519'dan 1,516'ya düşer.
- 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
Bunu her değişken çiftine genişletmeden önce, tek bir katsayının nasıl okunması gerektiğini netleştirmekte fayda var.
Korelasyon Katsayısı Nasıl Yorumlanır?
Bir katsayı ancak anlamını söyleyebildiğinizde işe yarar. Aşağıdaki bantlar geleneksel okumayı göstermektedir ve işaret, şiddetten ayrı olarak okunur.
| r'nin mutlak değeri | İlişkinin gücü |
|---|---|
| 0.00 için 0.19 | Çok zayıf veya hiç yok |
| 0.20 için 0.39 | Zayıf |
| 0.40 için 0.59 | ılımlı |
| 0.60 için 0.79 | Güçlü |
| 0.80 için 1.00 | Çok güçlü |
Daha önce log_income ve wfood arasında hesaplanan -0.2467 değeri, dolayısıyla zayıf bir negatif ilişkiye işaret etmektedir: daha varlıklı haneler bütçelerinin biraz daha küçük bir bölümünü gıdaya harcamaktadır.
Her katsayı için üç uyarı geçerlidir.
- Korelasyon nedensellik değildir. Güçlü bir r değeri, iki değişkenin birlikte hareket ettiğini, asla birinin diğerine neden olmadığını gösterir. Genellikle üçüncü, ölçülmemiş bir değişken her ikisini de yönlendirir.
- Pearson yalnızca düz çizgileri görür. Mükemmel U şeklinde bir ilişki, sıfıra yakın bir r değeri verir. Sayıya güvenmeden önce her zaman verileri grafik üzerinde gösterin.
- Boyut, önemden daha önemlidir. 1,516 gözlemle, 0.06 katsayısı istatistiksel olarak anlamlı olabilir ancak pratikte anlamsız kalabilir.
cor.test() ile Korelasyonun Anlamlılığını Nasıl Test Edebilirsiniz?
`cor()` fonksiyonu yalnızca katsayıyı döndürür, başka bir şey döndürmez. Tek bir çift için, `cor.test()` fonksiyonu tek bir çağrıda p-değerini ve güven aralığını ekler.
cor.test(data$log_income, data$wfood, method = "pearson")
Çıktıda okunmaya değer dört bölüm bulunmaktadır.
- t ve df: test istatistiği ve serbestlik derecesi, n – 2.
- p-değeriGerçek korelasyon sıfır olsaydı, bu kadar büyük bir katsayı görme olasılığı.
- yüzde 95 güven aralığı: Gerçek korelasyon için olası aralık. Eğer sıfırı dışlıyorsa, ilişki o düzeyde anlamlıdır.
- örnek tahmin: cor() fonksiyonunun döndürdüğüyle aynı olan katsayının kendisi.
Aynı fonksiyon, tek bir argümanı değiştirerek sıralamaya dayalı testleri çalıştırır:
# Spearman rank correlation with a p-value cor.test(data$log_income, data$wfood, method = "spearman") # One-sided test: is the correlation greater than zero? cor.test(data$log_income, data$wfood, alternative = "greater")
Hangi yöntemi ne zaman kullanmalı? Tek bir çifti incelerken cor.test() kullanın, çünkü bu fonksiyon rcorr() fonksiyonunun vermediği güven aralığını sağlar. Tüm matris için p-değerlerine aynı anda ihtiyacınız olduğunda, yukarıda gösterilen Hmisc'ten rcorr() fonksiyonunu kullanın. Birçok çifti test etmenin yanlış pozitif oranını artırdığını unutmayın, bu nedenle büyük bir matristen sonuç çıkarmadan önce p-değerlerini p.adjust(p_value, method = “BH”) ile ayarlayın.
R'de Korelasyon Matrisi
İki değişkenli korelasyon iyi bir başlangıçtır, ancak çok değişkenli bir bakış açısı daha geniş bir tablo sunar. korelasyon matrisi Bu, her bir değişkenin diğer her bir değişkenle olan ikili korelasyonunu gösteren kare şeklinde bir tablodur.
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.
Bir faktör için korelasyon hesaplanamaz, bu nedenle veri çerçevesini cor() fonksiyonuna geçirmeden önce tüm kategorik sütunları silin.
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 hariç tutuldu çünkü cor() bir faktör üzerinde işlem yapamaz.
# 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
Code açıklama
- kor(veri[, 1:9]): Dokuz sayısal sütun üzerinde korelasyon matrisini hesaplayın.
- yuvarlak(…, 2)Her katsayıyı iki ondalık basamağa yuvarlayın.
- as.dist()Matris simetrik olduğundan, yalnızca alt üçgeni yazdırın.
Çı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
Katsayı tek başına ilişkinin istatistiksel olarak güvenilir olup olmadığını göstermez. Hmisc kütüphanesindeki rcorr() fonksiyonu her çift için p-değerini döndürür. Kütüphaneyi şu adresten 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
Code 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 okumanın başka bir yoludur. GGally kütüphanesi, ggplot2'yi genişletir ve conda yerine CRAN'dan yüklenir:
install.packages("GGally")
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)
Code 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ı:
Isı Haritasına Kontrol Ekleme
Grafiğe daha fazla kontrol ekleyebiliriz:
ggcorr(data, nbreaks = 6, low = "steelblue", mid = "white", high = "darkred", geom = "circle")
Code 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 Etiket Ekleme
GGally pencerelerin içine bir etiket eklememize olanak tanır:
ggcorr(data, nbreaks = 6, label = TRUE, label_size = 3, color = "grey50")
Code 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ı:
ggpairs İşlevi
GGally kütüphanesi ayrıca, grafiklerden oluşan bir matris döndüren ggpairs() işlevini de sağlar. Seçilen k değişken için sonuç, k x k'lık bir ızgaradır: köşegen her değişkenin dağılımını gösterirken, köşegenin üstündeki ve altındaki panellerin her biri farklı bir hesaplama içerebilir. Sözdizimi şu şekildedir:
ggpairs(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
- üstGrafiğin köşegeninin üzerindeki kutuları kontrol edin. Döndürülecek hesaplama veya grafik türünü belirtmeniz gerekir. Eğer continuous = “cor” ise, R'den korelasyonu hesaplamasını istiyoruz. Unutmayın ki, argüman bir liste olmalıdır. Diğer argümanlar da mevcuttur; bkz. GGally dokümantasyonu daha fazla bilgi için.
- alt: Köşegenin altındaki kutuları kontrol edin.
- haritaping: Grafiğin estetiğini belirtir. Örneğin grafiği farklı gruplar için hesaplayabiliriz.
Grup ile ggpair kullanılarak yapılan iki değişkenli analizping
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))
Code 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)
- haritaping = aes(renk = çocuk_yüzleri)Her paneli children_fac'e göre ayırın; bu sıralı faktör, çocuksuz haneler için "Hayır" ve çocuklu haneler için "Evet" olarak etiketlenmiştir.
Çıktı:
Kısmi gruplu ggpair ile iki değişkenli analizping
Aşağıdaki grafik biraz farklı. Haritanın konumunu değiştiriyoruz.ping Üst argümanın içinde.
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)) )
Code açıklama
- Aşağıdakiler dışında önceki örnekle tamamen aynı kod:
- haritaping = aes(color = children_fac): Listeyi yukarı taşı = list(). Grafiğin üst kısmında yalnızca gruplandırılmış hesaplamaların yer almasını istiyoruz.
Çıktı:
R'de Korelasyon: Temel Çıkarımlar ve Fonksiyon Referansı
- İ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 sıra korelasyonu -1 ile 1 arasında değişir ve her iki uç noktaya yakın değerler güçlü, monoton bir ilişkiyi gösterir.
- Korelasyon matrisi, her değişkenin ikili korelasyonunu içeren kare şeklinde bir tablodur.
- Bir p değeri, gözlemlenen bir korelasyonun istatistiksel olarak sıfırdan ayırt edilebilir olup olmadığını gösterir.
Bu eğitimde kullanılan tüm korelasyon fonksiyonları aşağıda listelenmiştir:
| Kütüphane | Hedef | Yöntem | Code |
|---|---|---|---|
| baz | İki değişkenli korelasyon | Pearson |
cor(dfx2, method = "pearson") |
| baz | İki 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)
|
| GGally | Çok değişkenli grafik matrisi | - |
ggpairs(df, columns = c("x1", "x2")) |









