2015-06-05 91 views
3

有没有办法使用此cor.mtest函数来计算p值多重比较(如p.adjust)?代码从http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.htmlR - Combine cor.mtest和p.adjust

谢谢!

cors<-cor(rel_tnum_data) 
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)) 
} 
res1 <- cor.mtest(rel_tnum_data, 0.95) 
res2 <- cor.mtest(rel_tnum_data, 0.99) 
corrplot(cors, p.mat = res1[[1]], sig.level=0.05, insig="blank", cl.align="r", tl.cex=0.6, order="hclust", type="lower", tl.srt=60, cl.ratio=0.1) 
+2

'psych'包中的'corr.test'可以返回调整后的p值。 (另请参阅[这个问题](http://stackoverflow.com/questions/26574670/corrplot-shows-insignificant-correlation-coefficients-even-when-insig-blank)为替代方法使用corr.test函数) – user20650

回答

1

您可以向量化的p值矩阵(例如RES1),已经由cor.mtest函数返回。之后,p.adjust函数将帮助您获得调整后的p值。

pAdj <- p.adjust(c(res1[[1]]), method = "BH") 

然后创建具有调整的p值的原始矩阵。

resAdj <- matrix(pAdj, ncol = dim(res1[[1]])[1]) 

然后corrplot应该准备好用调整后的p值创建你的图。

corrplot(cors, p.mat = resAdj, sig.level=0.05, insig="blank", cl.align="r", tl.cex=0.6, order="hclust", type="lower", tl.srt=60, cl.ratio=0.1) 

请注意p.mat = resAdj

+0

'BH'方法有什么作用?这里有一个数字会很棒。 - 你能解释一下这个调整是做什么的吗? –