2011-07-21 17 views
13

Khi chạy cor() trên một chuỗi thời gian với nhiều biến, tôi nhận được một bảng có hàng và cột cho mỗi biến, cho thấy mối tương quan giữa chúng.Hiển thị các bảng tương quan như danh sách giảm dần

Làm cách nào tôi có thể xem bảng này dưới dạng danh sách từ tương quan nhất với ít tương quan nhất (loại bỏ tất cả kết quả NA và kết quả tự ánh xạ lại (tức là tương quan A đến A)). Tôi cũng muốn tính kết quả nghịch đảo (âm) làm giá trị tuyệt đối, nhưng vẫn hiển thị chúng dưới dạng âm.

Vì vậy, các đầu ra mong muốn sẽ là một cái gì đó như:

A,B,0.98 
A,C,0.9 
C,R,-0.8 
T,Z,0.5 

Trả lời

13

Dưới đây là một trong nhiều cách tôi có thể nghĩ để làm điều này. Tôi sử dụng gói Reshape vì cú pháp melt() là dễ dàng cho tôi để nhớ, nhưng lệnh melt() có thể khá dễ dàng được thực hiện với các lệnh cơ sở R:

require(reshape) 
## set up dummy data 
a <- rnorm(100) 
b <- a + (rnorm(100, 0, 2)) 
c <- a + b + (rnorm(100)/10) 
df <- data.frame(a, b, c) 
c <- cor(df) 
## c is the correlations matrix 

## keep only the lower triangle by 
## filling upper with NA 
c[upper.tri(c, diag=TRUE)] <- NA 

m <- melt(c) 

## sort by descending absolute correlation 
m <- m[order(- abs(m$value)), ] 

## omit the NA values 
dfOut <- na.omit(m) 

## if you really want a list and not a data.frame 
listOut <- split(dfOut, 1:nrow(dfOut)) 
10

Sử dụng cơ sở R (nơi cors là ma trận tương quan):

up <- upper.tri(cors) 
out <- data.frame(which(up, arr.ind=TRUE), cor=cors[up]) 
out <- out[!is.na(out$cor),] 
out[order(abs(out$cor), decreasing=TRUE),] 
2

Thay thế ... bằng cuộc gọi tương quan của bạn.

library(reshape) 
x <- subset(melt(cor(...)), value != 1 | value != NA) 
x <- x[with(x, order(-abs(x$value))),] 

Nếu bạn nhận được nhiều NA trong mối tương quan của mình, có thể thử sử dụng đối số use="complete.obs" trong cuộc gọi tương quan của bạn.

Các vấn đề liên quan