Bagaimana cara menampilkan matriks korelasi dengan entri yang hilang?


10

Saya ingin mendapatkan representasi grafis dari korelasi dalam artikel yang telah saya kumpulkan sejauh ini untuk dengan mudah mengeksplorasi hubungan antar variabel. Saya dulu menggambar grafik (berantakan) tetapi saya memiliki terlalu banyak data sekarang.

Pada dasarnya, saya punya meja dengan:

  • [0]: nama variabel 1
  • [1]: nama variabel 2
  • [2]: nilai korelasi

Matriks "keseluruhan" tidak lengkap (misalnya, saya memiliki korelasi V1 * V2, V2 * V3, tetapi tidak V1 * V3).

Apakah ada cara untuk menggambarkan ini secara grafis?

Jawaban:


12

Membangun di atas @ GaBorgulya tanggapan, saya akan menyarankan mencoba fluktuasi atau plot level (alias menampilkan peta panas).

Misalnya, menggunakan ggplot2 :

library(ggplot2, quietly=TRUE)
k <- 100
rvals <- sample(seq(-1,1,by=.001), k, replace=TRUE)
rvals[sample(1:k, 10)] <- NA
cc <- matrix(rvals, nr=10)
ggfluctuation(as.table(cc)) + opts(legend.position="none") + 
  labs(x="", y="")

(Di sini, entri yang hilang ditampilkan dalam warna abu-abu polos, tetapi skema warna default dapat diubah, dan Anda juga dapat memasukkan "NA" dalam legenda.)

masukkan deskripsi gambar di sini

atau

ggfluctuation(as.table(cc), type="color") + labs(x="", y="") +
  scale_fill_gradient(low = "red",  high = "blue")

(Di sini, nilai yang hilang sama sekali tidak ditampilkan. Namun, Anda dapat menambahkan geom_text()dan menampilkan sesuatu seperti "NA" di sel kosong.)

masukkan deskripsi gambar di sini


2
+1 untuk ggfluctuation, belum pernah melihatnya sebelumnya! Posting ini memiliki kode lain yang berguna untuk memvisualisasikan jenis tanggal ini: stackoverflow.com/questions/5453336/…
Chase

@Chase (+1) Thx. BTW, sepertinya saya punya beberapa masalah dengan skema warna saya untuk nilai korelasi negatif.
chl

Menyusun ulang baris dan kolom dengan ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html] visualisasi akan lebih mudah untuk ditinjau .
GaBorgulya

@ GaBorgulya Poin bagus. Saya menggunakan ini ketika saya melakukan analisis data eksplorasi dan variabel tidak memiliki urutan tertentu (seperti halnya data spasial atau temporal, atau data terstruktur yang ingin Anda lihat apa adanya). The mixOmics::cimFungsi ini sangat baik untuk itu. Masalah terkait telah didiskusikan di sini, stats.stackexchange.com/questions/8370/… .
chl

5

Data Anda mungkin seperti

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

Anda dapat mengatur ulang tabel panjang Anda menjadi lebar dengan kode R berikut

d = structure(list(name1 = c("V1", "V2"), name2 = c("V2", "V3"), 
    correlation = c(0.2, 0.4)), .Names = c("name1", "name2", 
    "correlation"), row.names = 1:2, class = "data.frame")
k = d[, c(2, 1, 3)]
names(k) = names(d)
e = rbind(d, k)
x = with(e, reshape(e[order(name2),], v.names="correlation", 
  idvar="name1", timevar="name2", direction="wide"))
x[order(x$name1),]

Anda mendapatkan

  name1 correlation.V1 correlation.V2 correlation.V3
1    V1             NA            0.2             NA
3    V2            0.2             NA            0.4
4    V3             NA            0.4             NA

Sekarang Anda dapat menggunakan teknik untuk memvisualisasikan matriks korelasi (setidaknya yang dapat mengatasi nilai yang hilang).


2
yang reshapepaket dapat berguna juga. Setelah Anda miliki e, pertimbangkan sesuatu sepertilibrary(reshape) cast(melt(e), name1 ~ name2)
Mengejar

3

The corrplotpaket adalah fungsi yang berguna untuk memvisualisasikan matriks korelasi. Ini menerima matriks korelasi sebagai objek input dan memiliki beberapa opsi untuk menampilkan matriks itu sendiri. Fitur yang bagus adalah ia dapat menyusun ulang variabel Anda menggunakan hierarchical clustering atau metode PCA.

Lihat jawaban yang diterima di utas ini untuk contoh visualisasi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.