Làm thế nào để hiển thị một ma trận tương quan với các mục bị thiếu?


10

Tôi muốn có được một biểu diễn đồ họa về mối tương quan trong các bài viết tôi đã thu thập được cho đến nay để dễ dàng khám phá mối quan hệ giữa các biến. Tôi đã từng vẽ một biểu đồ (lộn xộn) nhưng hiện tại tôi có quá nhiều dữ liệu.

Về cơ bản, tôi có một bảng với:

  • [0]: tên của biến 1
  • [1]: tên của biến 2
  • [2]: giá trị tương quan

Ma trận "tổng thể" không đầy đủ (ví dụ: tôi có mối tương quan của V1 * V2, V2 * V3, nhưng không phải là V1 * V3).

Có cách nào để biểu thị đồ họa này không?

Câu trả lời:


12

Dựa trên phản hồi của @ GaBorgulya, tôi sẽ khuyên bạn nên thử biến động hoặc biểu đồ mức (hay còn gọi là hiển thị bản đồ nhiệt).

Ví dụ: sử dụng 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="")

(Ở đây, mục nhập bị thiếu được hiển thị bằng màu xám trơn, nhưng bảng màu mặc định có thể được thay đổi và bạn cũng có thể đặt "NA" trong chú giải.)

nhập mô tả hình ảnh ở đây

hoặc là

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

(Ở đây, các giá trị bị thiếu chỉ đơn giản là không được hiển thị. Tuy nhiên, bạn có thể thêm một geom_text()và hiển thị một cái gì đó như "NA" trong ô trống.)

nhập mô tả hình ảnh ở đây


2
+1 cho ggfluctuation, chưa từng thấy điều đó trước đây! Bài đăng này có mã hữu ích khác để trực quan hóa loại công cụ này: stackoverflow.com/questions/5453336/ Kẻ
Đuổi theo

@Chase (+1) Thx. BTW, có vẻ như tôi đã gặp một số vấn đề với bảng màu của mình cho các giá trị tương quan âm.
chl

Sắp xếp lại các hàng và cột theo ( hclust(…)$order) [ stat.ethz.ch/R-manual/R-devel/l Library / stat / html / hclust.html] việc trực quan hóa sẽ dễ dàng hơn để tổng quan.
GaBorgulya

@GaBorgulya Điểm tốt. Tôi sử dụng điều này khi tôi đang thực hiện phân tích dữ liệu thăm dò các biến không có thứ tự cụ thể (như trường hợp dữ liệu không gian hoặc thời gian hoặc dữ liệu có cấu trúc mà bạn muốn xem). Các mixOmics::cimchức năng là rất tốt cho điều đó. Một vấn đề liên quan đã được thảo luận ở đây, stats.stackexchange.com/questions/8370/ .
chl

5

Dữ liệu của bạn có thể giống như

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

Bạn có thể sắp xếp lại bàn dài của mình thành một bảng rộng với mã R sau

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

Bạn lấy

  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

Bây giờ bạn có thể sử dụng các kỹ thuật để hiển thị các ma trận tương quan (ít nhất là các ma trận có thể đối phó với các giá trị bị thiếu).


2
các reshapegói có thể hữu ích là tốt. Khi bạn đã có e, hãy xem xét một cái gì đó nhưlibrary(reshape) cast(melt(e), name1 ~ name2)
Đuổi theo

3

Các corrplotgói là một chức năng hữu ích cho việc hình dung ma trận tương quan. Nó chấp nhận một ma trận tương quan làm đối tượng đầu vào và có một số tùy chọn để hiển thị chính ma trận. Một tính năng hay là nó có thể sắp xếp lại các biến của bạn bằng cách sử dụng các phương pháp phân cụm hoặc PCA phân cấp.

Xem câu trả lời được chấp nhận trong chủ đề này để có một ví dụ trực quan.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.