r - 即使设置了 insig = "blank",corrplot 也显示不显着的相关系数

标签 r r-corrplot

我喜欢使用 corrplot 函数来使用相关图,并在单元格中打印相关系数(使用 addCoef.coladdCoefasPercent = TRUE) 。我还喜欢从图中删除无关紧要的相关性(使用 insig = "blank")。问题是,这仅适用于背景颜色,但不适用于系数本身,因此仍然打印系数本身!请参阅:

set.seed(123)
par(cex=0.8) # trick for cor. coef font size, see http://stackoverflow.com/q/26574054/684229
col1 <-rainbow(100, s = 1, v = 1, start = 0, end = 0.9, alpha = 1)
test <- matrix(data=rnorm(400),nrow=20,ncol=20)


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))
}

cor1 <- cor.mtest(test, 0.95)

corrplot(cor(test), p.mat = cor1[[1]], insig = "blank", method = "color", addCoef.col="grey", 
    order = "AOE", tl.cex = 1/par("cex"),
    cl.cex = 1/par("cex"), addCoefasPercent = TRUE)

现在您可以看到,对于不重要的单元格也打印了系数:

enter image description here

要查看哪些单元格不重要,可以使用以下命令:

corrplot(cor(test), p.mat = cor1[[1]], insig = "pch", method = "color", addCoef.col="grey", 
    order = "AOE", tl.cex = 1/par("cex"),
    cl.cex = 1/par("cex"), addCoefasPercent = TRUE)

也许这是 corrplot 包的一个错误?

如何摆脱在无关紧要的单元格中打印系数?

最佳答案

你必须为此做一些工作。您需要为 p 值手动定义颜色向量,并将其传递给 addCoef.col

如果您按字母顺序排序,那就很简单

mycol <- ifelse(c(cor1[[1]] < 0.05), "black", "white")

corrplot(cor(test), p.mat = cor1[[1]] , insig = "blank", method = "color", 
         addCoef.col=mycol ,
         order = "original", tl.cex = 1/par("cex"), 
         cl.cex = 1/par("cex"), addCoefasPercent = TRUE)

但是,当您想按特征值排序时,您需要在 corrplot 函数之外计算排序

ord <-   corrMatOrder(cor(test), order="AOE")
M <- cor(test)[ord, ord]

pval <- psych::corr.test(data.frame(test), adjust="none")$p[ord, ord]
mycol <- ifelse(c(pval < 0.05), "black", "white")


corrplot(M, p.mat = pval , insig = "blank", method = "color", addCoef.col=mycol ,
         order = "original", tl.cex = 1/par("cex"), 
         cl.cex = 1/par("cex"), addCoefasPercent = TRUE)

enter image description here

<小时/>

编辑@Masi 的评论

要更新颜色条上的限制,请使用 cl.lim 设置限制

 corrplot(cor(test), p.mat = cor1[[1]] , insig = "blank", method = "color", 
       addCoef.col=mycol , addCoefasPercent=TRUE, 
       order = "original", cl.lim = c(-100, 100))

关于r - 即使设置了 insig = "blank",corrplot 也显示不显着的相关系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574670/

相关文章:

r - 如何拆分和过滤字符串?

html - Shiny Rendertable 中的单元格着色

r - 带有 2 向方差分析的 p 值的汇总表(平均值 + 标准误差)

r - 有没有办法在 Shiny 中构建时显示绘图,而不是等待所有绘图?

r corrplot 与聚类 : default dissimilarity measure for correlation matrix

r - 未使用的参数 - corrplot?

r - 我可以在 R 标记中使用 vim 高亮代码吗?

r - 如何更改 corrplot 的颜色、字体类型和大小?

r - R 中的 corrplot 参数