我有92组相同类型的数据。
我想为任意两个可能的组合制作相关矩阵。
即,我想要一个 92x92
的矩阵。
使得元素 (ci
,cj
) 是 ci
和 cj
之间的相关性。
我该怎么做?
我有92组相同类型的数据。
我想为任意两个可能的组合制作相关矩阵。
即,我想要一个 92x92
的矩阵。
使得元素 (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函数在计算相关性时会使用矩阵的列。因此,您的矩阵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")
- Marc in the boximage
函数不会自动获取行和列的名称,因此必须手动添加。 - Marc in the box来看看qtlcharts。它可以让您创建交互式相关矩阵:
library(qtlcharts)
data(iris)
iris$Species <- NULL
iplotCorr(iris, reorder=TRUE)
axis(1, 1:dim(d)[2], colnames(d), las=2)
axis(2, 1:dim(d)[2], colnames(d), las=2)
如果 las=0,名称将会翻转回它们的正常位置,但我的名称很长,所以我使用了 las=2 来使它们与轴垂直。
编辑2:为了抑制 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')
Hmisc
软件包中的cor
函数或rcorr
函数。 - Manuel Ramón