我在R中做相关矩阵。我喜欢corrplot
包,因为它易于使用和漂亮的图形。帮助页面上的所有示例都是使用镜像行和列完成的,但我也能够使用不同数量的列和行来执行相关矩阵。
该软件包包含一个实现,可以让你用太大的p值来消除相关性,当矩阵是对称的时候它非常有效,但是当我做一个矩阵时,我无法弄清楚如何让它工作相关矩阵与两个不同的子集。
对于R来说,我是新手,所以非常感谢你的帮助。提前谢谢!
所以这些工作得很好:
corrplot(cor(My30variableSubset, My70variableSubset, use = "complete.obs"),
method = "circle", tl.col = "black", tl.cex=0.5, col=col1(200))
CIetPfor30variables <- cor.mtest(My30variableSubset, 0.95)
corrplot(cor(My30variableSubset, use = "complete.obs"),
method = "circle", tl.col = "black", tl.cex=0.5, col=col1(200),
p.mat = CIetPfor30variables[[1]], sig.level = 0.001, insig = "blank")
然而,这绝对不是:
corrplot(cor(MyCoolSubset, MyConcentrationSubset, use = "complete.obs"),
method = "circle", tl.col = "black", tl.cex=0.5, col=col1(200),
p.mat = CIetPfor70variables[[1]], sig.level = 0.001, insig = "blank")
原因是帮助中给出的cor.mtest函数无法处理这种情况。
cor.mtest <- function(mat, conf.level = 0.95) {
mat <- as.matrix(mat)
n <- ncol(mat)
p.mat <- lowCI.mat <- uppCI.mat <- matrix(NA, n, n)
diag(p.mat) <- 0
diag(lowCI.mat) <- diag(uppCI.mat) <- 1
for (i in 1:(n - 1)) {
for (j in (i + 1):n) {
tmp <- cor.test(mat[, i], mat[, j], conf.level = conf.level)
p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
lowCI.mat[i, j] <- lowCI.mat[j, i] <- tmp$conf.int[1]
uppCI.mat[i, j] <- uppCI.mat[j, i] <- tmp$conf.int[2]
}
}
return(list(p.mat, lowCI.mat, uppCI.mat))
}
所以我想我会解决我的问题,如果我有一个与上面相同的功能,除了它将采用两个不同的数据子集并给出p值和&amp;他们的相关性。
这是两个示例数据集的R代码。实际上,我有一个数据集,其中包含15 000个200个变量的观测值,我已经采用了70个&amp;我必须用于相关矩阵的30个变量子集。关键是cor.mtest -function只接受一个矩阵并给出p值和&amp;相互关系的东西。
variable1 <- c(25, 30, 56)
variable2 <- c(5, 1, 4)
variable3 <- c(160, 110, 220)
variable4 <- c(60, 11, 20)
variable5 <- c(3, 2, 1)
My30variableSubset <- data.frame(variable1, variable2)
My70variableSubset <- data.frame(variable3, variable4, variable5)