Menu

R'de Korelasyon: cor(), cor.test() ve Korelasyon Matrisleri

cor() ile iki değişkenin birlikte nasıl hareket ettiğini ölçün, cor.test() ile ilişkinin gerçek olup olmadığını test edin ve bir korelasyon matrisiyle birçok değişkeni aynı anda tarayın.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

İki Değişken Arasındaki Korelasyon: cor()

Korelasyon şunu sorar: bir değişken yükselirken diğeri de yükselme eğiliminde mi (pozitif), düşüyor mu (negatif) yoksa kendi bildiğini mi okuyor (sıfıra yakın)? R'de bu tek çağrıdır:

Yanıt yaklaşık −0.87'dir: ağır arabalar daha kötü yakıt tüketir ve ilişki güçlüdür. O tek sayı, evrensel olarak r diye yazılan Pearson korelasyon katsayısıdır.

r Nasıl Okunur

Katsayı her zaman −1 ile +1 arasına düşer. İşaret yönü verir; büyüklük gücü verir:

| |r| | Tipik okuma | | --- | --- | | 0.0 – 0.2 | ihmal edilebilir | | 0.2 – 0.4 | zayıf | | 0.4 – 0.6 | orta | | 0.6 – 0.8 | güçlü | | 0.8 – 1.0 | çok güçlü |

Bu bantları yasa değil, sohbet başlatıcı olarak görün - fizikte 0.6 bir r hayal kırıklığıdır, psikolojide kariyerin doruk noktasıdır. İçselleştirmeye değer iki özellik: r'nin birimi yoktur (ton cinsinden ağırlığı mpg ile ilişkilendirmek, kilogram cinsinden ağırlığı mpg ile ilişkilendirmekle aynı r'yi verir, çünkü r standartlaştırılmış değerler üzerinde hesaplanır) ve r yalnızca doğrusal ilişkiyi ölçer - mükemmel U biçimli bir ilişkinin r değeri ≈ 0 olabilir.

Ve söylenmesi gereken cümle: korelasyon nedensellik değildir. Dondurma satışları ile boğulma ölümleri yılın ayları boyunca güçlü biçimde ilişkilidir - dondurma insanları boğduğu için değil, yaz ikisini birden yönlendirdiği için. Bir korelasyon size iki değişkenin birlikte hareket ettiğini söyler; neden konusunda suskundur. Belki x, y'yi yönlendiriyordur, belki y, x'i, belki de üçüncü bir şey (bu örnekte mevsim) ikisini birden. Bunlar arasında karar vermek daha büyük bir r değil, deney ya da dikkatli nedensel akıl yürütme ister.

Spearman ve Kendall: Pearson Yanlış Araç Olduğunda

Pearson ham değerler üzerinde çalışır; bu da onu aykırı değerlere duyarlı ve eğri ilişkilere kör kılar. method argümanı sıralamaya dayalı alternatiflere geçer:

Spearman her değeri sırasıyla değiştirir ve sonra sıralar üzerinde Pearson hesaplar. y her zaman x arttıkça arttığı için tüm sıralar hizalanır ve Spearman tam olarak 1 bildirir - aykırı değerin büyüklüğü önemsizleşir, yalnızca konumu kalır. Veri sıralı olduğunda (anket ölçekleri), ağır çarpık olduğunda ya da ilişki monoton ama düz olmadığında Spearman'a uzanın. Kendall benzer bir soruyu uyumlu/uyumsuz çiftlerden yanıtlar; küçük örneklemlerde daha sağlamdır ama daha yavaştır ve yaygın varsayılan Spearman'dır.

Korelasyon Matrisi

Birçok değişken arasındaki ilişkileri aynı anda taramak için cor() fonksiyonuna birkaç sayısal sütun verin:

Her değişken diğer her değişkene karşı, köşegende 1'ler (her şey kendisiyle mükemmel ilişkilidir) ve köşegen boyunca bir ayna görüntüsü. İki ondalığa yuvarlamak kulağa geldiğinden daha önemlidir - yuvarlanmamış matris bir rakam duvarıdır ve matrisin amacı onu taramaktır. Burada tarama, mpg değişkeninin üçüyle de negatif ilişkili olduğunu (daha ağır, daha güçlü, daha büyük motorlu arabalar daha çok yakıt yakar), wt, hp ve disp değişkenlerinin ise birbirleriyle güçlü biçimde pozitif olduğunu gösteriyor - doğrusal regresyona ve onun çoklu doğrusal bağlantı baş ağrılarına geldiğinizde önem taşıyacak bir "büyük araba" değişkenleri kümesi.

Eksik Değerler: use Argümanı

Eksik veriyle cor() fonksiyonunun varsayılanı tahmin etmek yerine NA döndürmektir:

  • use = "complete.obs", herhangi bir NA içeren her satırı düşürür ve sonra tüm matrisi hayatta kalanlardan hesaplar. Tutarlıdır ama savurgandır - eksik bir wt değeri o satırı mpghp çiftinden de siler.
  • use = "pairwise.complete.obs", her hücreyi o çiftin bulunduğu tüm satırlardan hesaplar. Daha fazla veri korur, ama farklı hücreler farklı alt kümelere dayanır ve bu çok nadiren kendi içinde tutarsız bir matris üretebilir.

