Korelasi dalam R: Pearson & Spearman dengan Matrik Contoh

Hubungan bivariat menggambarkan hubungan-atau korelasi- antara dua pemboleh ubah, dan. Dalam tutorial ini, kita membincangkan konsep korelasi dan menunjukkan bagaimana ia dapat digunakan untuk mengukur hubungan antara dua pemboleh ubah.

Terdapat dua kaedah utama untuk menghitung korelasi antara dua pemboleh ubah.

  • Pearson: Korelasi parametrik
  • Spearman: Korelasi bukan parametrik

Dalam tutorial ini, anda akan belajar

  • Korelasi Pearson
  • Korelasi Pangkat Spearman
  • Matriks Korelasi
  • Visualisasikan Matriks Korelasi

Korelasi Pearson

Kaedah korelasi Pearson biasanya digunakan sebagai pemeriksaan utama untuk hubungan antara dua pemboleh ubah.

The pekali korelasi , adalah ukuran kekuatan linear hubungan antara dua pembolehubah dan. Ia dikira seperti berikut:

dengan

  • , iaitu sisihan piawai bagi
  • , iaitu sisihan piawai bagi

Hubungannya berkisar antara -1 dan 1.

  • Nilai hampir atau sama dengan 0 membayangkan hubungan linear yang sedikit atau tidak antara dan.
  • Sebaliknya, semakin dekat dengan 1 atau -1, semakin kuat hubungan linear.

Kita dapat mengira ujian-t sebagai berikut dan memeriksa jadual pengedaran dengan tahap kebebasan sama dengan:

Korelasi Pangkat Spearman

Korelasi peringkat menyusun pemerhatian mengikut peringkat dan mengira tahap kesamaan antara pangkat. Korelasi peringkat mempunyai kelebihan untuk menjadi kuat kepada orang luar dan tidak berkaitan dengan penyebaran data. Perhatikan bahawa, korelasi peringkat sesuai untuk pemboleh ubah ordinal.

Korelasi peringkat Spearman, selalu berada di antara -1 dan 1 dengan nilai yang hampir dengan hujung menunjukkan hubungan yang kuat. Ia dikira seperti berikut:

dengan menyatakan kovarians antara pangkat dan. Penyebutnya mengira sisihan piawai.

Di R, kita dapat menggunakan fungsi cor (). Ia memerlukan tiga hujah, dan kaedahnya.

cor(x, y, method)

Hujah :

  • x: Vektor pertama
  • y: Vektor kedua
  • kaedah: Rumus yang digunakan untuk menghitung korelasi. Tiga nilai rentetan:
    • "pearson"
    • "kendall"
    • "spearman"

Argumen pilihan boleh ditambah sekiranya vektor mengandungi nilai yang hilang: use = "complete.obs"

Kami akan menggunakan set data BudgetUK. Set data ini melaporkan peruntukan anggaran isi rumah Inggeris antara tahun 1980 dan 1982. Terdapat 1519 pemerhatian dengan sepuluh ciri, antaranya:

  • wfood: berkongsi perbelanjaan bahagian makanan
  • wfuel: berkongsi perbelanjaan bahan bakar
  • wcloth: bahagian belanjawan untuk perbelanjaan pakaian
  • walc: berkongsi perbelanjaan alkohol
  • wtrans: berkongsi perbelanjaan pengangkutan
  • wother: bahagian perbelanjaan barang lain
  • totexp: jumlah perbelanjaan isi rumah dalam paun
  • pendapatan jumlah pendapatan isi rumah bersih
  • umur: umur isi rumah
  • kanak-kanak: bilangan anak
Contohnya
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 Kod

  • Kami mula-mula mengimport data dan melihat dengan fungsi sekilas () dari perpustakaan dplyr.
  • Tiga mata melebihi 500K, jadi kami memutuskan untuk mengecualikannya.
  • Ini adalah amalan biasa untuk menukar pemboleh ubah monetari dalam log. Ini membantu mengurangkan kesan outliers dan mengurangkan kecenderungan dalam set data.

Pengeluaran:

## 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 pekali korelasi antara pemboleh ubah pendapatan dan wfood dengan kaedah "pearson" dan "spearman".

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

pengeluaran:

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

Pengeluaran:

## [1] -0.2501252 

Matriks Korelasi

Korelasi bivariat adalah permulaan yang baik, tetapi kita dapat memperoleh gambaran yang lebih luas dengan analisis multivariat. Korelasi dengan banyak pemboleh ubah digambarkan di dalam matriks korelasi . Matriks korelasi adalah matriks yang mewakili korelasi pasangan semua pemboleh ubah.

