如何比较两个不同子集的相关矩阵中的过大p值?

时间:2015-01-12 11:26:41

标签: r data-visualization correlation r-corrplot

我在R中做相关矩阵。我喜欢corrplot包,因为它易于使用和漂亮的图形。帮助页面上的所有示例都是使用镜像行和列完成的,但我也能够使用不同数量的列和行来执行相关矩阵。

The corrplot help page

该软件包包含一个实现,可以让你用太大的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)

0 个答案:

没有答案