Korelasi di R: Pearson & Spearman dengan Contoh Matriks

Daftar Isi:

Anonim

Hubungan bivariat menggambarkan hubungan -atau korelasi- antara dua variabel, dan. Dalam tutorial ini, kita membahas konsep korelasi dan menunjukkan bagaimana hal itu dapat digunakan untuk mengukur hubungan antara dua variabel.

Ada dua metode utama untuk menghitung korelasi antara dua variabel.

  • Pearson: Korelasi parametrik
  • Spearman: Korelasi non-parametrik

Dalam tutorial ini, Anda akan belajar

  • Korelasi Pearson
  • Korelasi Peringkat Spearman
  • Matriks Korelasi
  • Visualisasikan Matriks Korelasi

Korelasi Pearson

Metode korelasi Pearson biasanya digunakan sebagai pemeriksaan utama untuk hubungan antara dua variabel.

The koefisien korelasi ,, adalah ukuran dari kekuatan linier hubungan antara dua variabel dan. Ini dihitung sebagai berikut:

dengan

  • , yaitu deviasi standar
  • , yaitu deviasi standar

Korelasi berkisar antara -1 dan 1.

  • Nilai mendekati atau sama dengan 0 menyiratkan sedikit atau tidak ada hubungan linier antara dan.
  • Sebaliknya, semakin mendekati 1 atau -1, semakin kuat hubungan liniernya.

Kita dapat menghitung uji-t sebagai berikut dan memeriksa tabel distribusi dengan derajat kebebasan yang sama dengan:

Korelasi Peringkat Spearman

Korelasi peringkat mengurutkan pengamatan berdasarkan peringkat dan menghitung tingkat kemiripan antar peringkat. Korelasi peringkat memiliki keuntungan karena kuat terhadap pencilan dan tidak terkait dengan distribusi data. Perhatikan bahwa, korelasi peringkat cocok untuk variabel ordinal.

Korelasi peringkat Spearman`` selalu antara -1 dan 1 dengan nilai yang mendekati ekstremitas menunjukkan hubungan yang kuat. Ini dihitung sebagai berikut:

dengan menyatakan kovariansi antara peringkat dan. Penyebut menghitung simpangan baku.

Di R, kita bisa menggunakan fungsi cor (). Dibutuhkan tiga argumen, dan metode.

cor(x, y, method)

Argumen :

  • x: Vektor pertama
  • y: Vektor kedua
  • metode: Rumus yang digunakan untuk menghitung korelasi. Tiga nilai string:
    • "Pearson"
    • "kendall"
    • "pendekar tombak"

Argumen opsional dapat ditambahkan jika vektor berisi nilai yang hilang: use = "complete.obs"

Kami akan menggunakan dataset BudgetUK. Dataset ini melaporkan alokasi anggaran rumah tangga Inggris antara tahun 1980 dan 1982. Terdapat 1.519 observasi dengan sepuluh fitur, di antaranya:

  • wfood: berbagi belanja berbagi makanan
  • wfuel: berbagi pengeluaran bahan bakar
  • wcloth: bagian anggaran untuk belanja pakaian
  • walc: berbagi pengeluaran alkohol
  • wtrans: berbagi pengeluaran transportasi
  • wother: bagian belanja barang lainnya
  • totexp: total pengeluaran rumah tangga dalam pound
  • pendapatan total pendapatan rumah tangga bersih
  • usia: usia rumah tangga
  • anak: jumlah anak
Contoh
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)

Penjelasan Kode

  • Kami pertama kali mengimpor data dan melihat-lihat dengan fungsi glimpse () dari pustaka dplyr.
  • Tiga poin di atas 500K, jadi kami memutuskan untuk mengecualikannya.
  • Ini adalah praktik umum untuk mengubah variabel moneter dalam log. Ini membantu mengurangi dampak pencilan dan mengurangi kemiringan dalam kumpulan data.

Keluaran:

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

Kita dapat menghitung koefisien korelasi antara variabel pendapatan dan makanan dengan metode "pearson" dan "spearman".

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

keluaran:

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

Keluaran:

## [1] -0.2501252 

Matriks Korelasi

Korelasi bivariat adalah awal yang baik, tetapi kita bisa mendapatkan gambaran yang lebih luas dengan analisis multivariat. Korelasi dengan banyak variabel digambarkan di dalam matriks korelasi . Matriks korelasi adalah matriks yang merepresentasikan korelasi pasangan dari semua variabel.

