我有92组相同类型的数据。
我想为任何两个组合建立一个相关矩阵。
即我想要一个92 x92的矩阵。
这样元素(ci,cj)应该是ci和cj之间的相关性。
我怎么做?
我有92组相同类型的数据。
我想为任何两个组合建立一个相关矩阵。
即我想要一个92 x92的矩阵。
这样元素(ci,cj)应该是ci和cj之间的相关性。
我怎么做?
Answers:
一个例子,
d <- data.frame(x1=rnorm(10),
x2=rnorm(10),
x3=rnorm(10))
cor(d) # get correlations (returns matrix)
您可以使用“ 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
该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()
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
函数不会自动获取行名和列名,因此必须添加它。
还有其他方法可以在这里实现:(将相关矩阵绘制成图表),但是我喜欢您的版本,并且在框中有相关性。有没有一种方法可以将变量名添加到x和y列中,而不仅仅是这些索引号?对我来说,这将是一个完美的解决方案。谢谢!
编辑:我试图评论[框中的Marc]的帖子,但我显然不知道自己在做什么。但是,我确实设法自己回答了这个问题。
如果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')
cor
功能,或将rcorr
在功能Hmisc
包