Birkaç başıboş NA için ikisi de uygundur; yalnızca hangisini kullandığınızı söyleyin.

Anlamlı mı? cor.test()

cor() bir sayı verir ama bunun gürültü olup olamayacağına dair bir fikir vermez. cor.test() hipotez testini çalıştırır:

Çıktıyı blok blok gezelim:

  • t = −9.56, df = 30 - test istatistiği. Sıfır hipotezi gerçek korelasyonun sıfır olmasıdır; gözlenen r, n − 2 serbestlik derecesinde (32 araba − 2) bir t istatistiğine dönüştürülür.
  • p-value = 1.29e-10 - gerçek korelasyon sıfır olsaydı, 32'lik bir örneklemde sıfırdan bu kadar uzak bir r görme olasılığı yaklaşık 0,0000000001'dir. Bu, ilişkinin gerçek olduğuna dair ezici bir kanıttır - ama unutmayın, p değeri r'nin sıfırdan farklı olup olmadığına dair konuşur, ilişkinin büyük ya da nedensel olup olmadığına dair değil.
  • 95 percent confidence interval: −0.93 to −0.74 - gerçek korelasyon için makul aralık. Çoğu zaman p değerinden daha yararlıdır: bu aralığın iyimser ucu bile güçlü bir negatif korelasyondur.
  • sample estimates: cor = −0.87 - cor() fonksiyonunun size verdiği aynı sayı.

Küçük örneklemler burada ekstra saygıyı hak eder: n = 10 ile ±0.5 korelasyonlar şans eseri endişe verici sıklıkta ortaya çıkar ve geniş güven aralığı bunu size söyleyecektir. Yalnızca p değerini değil, aralığı raporlayın.

Görmek: Her Zaman Çizin

Bir korelasyon katsayısı bütün bir ilişkiyi tek bir sayıya sıkıştırır ve bu sıkıştırma eğriliği, kümeleri ya da tüm işi yapan tek bir noktayı gizleyebilir. Herhangi bir r'ye güvenmeden önce saçılım grafiğine bakın:

plot(mtcars$wt, mtcars$mpg)              # one pair
pairs(mtcars[, c("mpg", "wt", "hp", "disp")])  # every pair in the matrix

pairs(), korelasyon matrisinizle eşleşen bir saçılım grafiği ızgarası çizer - sayıların düşündüğünüz anlama geldiğini kontrol etmenin en hızlı yolu. Cilalı ısı haritası tarzı matris grafikleri için corrplot paketi (install.packages("corrplot"), sonra corrplot(cor(m))) standart araçtır.

Buradan Ne Çıkarıyorsunuz

  • cor(x, y) Pearson r değerini verir: işaret yön, büyüklük güçtür, her zaman [−1, 1] aralığında ve birimsizdir.
  • Korelasyon doğrusal birlikte hareketi ölçer ve nedensellik hakkında hiçbir şey söylemez - gizli bir üçüncü değişken her zaman adaydır.
  • Sıralar için method = "spearman": sıralı veri, aykırı değerler, monoton ama eğri ilişkiler.
  • Sayısal sütunlarda cor(df) matrisi verir; onu round(, 2) yapın ve veri eksik olduğunda use = argümanına dikkat edin.
  • cor.test(x, y) p değerini ve bir güven aralığını ekler - aralığı raporlayın.
  • Sayıya inanmadan önce her zaman saçılım grafiğine bakın.

Sırada: soru "birlikte mi hareket ediyorlar?" sorusundan "bu grubun ortalaması diğerininkinden farklı mı?" sorusuna keskinleştiğinde - t-testi.

Sıkça Sorulan Sorular

R'de korelasyon nasıl hesaplanır?

cor(x, y), iki sayısal vektör arasındaki Pearson korelasyon katsayısını döndürür. Tam korelasyon matrisini almak için bunun yerine sayısal sütunlardan oluşan bir veri çerçevesi geçirin: cor(df). Bir p değeri ve güven aralığı için cor.test(x, y) kullanın.

R'de bir korelasyonun p değeri nasıl alınır?

Tek başına cor() bir p değeri vermez - cor.test(x, y) kullanın. Çıktısı t istatistiğini, serbestlik derecesini, gerçek korelasyonun sıfır olduğu sıfır hipotezi için p değerini, %95'lik bir güven aralığını ve tahmin edilen katsayıyı içerir.

Pearson ile Spearman korelasyonu arasındaki fark nedir?

Pearson (varsayılan) ham değerler üzerinde doğrusal ilişkiyi ölçer. Spearman ise değerleri önce sıralar; böylece ilişkinin tutarlı biçimde artıp artmadığını ya da azalıp azalmadığını (monoton) ölçer ve aykırı değerlere çok daha az duyarlıdır. Sıralı veri, çarpık veri ya da eğri ama monoton ilişkiler için cor(x, y, method = "spearman") kullanın.

cor() içinde NA değerleri nasıl ele alınır?

Varsayılan olarak herhangi bir değer eksikse cor() NA döndürür. Önce eksik değer içeren satırları düşürmek için use = "complete.obs" ya da bir matriste her değişken çifti için ikisinin de bulunduğu tüm satırları kullanmak üzere use = "pairwise.complete.obs" geçirin.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA