如何计算校正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
相关产品推荐
相关产品推荐