Fungsi cor () mengembalikan matriks korelasi. Satu-satunya perbezaan dengan korelasi bivariat adalah kita tidak perlu menentukan pemboleh ubah yang mana. Secara lalai, R menghitung korelasi antara semua pemboleh ubah.

Perhatikan bahawa, korelasi tidak dapat dihitung untuk pemboleh ubah faktor. Kita perlu memastikan bahawa kita membuang ciri kategoris sebelum melewati kerangka data di dalam cor ().

Matriks korelasi adalah simetris yang bermaksud nilai di atas pepenjuru mempunyai nilai yang sama dengan yang di bawah. Lebih visual menunjukkan separuh matriks.

Kami mengecualikan children_fac kerana ia adalah pemboleh ubah tahap faktor. cor tidak melakukan korelasi pada pemboleh ubah 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 Kod

  • cor (data): Paparkan matriks korelasi
  • bulat (data, 2): Bulatkan matriks korelasi dengan dua perpuluhan
  • as.dist (): Menunjukkan babak kedua sahaja

Pengeluaran:

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

Tahap kepentingan

Tahap kepentingan berguna dalam beberapa keadaan ketika kita menggunakan kaedah pearson atau spearman. Fungsi rcorr () dari perpustakaan Hmisc menghitung nilai p bagi kami. Kami boleh memuat turun perpustakaan dari conda dan menyalin kod untuk menampalnya di terminal:

conda install -c r r-hmisc 

Rcorr () memerlukan kerangka data disimpan sebagai matriks. Kita boleh menukar data kita menjadi matriks sebelum 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 senarai mat_2 mengandungi tiga elemen:

  • r: Hasil matriks korelasi
  • n: Bilangan pemerhatian
  • P: nilai p

Kami berminat dengan elemen ketiga, nilai p. Adalah biasa untuk menunjukkan matriks korelasi dengan nilai p dan bukannya pekali korelasi.

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

Penjelasan Kod

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

Pengeluaran:

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 haba adalah kaedah lain untuk menunjukkan matriks korelasi. Perpustakaan GGally adalah lanjutan dari ggplot2. Pada masa ini, ia tidak terdapat di perpustakaan konda. Kita boleh memasang terus di konsol.

install.packages("GGally")

Perpustakaan merangkumi fungsi yang berbeza untuk menunjukkan statistik ringkasan seperti korelasi dan taburan semua pemboleh ubah dalam matriks.

Fungsi ggcorr () mempunyai 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)

Hujah:

  • df : Set data yang digunakan
  • kaedah : Formula untuk mengira korelasi. Secara lalai, berpasangan dan Pearson dikira
  • nbreaks : Kembalikan julat kategori untuk pewarnaan pekali. Secara lalai, tiada jeda dan kecerunan warna berterusan
  • digit : Bundarkan pekali korelasi. Secara lalai, tetapkan ke 2
  • rendah : Mengawal tahap pewarnaan yang lebih rendah
  • pertengahan : Mengawal tahap pewarnaan tengah
  • tinggi : Mengawal tahap pewarnaan yang tinggi
  • geom : Mengawal bentuk argumen geometri. Secara lalai, "jubin"
  • label : Nilai boolean. Paparkan atau tidak label. Secara lalai, tetapkan ke `FALSE`

Peta haba asas

Petak pakej yang paling asas adalah peta panas. Legenda grafik menunjukkan warna kecerunan dari - 1 hingga 1, dengan warna panas menunjukkan korelasi positif yang kuat dan warna sejuk, korelasi negatif.

library(GGally)ggcorr(data)

Penjelasan Kod

  • ggcorr (data): Hanya satu argumen yang diperlukan, iaitu nama bingkai data. Pemboleh ubah tahap faktor tidak termasuk dalam plot.

Pengeluaran:

Tambahkan kawalan ke peta panas

Kita boleh menambahkan lebih banyak kawalan pada grafik.

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

Penjelasan Kod

  • nbreaks = 6: pecahkan legenda dengan 6 peringkat.
  • low = "steelblue": Gunakan warna yang lebih terang untuk korelasi negatif
  • mid = "white": Gunakan warna putih untuk korelasi julat tengah
  • tinggi = "darkred": Gunakan warna gelap untuk korelasi positif
  • geom = "circle": Gunakan bulatan sebagai bentuk tingkap di peta panas. Ukuran bulatan berkadar dengan nilai korelasi mutlak.

Pengeluaran:

Tambahkan label pada peta panas

