我如何创buildR中的相关matrix?
我有92套同types的数据。
我想为任何两种可能的组合做一个相关matrix。
即我想要一个92×92的matrix。
使得元素(ci,cj)应该是ci和cj之间的相关性。
我怎么做?
一个例子,
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函数将在相关性的计算中使用matrix的列。 所以,matrixx和matrixy之间的行数必须相同。 例:
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))
编辑:
以下是使用单个matrix计算的相关matrix上的自定义行和列标签的示例:
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()
看看qtlcharts 。 它允许您创build交互式相关matrix:
library(qtlcharts) data(iris) iris$Species <- NULL iplotCorr(iris, reorder=TRUE)
当你把更多的variables关联起来的时候,这更令人印象深刻,比如在包的小插曲里:
在这里还有其他的方法可以实现这一点:(将相关matrix绘制成图 ),但是我喜欢你的版本和框中的相关性。 有没有办法将variables名称添加到x和y列,而不仅仅是这些索引号? 对我来说,这将是一个完美的解决scheme。 谢谢!
编辑:我试图评论[马克在框中]的post,但我显然不知道我在做什么。 不过,我自己也设法回答这个问题。
如果d是matrix(或原始数据框)并且列名是您想要的,那么以下工作:
axis(1, 1:dim(d)[2], colnames(d), las=2) axis(2, 1:dim(d)[2], colnames(d), las=2)
拉斯维加斯= 0将名称回到他们的正常位置,我很长,所以我用拉斯维加斯= 2,使他们垂直于轴。
编辑2:禁止在网格上打印数字的图像()函数(否则它们重叠你的variables标签),添加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')