如何使用GGally包的ggcorr函数为相关性图添加P值
解决方案
首先纠正一个细节:ggcorr是GGally包中的函数,并非独立的ggcorr包,所以正确的安装和加载方式是:
install.packages("GGally") library(GGally)
ggcorr本身没有直接添加P值的参数,但可以通过先计算相关系数与P值,再自定义标签的方式实现需求,具体步骤如下:
方法一:用psych包快速批量计算(推荐)
- 安装并加载
psych包,批量计算相关系数和P值
install.packages("psych") library(psych) # 计算iris前4列的Pearson相关系数及对应P值 corr_results <- corr.test(iris[,1:4], method = "pearson")
- 生成包含相关系数和P值的自定义标签
把相关系数保留两位小数,P值按精度要求格式化,合并成r=0.87\np<0.001这类显示格式:
# 提取相关系数矩阵和P值矩阵 r_matrix <- corr_results$r p_matrix <- corr_results$p # 构建标签矩阵 label_matrix <- matrix( paste0("r=", round(r_matrix, 2), "\np=", ifelse(p_matrix < 0.001, "<0.001", round(p_matrix, 3))), nrow = nrow(r_matrix), dimnames = dimnames(r_matrix) )
- 绘制带P值的相关性图
将自定义标签矩阵传入ggcorr的label_matrix参数:
ggcorr(iris[,1:4], method = c("everything", "pearson"), label = TRUE, label_matrix = label_matrix)
方法二:用基础R循环计算(无需额外包)
如果不想安装psych包,可通过基础R的cor.test循环计算P值:
# 初始化空矩阵存储P值 p_matrix <- matrix(NA, ncol=4, nrow=4, dimnames=list(names(iris[,1:4]), names(iris[,1:4]))) # 循环计算每对变量的P值 for (i in 1:4) { for (j in 1:4) { if (i <= j) { test <- cor.test(iris[,i], iris[,j], method="pearson") p_matrix[i,j] <- test$p.value p_matrix[j,i] <- test$p.value } } } # 生成标签矩阵 label_matrix <- matrix( paste0("r=", round(cor(iris[,1:4], method="pearson"), 2), "\np=", ifelse(p_matrix < 0.001, "<0.001", round(p_matrix, 3))), nrow = 4, dimnames = dimnames(p_matrix) ) # 绘图 ggcorr(iris[,1:4], method = c("everything", "pearson"), label = TRUE, label_matrix = label_matrix)
以上两种方法都能让相关性图的每个单元格同时显示Pearson相关系数r和对应的P值。
内容的提问来源于stack exchange,提问作者maya zadok
相关产品推荐
相关产品推荐

