90

我有 92 组相同类型的数据。

我想为任何两种可能的组合制作一个相关矩阵。

即,我想要一个矩阵92x92

这样元素 ( ci, cj) 应该是 和 之间的相关cicj

我怎么做?

4

5 回答 5

106

一个例子,

 d <- data.frame(x1=rnorm(10),
                 x2=rnorm(10),
                 x3=rnorm(10))
cor(d) # get correlations (returns matrix)
于 2012-05-21T07:39:39.690 回答
76

您可以使用“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

在此处输入图像描述

更多信息在这里:http ://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html

于 2014-07-31T18:48:56.073 回答
18

cor函数将在计算相关性时使用矩阵的列。因此,矩阵x和矩阵y之间的行数必须相同。前任。:

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

在此处输入图像描述

编辑:

以下是使用单个矩阵计算的相关矩阵上的自定义行和列标签的示例:

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()

在此处输入图像描述

于 2012-05-21T07:33:50.523 回答
16

看看qtlcharts。它允许您创建交互式相关矩阵:

library(qtlcharts)
data(iris)
iris$Species <- NULL
iplotCorr(iris, reorder=TRUE)

在此处输入图像描述

当您关联更多变量时,它会更令人印象深刻,例如在包的小插图中: 在此处输入图像描述

于 2016-05-22T20:38:24.290 回答
2

这里还有其他方法可以实现这一点:(将相关矩阵绘制成图表),但我喜欢你的版本,其中包含框中的相关性。有没有办法将变量名称添加到 x 和 y 列,而不仅仅是那些索引号?对我来说,这将使它成为一个完美的解决方案。谢谢!

编辑:我试图评论 [Marc in the box] 的帖子,但我显然不知道我在做什么。但是,我确实设法为自己回答了这个问题。

如果 d 是矩阵(或原始数据框)并且列名是您想要的,那么以下工作:

axis(1, 1:dim(d)[2], colnames(d), las=2)
axis(2, 1:dim(d)[2], colnames(d), las=2)

las=0 会将名称翻转回它们的正常位置,我的很长,所以我使用 las=2 使它们垂直于轴。

edit2:要抑制在网格上打印数字的 image() 函数(否则它们会与变量标签重叠),请添加 xaxt='n',例如:

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')
于 2013-02-12T20:07:45.163 回答