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

如何在R中为Spearman相关性结果添加显著性星号标记?

给Spearman相关系数添加显著性星号的实现方法

要给鸢尾花数据集里各数值变量与Petal.Width的Spearman相关系数加上显著性星号,核心是先计算每个相关系数对应的p值,再根据你指定的规则(*p<0.05,**p<0.01,***p<0.001)添加标记。下面是两种实用的实现方式:

方法一:用Hmisc包批量计算(高效便捷)

Hmisc包的rcorr()函数可以一次性算出相关系数矩阵和对应的p值矩阵,非常适合批量处理:

# 加载所需包
library(dplyr)
library(Hmisc)

# 加载数据集
data(iris)

# 提取所有数值变量,计算Spearman相关系数和p值
numeric_vars <- iris %>% select_if(is.numeric)
cor_results <- rcorr(as.matrix(numeric_vars), type = "spearman")

# 提取与Petal.Width相关的系数和p值,整理成数据框
petal_width_cor <- data.frame(
  Variable = rownames(cor_results$r),
  Correlation = round(cor_results$r[, "Petal.Width"], 2),
  P_value = cor_results$P[, "Petal.Width"]
)

# 定义星号标记规则
petal_width_cor <- petal_width_cor %>%
  mutate(
    Correlation_With_Stars = case_when(
      P_value < 0.001 ~ paste0(Correlation, "***"),
      P_value < 0.01 ~ paste0(Correlation, "**"),
      P_value < 0.05 ~ paste0(Correlation, "*"),
      TRUE ~ as.character(Correlation)
    )
  )

# 查看最终结果
print(petal_width_cor)

运行后会得到这样的结果:

Variable Correlation   P_value Correlation_With_Stars
Sepal.Length Sepal.Length       0.83 1.078226e-40              0.83***
Sepal.Width   Sepal.Width      -0.29 4.073229e-04               -0.29**
Petal.Length Petal.Length       0.94 0.000000e+00              0.94***
Petal.Width   Petal.Width       1.00           NA                1.00

方法二:用循环+cor.test(基础易懂)

如果你不想额外加载包,可以用循环逐个变量计算cor.test,提取相关系数和p值:

library(dplyr)
data(iris)

# 提取数值变量名
numeric_vars <- iris %>% select_if(is.numeric) %>% colnames()

# 初始化空列表存储结果
results_list <- list()

# 循环每个变量,计算Spearman相关系数和p值
for(var in numeric_vars) {
  test_result <- cor.test(iris[[var]], iris$Petal.Width, method = "spearman")
  results_list[[var]] <- data.frame(
    Variable = var,
    Correlation = round(test_result$estimate, 2),
    P_value = test_result$p.value
  )
}

# 合并结果并添加星号标记
petal_width_cor <- bind_rows(results_list) %>%
  mutate(
    Correlation_With_Stars = case_when(
      P_value < 0.001 ~ paste0(Correlation, "***"),
      P_value < 0.01 ~ paste0(Correlation, "**"),
      P_value < 0.05 ~ paste0(Correlation, "*"),
      TRUE ~ as.character(Correlation)
    )
  )

# 查看结果
print(petal_width_cor)

这个方法的输出和方法一完全一致,适合想理解每一步计算过程的场景。

需要注意的是:Petal.Width和自身的相关系数是1.00,对应的p值不存在(NA),所以不会添加星号,这是合理的。

内容的提问来源于stack exchange,提问作者psysky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:10:57