Korelasi dalam R: Matriks Korelasi Pearson & Spearman
Korelasi Bivariat pada R
Hubungan Bivariat menggambarkan hubungan -atau korelasi- antara dua variabel di R. Dalam tutorial ini, kita akan membahas konsep korelasi dan menunjukkan bagaimana korelasi dapat digunakan untuk mengukur hubungan antara dua variabel di R.
Korelasi dalam Pemrograman R
Ada dua metode utama untuk menghitung korelasi antara dua variabel dalam Pemrograman R:
- Pearson: Korelasi parametrik
- Spearman: Korelasi non-parametrik
Matriks Korelasi Pearson di R
Metode korelasi Pearson biasanya digunakan sebagai pemeriksaan utama hubungan antara dua variabel.
koefisien korelasi, , adalah ukuran kekuatan linear hubungan antara dua variabel dan . Itu dihitung sebagai berikut:
dengan
, yaitu simpangan baku dari
, yaitu simpangan baku dari
Korelasinya berkisar antara -1 dan 1.
- Nilai yang mendekati atau sama dengan 0 berarti sedikit atau tidak ada hubungan linier antara dan .
- Sebaliknya, semakin dekat angka ke 1 atau -1, semakin kuat hubungan linearnya.
Kita dapat menghitung uji-t sebagai berikut dan memeriksa tabel distribusi dengan derajat kebebasan sama dengan :
Korelasi Peringkat Spearman di R
Korelasi peringkat mengurutkan pengamatan berdasarkan peringkat dan menghitung tingkat kesamaan antar peringkat. Korelasi peringkat memiliki keuntungan karena kuat terhadap outlier dan tidak terkait dengan distribusi data. Perhatikan bahwa korelasi peringkat cocok untuk variabel ordinal.
Korelasi peringkat Spearman, , selalu berada di antara -1 dan 1 dengan nilai yang mendekati ekstremitas menunjukkan hubungan yang kuat. Korelasi ini dihitung sebagai berikut:
dengan menyatakan kovarians antara peringkat dan . Penyebutnya menghitung simpangan baku.
Di R, kita bisa menggunakan fungsi cor(). Dibutuhkan tiga argumen, , dan metode.
cor(x, y, method)
kasus:
- x: Vektor pertama
- y: Vektor kedua
- metode: Rumus yang digunakan untuk menghitung korelasi. Tiga nilai string:
- “pearson”
- “kendal”
- "pendekar tombak"
Argumen opsional dapat ditambahkan jika vektor mengandung 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 1519 observasi dengan sepuluh fitur, di antaranya:
- makanan: berbagi makanan, berbagi belanja
- bahan bakar: membagi pengeluaran bahan bakar
- kain: pembagian anggaran untuk belanja pakaian
- berjalan: berbagi pengeluaran alkohol
- wtrans: berbagi pengeluaran transportasi
- lebih buruk lagi: bagian pembelanjaan barang lainnya
- totexp: total pengeluaran rumah tangga dalam pound
- penghasilan: total pendapatan bersih rumah tangga
- usia: usia rumah tangga
- anak-anak: jumlah anak
Example
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
- Pertama-tama kita mengimpor data dan melihatnya dengan fungsi sekilas() dari perpustakaan dplyr.
- Tiga poin berada di atas 500K, jadi kami memutuskan untuk mengecualikannya.
- Ini adalah praktik umum untuk mengonversi variabel moneter dalam log. Hal ini membantu mengurangi dampak outlier dan mengurangi kemiringan dalam kumpulan data.
Keluaran:
## 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, ...
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 di R
Korelasi bivariat adalah awal yang baik, namun kita bisa mendapatkan gambaran yang lebih luas dengan analisis multivariat. Korelasi dengan banyak variabel digambarkan di dalam a matriks korelasi. Matriks korelasi adalah matriks yang mewakili pasangan korelasi 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 menghilangkan fitur kategorikal sebelum kita meneruskan bingkai data ke dalam cor().
Matriks korelasi bersifat simetris yang berarti nilai di atas diagonal mempunyai nilai yang sama dengan nilai di bawah. Lebih visual untuk menampilkan setengah dari matriks.
Kami mengecualikan kids_fac karena merupakan 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 code mat_1 <-as.dist(round(cor(data[,1:9]),2)) mat_1
Penjelasan Kode
- kor(data): Menampilkan matriks korelasi
- bulat (data, 2): Membulatkan matriks korelasi dengan dua desimal
- sebagai.dist(): Menampilkan babak 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 perpustakaan Hmisc menghitung nilai p untuk kita. Kita dapat mengunduh perpustakaan dari konda dan salin kode untuk menempelkannya di terminal:
conda install -c r r-hmisc
rcorr() memerlukan bingkai data untuk disimpan sebagai matriks. Kita dapat mengubah data kita menjadi matriks sebelum 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. Matriks korelasi biasanya ditampilkan dengan nilai p, bukan koefisien korelasi.
p_value <-round(mat_2[["P"]], 3) p_value
Penjelasan Kode
- mat_2[[“P”]]: Nilai p disimpan dalam elemen yang disebut P
- bulat(mat_2[[“P”]], 3): Membulatkan elemen dengan tiga angka
Keluaran:
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
Memvisualisasikan Matriks Korelasi di R
Peta panas adalah cara lain untuk menunjukkan matriks korelasi. Perpustakaan GGally adalah perpanjangan dari ggplot2. Saat ini, ini tidak tersedia di perpustakaan conda. Kita bisa menginstalnya langsung di konsol.
install.packages("GGally")
Perpustakaan mencakup berbagai fungsi untuk menampilkan ringkasan statistik seperti korelasi dan distribusi semua variabel dalam a 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: Kumpulan data yang digunakan
- metode: Rumus untuk menghitung korelasi. Secara default, korelasi berpasangan dan korelasi Pearson dihitung
- nbreak: Mengembalikan rentang kategorikal untuk pewarnaan koefisien. Secara default, tidak ada jeda dan gradien warna berlanjut
- digit: Bulatkan koefisien korelasi. Secara default, disetel ke 2
- rendah: Mengontrol level warna yang lebih rendah
- pertengahan: Mengontrol tingkat menengah pewarnaan
- tinggi: Mengontrol tingkat pewarnaan yang tinggi
- geom: Mengontrol bentuk argumen geometris. Secara default, “ubin”
- label: Nilai Boolean. Menampilkan atau tidak labelnya. Secara default, disetel 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 menunjukkan korelasi negatif.
library(GGally) ggcorr(data)
Penjelasan Kode
- ggkorr(data): Hanya diperlukan satu argumen, yaitu nama frame data. Variabel tingkat faktor tidak disertakan dalam plot.
Keluaran:
Menambahkan Kontrol ke Peta Panas
Kita dapat menambahkan lebih banyak kontrol ke grafik:
ggcorr(data, nbreaks = 6, low = "steelblue", mid = "white", high = "darkred", geom = "circle")
Penjelasan Kode
- nistirahat=6: pecahkan legenda dengan 6 peringkat.
- rendah = “biru baja”: Gunakan warna yang lebih terang untuk korelasi negatif
- tengah = “putih”: Gunakan warna putih untuk korelasi rentang menengah
- tinggi = “merah tua”: Gunakan warna gelap untuk korelasi positif
- geom = “lingkaran”: Gunakan lingkaran sebagai bentuk jendela di peta panas. Ukuran lingkaran sebanding dengan nilai absolut korelasi.
Keluaran:
Menambahkan Label ke Peta Panas
GGally memungkinkan kita untuk menambahkan label di dalam jendela:
ggcorr(data, nbreaks = 6, label = TRUE, label_size = 3, color = "grey50")
Penjelasan Kode
- label = BENAR: Tambahkan nilai koefisien korelasi di dalam peta panas.
- warna = “abu-abu50”: Pilih warnanya, yaitu abu-abu
- label_ukuran = 3: Mengatur ukuran label sama dengan 3
Keluaran:
Fungsi ggpairs
Terakhir, kami perkenalkan fungsi lain dari pustaka GGaly, yaitu Ggpair. Fungsi ini menghasilkan grafik dalam format matriks. Kita dapat menampilkan tiga jenis komputasi dalam satu grafik. Matriks adalah dimensi, dengan sama dengan jumlah pengamatan. 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: Kumpulan data yang digunakan
- kolom: Pilih kolom untuk menggambar plot
- judul: Sertakan judul
- atas: Kontrol kotak di atas diagonal plot. Perlu menyediakan jenis perhitungan atau grafik yang akan dikembalikan. Jika kontinu = “cor”, kami meminta R untuk menghitung korelasi. Perhatikan bahwa, argumen harus berupa daftar. Argumen lain dapat digunakan, lihat [vignette](“http://ggobi.github.io/ggally/#custom_functions”) untuk informasi lebih lanjut.
- Menurunkan: Kontrol kotak di bawah diagonal.
- Pemetaan: Menunjukkan estetika grafik. Misalnya, kita dapat menghitung grafik untuk kelompok yang berbeda.
Analisis bivariat dengan ggpair dengan pengelompokan
Grafik berikutnya memplot tiga informasi:
- Matriks korelasi antara variabel log_totexp, log_income, age dan wtrans dikelompokkan berdasarkan apakah rumah tangga tersebut memiliki anak atau tidak.
- Plot distribusi setiap variabel berdasarkan kelompok
- Tampilkan plot sebar dengan tren berdasarkan 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”, “usia”, “wtrans”): Pilih variabel yang akan ditampilkan dalam grafik
- title = “Analisis bivariat pengeluaran pendapatan rumah tangga Inggris”: Tambahkan judul
- atas = daftar(): Mengontrol bagian atas grafik. Yaitu Di atas diagonal
- kontinyu = bungkus("cor", ukuran = 3)): Hitung koefisien korelasi. Kita membungkus argumen continuous di dalam fungsi wrap() untuk mengontrol estetika grafik (yaitu ukuran = 3) -lower = list(): Mengontrol bagian bawah grafik. Yaitu Di bawah diagonal.
- kontinyu = bungkus("halus",alfa = 0.3,ukuran=0.1): Tambahkan plot sebar dengan tren linier. Kita membungkus argumen continuous di dalam fungsi wrap() untuk mengontrol estetika grafik (yaitu size=0.1, alpha=0.3)
- pemetaan = aes(warna = anak_fac):Kami ingin setiap bagian grafik ditumpuk oleh variabel children_fac, yang merupakan variabel kategoris yang mengambil nilai 1 jika rumah tangga tidak memiliki anak dan 2 jika tidak.
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 dengan contoh sebelumnya kecuali:
- pemetaan = aes(warna = kids_fac): Pindahkan daftar ke atas = daftar(). Kami hanya ingin penghitungan ditumpuk berdasarkan grup di bagian atas grafik.
Keluaran:
Kesimpulan
- Hubungan Bivariat menggambarkan hubungan -atau korelasi- antara dua variabel di R.
- Ada dua metode utama untuk menghitung korelasi antara dua variabel Pemrograman R: Pearson & Spearman.
- Metode korelasi Pearson biasanya digunakan sebagai pemeriksaan utama hubungan antara dua variabel.
- Korelasi peringkat mengurutkan pengamatan berdasarkan peringkat dan menghitung tingkat kesamaan antar peringkat.
- Korelasi peringkat Spearman, , selalu antara -1 dan 1 dengan nilai yang dekat dengan ekstrem menunjukkan hubungan yang kuat.
- Matriks korelasi adalah matriks yang mewakili pasangan korelasi semua variabel.
- Tingkat signifikansi berguna dalam beberapa situasi ketika kita menggunakan metode pearson atau spearman.
Kita dapat meringkas semua fungsi Korelasi di R dalam tabel di bawah ini:
Perpustakaan | Tujuan | metode | Kode |
---|---|---|---|
Mendasarkan | korelasi bivariat | Pearson |
cor(dfx2, method = "pearson") |
Mendasarkan | korelasi bivariat | Spearman |
cor(dfx2, method = "spearman") |
Mendasarkan | Korelasi multivariat | Pearson |
cor(df, method = "pearson") |
Mendasarkan | Korelasi multivariat | Spearman |
cor(df, method = "spearman") |
Hmisc | Nilai P |
rcorr(as.matrix(data[,1:9]))[["P"]] |
|
nakal | peta panas |
ggcorr(df) |
|
Plot multivariat |
cf code below |