GGally membolehkan kami menambahkan label di dalam tingkap.

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

Penjelasan Kod

  • label = BENAR: Tambahkan nilai pekali korelasi di dalam peta haba.
  • color = "grey50": Pilih warna, iaitu kelabu
  • label_size = 3: Tetapkan ukuran label sama dengan 3

Pengeluaran:

ggpairs

Akhirnya, kami memperkenalkan fungsi lain dari perpustakaan GGaly. Ggpair. Ia menghasilkan graf dalam format matriks. Kami dapat memaparkan tiga jenis pengiraan dalam satu graf. Matriks adalah dimensi, dengan sama dengan jumlah pemerhatian. Bahagian atas / bawah memaparkan tingkap dan diagonal. Kami dapat mengawal maklumat apa yang ingin kami tunjukkan di setiap bahagian matriks. Formula untuk ggpair adalah:

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

Hujah :

  • df : Set data yang digunakan
  • lajur : Pilih lajur untuk melukis plot
  • tajuk : Sertakan tajuk
  • atas : Kawal kotak di atas pepenjuru plot. Perlu membekalkan jenis pengiraan atau grafik untuk dikembalikan. Sekiranya berterusan = "cor", kami meminta R untuk menghitung korelasi. Perhatikan bahawa, argumen perlu ada senarai. Argumen lain boleh digunakan, lihat [vignette] ("http://ggobi.github.io/ggally/#custom_functions") untuk maklumat lebih lanjut.
  • Lebih rendah : Kawal kotak di bawah pepenjuru.
  • Pemetaan : Menunjukkan estetika grafik. Sebagai contoh, kita dapat mengira grafik untuk kumpulan yang berbeza.

Analisis bivariate dengan ggpair dengan pengelompokan

Grafik seterusnya memaparkan tiga maklumat:

  • Matriks korelasi antara pemboleh ubah log_totexp, log_income, umur dan wtrans dikelompokkan mengikut sama ada isi rumah mempunyai anak atau tidak.
  • Plot taburan setiap pemboleh ubah mengikut kumpulan
  • Paparkan plot penyebaran dengan trend mengikut kumpulan
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 Kod

  • lajur = c ("log_totexp", "log_income", "age", "wtrans"): Pilih pemboleh ubah yang akan ditunjukkan dalam grafik
  • title = "Analisis bivari perbelanjaan pendapatan oleh isi rumah Inggeris": Tambahkan tajuk
  • atas = senarai (): Kawal bahagian atas grafik. Di atas pepenjuru
  • berterusan = bungkus ("cor", ukuran = 3)): Hitung pekali korelasi. Kami membungkus argumen secara berterusan di dalam fungsi wrap () untuk mengawal estetika grafik (iaitu ukuran = 3) -lower = list (): Mengawal bahagian bawah grafik. Di bawah pepenjuru.
  • berterusan = bungkus ("lancar", alpha = 0.3, ukuran = 0.1): Tambahkan plot penyebaran dengan arah linier. Kami membungkus argumen secara berterusan di dalam fungsi wrap () untuk mengawal estetika grafik (iaitu ukuran = 0.1, alpha = 0.3)
  • pemetaan = aes (warna = kanak-kanak_fac): Kami mahu setiap bahagian grafik ditumpuk oleh pemboleh ubah Children_fac, yang merupakan pemboleh ubah kategori yang mengambil nilai 1 jika isi rumah tidak mempunyai anak dan 2 sebaliknya

Pengeluaran:

Analisis bivariate dengan ggpair dengan pengelompokan separa

Grafik di bawah sedikit berbeza. Kami mengubah kedudukan 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 Kod

  • Kod yang sama seperti contoh sebelumnya kecuali:
  • pemetaan = aes (warna = kanak-kanak_fac): Pindahkan senarai ke atas = senarai (). Kami hanya mahu pengiraan disusun mengikut kumpulan di bahagian atas grafik.

Pengeluaran:

Ringkasan

Kita dapat meringkaskan fungsi dalam jadual di bawah:

perpustakaan

Objektif

kaedah

kod

Pangkalan

korelasi bivariate

Pearson

cor(dfx2, method = "pearson")

Pangkalan

korelasi bivariate

Spearman

cor(dfx2, method = "spearman")

Pangkalan

Korelasi multivariat

pearson

cor(df, method = "pearson")

Pangkalan

Korelasi multivariat

Spearman

cor(df, method = "spearman")

Hmisc

Nilai P

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

Ggally

peta haba

ggcorr(df)

Petak pelbagai variasi

cf code below

Artikel menarik...