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

如何计算校正p值并添加至corrplot矩阵及结果数据列中?

问题

我用以下R代码生成了相关矩阵和配对p值,现在需要计算每个相关性的校正p值,添加到现有p值列后面,同时把校正p值整合到corrplot的可视化中。

library(corrplot)
# 计算相关矩阵
M = cor(mtcars)

# 计算相关性检验的p值
testRes = cor.mtest(mtcars, conf.level = 0.95)

# 转换为配对p值的数据框
pval = as.data.frame(as.table(testRes$p))
head(pval)

当前输出:

Var1    Var2    Freq
   <fct>    <fct>   <dbl>
1   mpg     mpg     0.000000e+00
2   cyl     mpg     6.112687e-10
3   disp    mpg     9.380327e-10
4   hp      mpg     1.787835e-07
5   drat    mpg     1.776240e-05
6   wt      mpg     1.293959e-10
解决方案

1. 计算校正p值并添加到数据框

用p.adjust()函数对原始p值进行多重比较校正(常用方法有"holm"、"fdr"等,这里以"fdr"为例,可根据需求替换),然后将校正后的p值作为新列加入pval数据框:

# 计算校正p值,这里用FDR校正
pval$p_adj = p.adjust(pval$Freq, method = "fdr")

# 查看结果
head(pval)

执行后pval会新增p_adj列,展示校正后的p值。

2. 将校正p值转换为矩阵格式

为适配corrplot的输入要求,需要把校正后的p值转换为和原始相关矩阵M维度一致的矩阵:

# 从数据框提取校正p值,转换为矩阵
p_adj_matrix = matrix(pval$p_adj, nrow = nrow(M), dimnames = dimnames(M))

3. 在corrplot中整合校正p值

可以通过两种方式展示校正p值:

  • 方式一:用校正p值标记显著性
    绘制相关矩阵时,指定p.mat = p_adj_matrix,让图中只显示校正后显著的相关性标记:

    corrplot(M, 
             method = "circle",
             p.mat = p_adj_matrix, 
             sig.level = 0.05,  # 设置显著性阈值
             insig = "blank")   # 不显著的相关性留空
    
  • 方式二:在图中显示校正p值
    如果需要直接在图上展示校正后的p值,可以用混合图形式呈现:

    corrplot.mixed(M,
                   lower = "circle",
                   upper = "number",
                   p.mat = p_adj_matrix,
                   sig.level = 0.05,
                   insig = "p-value",  # 不显著的位置显示校正p值
                   p.cex = 0.7)        # 调整p值字体大小
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:14:56