Tôi có 92 bộ dữ liệu cùng loại.
Tôi muốn tạo một ma trận tương quan cho bất kỳ sự kết hợp nào có thể.
tức là tôi muốn một ma trận 92 x92.
sao cho phần tử (ci, cj) phải tương quan giữa ci và cj.
Làm thế nào để làm điều đó?
Tôi có 92 bộ dữ liệu cùng loại.
Tôi muốn tạo một ma trận tương quan cho bất kỳ sự kết hợp nào có thể.
tức là tôi muốn một ma trận 92 x92.
sao cho phần tử (ci, cj) phải tương quan giữa ci và cj.
Làm thế nào để làm điều đó?
Câu trả lời:
Một ví dụ,
d <- data.frame(x1=rnorm(10),
x2=rnorm(10),
x3=rnorm(10))
cor(d) # get correlations (returns matrix)
Bạn có thể sử dụng gói 'corrplot'.
d <- data.frame(x1=rnorm(10),
x2=rnorm(10),
x3=rnorm(10))
M <- cor(d) # get correlations
library('corrplot') #package corrplot
corrplot(M, method = "circle") #plot matrix
Thông tin thêm tại đây: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
Hàm cor sẽ sử dụng các cột của ma trận để tính toán tương quan. Vì vậy, số hàng phải giống nhau giữa ma trận x và ma trận y của bạn . Ví dụ.:
set.seed(1)
x <- matrix(rnorm(20), nrow=5, ncol=4)
y <- matrix(rnorm(15), nrow=5, ncol=3)
COR <- cor(x,y)
COR
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, xlab="x column", ylab="y column")
text(expand.grid(x=seq(dim(x)[2]), y=seq(dim(y)[2])), labels=round(c(COR),2))
Dưới đây là một ví dụ về các nhãn hàng và cột tùy chỉnh trên ma trận tương quan được tính bằng một ma trận:
png("corplot.png", width=5, height=5, units="in", res=200)
op <- par(mar=c(6,6,1,1), ps=10)
COR <- cor(iris[,1:4])
image(x=seq(nrow(COR)), y=seq(ncol(COR)), z=cor(iris[,1:4]), axes=F, xlab="", ylab="")
text(expand.grid(x=seq(dim(COR)[1]), y=seq(dim(COR)[2])), labels=round(c(COR),2))
box()
axis(1, at=seq(nrow(COR)), labels = rownames(COR), las=2)
axis(2, at=seq(ncol(COR)), labels = colnames(COR), las=1)
par(op)
dev.off()
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column")
image
chức năng không tự động lấy tên hàng và cột, vì vậy đây phải được thêm vào.
Có những cách khác để đạt được điều này ở đây: ( Vẽ ma trận tương quan thành đồ thị ), nhưng tôi thích phiên bản của bạn với các tương quan trong các ô. Có cách nào để thêm tên biến vào cột x và y thay vì chỉ những số chỉ số đó không? Đối với tôi, đó sẽ là một giải pháp hoàn hảo. Cảm ơn!
chỉnh sửa: Tôi đang cố gắng bình luận về bài đăng của [Marc in the box], nhưng rõ ràng tôi không biết mình đang làm gì. Tuy nhiên, tôi đã xoay sở để trả lời câu hỏi này cho chính mình.
nếu d là ma trận (hoặc khung dữ liệu ban đầu) và tên cột là những gì bạn muốn, thì các thao tác sau sẽ hoạt động:
axis(1, 1:dim(d)[2], colnames(d), las=2)
axis(2, 1:dim(d)[2], colnames(d), las=2)
las = 0 sẽ lật tên trở lại vị trí bình thường của chúng, của tôi dài, vì vậy tôi sử dụng las = 2 để làm cho chúng vuông góc với trục.
edit2: để loại bỏ hàm image () in các số trên lưới (nếu không chúng sẽ chồng lên các nhãn biến của bạn), hãy thêm xaxt = 'n', ví dụ:
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column", xaxt='n')
cor
chức năng hoặcrcorr
chức năng trongHmisc
gói