Fungsi cor () mengembalikan matriks korelasi. Satu-satunya perbedaan dengan korelasi bivariat adalah kita tidak perlu menentukan variabel mana. Secara default, R menghitung korelasi antara semua variabel.

Perhatikan bahwa, korelasi tidak dapat dihitung untuk variabel faktor. Kita perlu memastikan bahwa kita menjatuhkan fitur kategorikal sebelum kita melewatkan bingkai data di dalam cor ().

Matriks korelasi bersifat simetris yang artinya nilai di atas diagonal memiliki nilai yang sama dengan yang di bawah ini. Lebih visual untuk menampilkan setengah dari matriks.

Kami mengecualikan children_fac karena ini adalah variabel tingkat faktor. cor tidak melakukan korelasi pada variabel kategori.

# 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

Penjelasan Kode

  • cor (data): Menampilkan matriks korelasi
  • round (data, 2): Bulatkan matriks korelasi dengan dua desimal
  • as.dist (): Menampilkan paruh kedua saja

Keluaran:

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

Tingkat signifikansi

Tingkat signifikansi berguna dalam beberapa situasi ketika kita menggunakan metode pearson atau spearman. Fungsi rcorr () dari pustaka Hmisc menghitung nilai-p untuk kita. Kami dapat mengunduh perpustakaan dari conda dan menyalin kode untuk menempelkannya di terminal:

conda install -c r r-hmisc 

Rcorr () membutuhkan bingkai data untuk disimpan sebagai matriks. Sebelumnya kita dapat mengubah data kita menjadi matriks untuk menghitung matriks korelasi dengan nilai-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

Objek daftar mat_2 berisi tiga elemen:

  • r: Output dari matriks korelasi
  • n: Jumlah observasi
  • P: nilai p

Kami tertarik pada elemen ketiga, nilai-p. Adalah umum untuk menunjukkan matriks korelasi dengan nilai-p sebagai ganti koefisien korelasi.

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

Penjelasan Kode

  • mat_2 [["P"]]: Nilai-p disimpan dalam elemen yang disebut P
  • round (mat_2 [["P"]], 3): Bulatkan elemen dengan tiga digit

Keluaran:

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

Visualisasikan Matriks Korelasi

Peta panas adalah cara lain untuk menunjukkan matriks korelasi. Pustaka GGally merupakan perpanjangan dari ggplot2. Saat ini, itu tidak tersedia di perpustakaan conda. Kita bisa install langsung di konsol.

install.packages("GGally")

Pustaka menyertakan berbagai fungsi untuk memperlihatkan statistik ringkasan seperti korelasi dan distribusi semua variabel dalam matriks.

Fungsi ggcorr () memiliki banyak argumen. Kami hanya akan memperkenalkan argumen yang akan kami gunakan dalam tutorial:

Fungsi ggcorr

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

Argumen:

  • df : Set data digunakan
  • metode : Rumus untuk menghitung korelasi. Secara default, berpasangan dan Pearson dihitung
  • nbreaks : Kembalikan rentang kategorikal untuk pewarnaan koefisien. Secara default, tidak ada jeda dan gradien warna bersifat kontinu
  • digit : Bulatkan koefisien korelasi. Secara default, setel ke 2
  • rendah : Kontrol tingkat pewarnaan yang lebih rendah
  • mid : Kontrol level tengah pewarnaan
  • high : Mengontrol level tinggi dari pewarnaan
  • geom : Mengontrol bentuk argumen geometris. Secara default, "ubin"
  • label : Nilai Boolean. Menampilkan atau tidak labelnya. Secara default, setel ke `FALSE`

Peta panas dasar

Plot paling dasar dari paket tersebut adalah peta panas. Legenda grafik menunjukkan warna gradien dari - 1 hingga 1, dengan warna panas menunjukkan korelasi positif yang kuat dan warna dingin, korelasi negatif.

library(GGally)ggcorr(data)

Penjelasan Kode

  • ggcorr (data): Hanya satu argumen yang dibutuhkan, yaitu nama bingkai data. Variabel tingkat faktor tidak dimasukkan dalam plot.

Keluaran:

Tambahkan kontrol ke peta panas

Kami dapat menambahkan lebih banyak kontrol ke grafik.

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

Penjelasan Kode

  • nbreaks = 6: hancurkan legenda dengan 6 peringkat.
  • low = "steelblue": Gunakan warna yang lebih terang untuk korelasi negatif
  • mid = "white": Gunakan warna putih untuk korelasi rentang tengah
  • high = "darkred": Gunakan warna gelap untuk korelasi positif
  • geom = "circle": Gunakan lingkaran sebagai bentuk jendela di peta panas. Ukuran lingkaran sebanding dengan nilai absolut dari korelasi.

