You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用GGally包的ggcorr函数为相关性图添加P值

解决方案

首先纠正一个细节:ggcorr是GGally包中的函数,并非独立的ggcorr包,所以正确的安装和加载方式是:

install.packages("GGally")
library(GGally)

ggcorr本身没有直接添加P值的参数,但可以通过先计算相关系数与P值,再自定义标签的方式实现需求,具体步骤如下:

方法一:用psych包快速批量计算(推荐)

  1. 安装并加载psych包,批量计算相关系数和P值
install.packages("psych")
library(psych)

# 计算iris前4列的Pearson相关系数及对应P值
corr_results <- corr.test(iris[,1:4], method = "pearson")
  1. 生成包含相关系数和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)
)
  1. 绘制带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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 23:45:11