Keluaran:

Tambahkan label ke peta panas

GGally memungkinkan kita menambahkan label di dalam jendela.

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

Penjelasan Kode

  • label = TRUE: Tambahkan nilai koefisien korelasi di dalam heat map.
  • color = "grey50": Pilih warna, yaitu abu-abu
  • label_size = 3: Setel ukuran label sama dengan 3

Keluaran:

ggpairs

Terakhir, kami memperkenalkan fungsi lain dari pustaka GGaly. Ggpair. Ini menghasilkan grafik dalam format matriks. Kami dapat menampilkan tiga jenis komputasi dalam satu grafik. Matriks adalah dimensi, dengan sama dengan jumlah observasi. Bagian atas / bawah menampilkan jendela dan diagonal. Kita dapat mengontrol informasi apa yang ingin kita tampilkan di setiap bagian matriks. Rumus untuk ggpair adalah:

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

Argumen :

  • df : Set data digunakan
  • kolom : Pilih kolom untuk menggambar plot
  • judul : Sertakan judul
  • atas : Kontrol kotak di atas diagonal plot. Perlu menyediakan jenis perhitungan atau grafik untuk dikembalikan. Jika kontinu = "cor", kita meminta R untuk menghitung korelasinya. Perhatikan bahwa, argumennya harus berupa daftar. Argumen lain dapat digunakan, lihat [sketsa] ("http://ggobi.github.io/ggally/#custom_functions") untuk informasi lebih lanjut.
  • Bawah : Kontrol kotak di bawah diagonal.
  • Pemetaan : Menunjukkan estetika grafik. Misalnya, kita dapat menghitung grafik untuk grup yang berbeda.

Analisis bivariat dengan ggpair dengan pengelompokan

Grafik berikutnya memplot tiga informasi:

  • Matriks korelasi antara variabel log_totexp, log_income, umur dan wtrans dikelompokkan berdasarkan apakah rumah tangga tersebut memiliki anak atau tidak.
  • Plot distribusi setiap variabel menurut kelompok
  • Tampilkan plot sebar dengan tren menurut kelompok
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))

Penjelasan Kode

  • kolom = c ("log_totexp", "log_income", "age", "wtrans"): Pilih variabel untuk ditampilkan dalam grafik
  • title = "Analisis bivariat pengeluaran pendapatan oleh rumah tangga Inggris": Tambahkan judul
  • upper = list (): Kontrol bagian atas grafik. Yaitu Di Atas diagonal
  • continuous = wrap ("cor", size = 3)): Hitung koefisien korelasi. Kami membungkus argumen kontinu di dalam fungsi wrap () untuk mengontrol estetika grafik (yaitu size = 3) -lower = list (): Kontrol bagian bawah grafik. Yaitu Di Bawah Diagonal.
  • continuous = wrap ("smooth", alpha = 0.3, size = 0.1): Tambahkan plot sebar dengan tren linier. Kami membungkus argumen kontinu di dalam fungsi wrap () untuk mengontrol estetika grafik (yaitu size = 0,1, alpha = 0,3)
  • mapping = aes (color = children_fac): Kami ingin setiap bagian dari grafik ditumpuk oleh variabel children_fac, yang merupakan variabel kategorikal yang mengambil nilai 1 jika rumah tangga tidak memiliki anak dan 2 sebaliknya

Keluaran:

Analisis bivariat dengan ggpair dengan pengelompokan parsial

Grafik di bawah ini sedikit berbeda. Kami mengubah posisi pemetaan di dalam argumen atas.

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

Penjelasan Kode

  • Kode yang sama persis seperti contoh sebelumnya kecuali untuk:
  • mapping = aes (color = children_fac): Pindahkan daftar di upper = list (). Kami hanya ingin komputasi ditumpuk berdasarkan grup di bagian atas grafik.

Keluaran:

Ringkasan

Kita dapat meringkas fungsinya pada tabel di bawah ini:

Perpustakaan

Objektif

metode

kode

Mendasarkan

korelasi bivariat

Pearson

cor(dfx2, method = "pearson")

Mendasarkan

korelasi bivariat

pendekar tombak

cor(dfx2, method = "spearman")

Mendasarkan

Korelasi multivariat

Pearson

cor(df, method = "pearson")

Mendasarkan

Korelasi multivariat

pendekar tombak

cor(df, method = "spearman")

Hmisc

Nilai P.

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

Gally

peta panas

ggcorr(df)

Plot multivariat

cf code below