生成具有特定列且仅在 corrplot 中具有显着值的相关矩阵

Posted

技术标签:

【中文标题】生成具有特定列且仅在 corrplot 中具有显着值的相关矩阵【英文标题】:Generate correlation matrix with specific columns and only with significant values in corrplot 【发布时间】:2022-01-22 14:22:25 【问题描述】:

我有一个包含 14 列的 data.frame 数据库。我将这些列分为两组:[,1:6] and [,7:14]

df<-read.csv("http://renatabrandt.github.io/EBC2015/data/varechem.csv", row.names=1)

df

我想计算这两组列之间的相关性。 为此,我使用了这个命令并且效果很好:

#I want to correlate columns [1:6] with [7:14] only.
correlation_df<-cor(df[,1:6],
                    df[,7:14], method="spearman", use="pairwise.complete.obs")

#graph correlation especific colunms
corrplot(correlation_df,
         method="color", addCoef.col = "black")

但是,除了计算相关性之外,我希望图表仅显示显着的相关性(p 值

#I can get the significance level matrix
correlation_df_sig<-cor.mtest(df, conf.level = 0.95, method = "spearman")
correlation_df_sig

#仅生成具有显着值的相关矩阵

plot2<-corrplot(correlation_df,
         p.mat = correlation_df_sig$p,
         insig='blank',
         addCoef.col = "black")
plot2

我可以做些什么来修复这个视图?

OBS: 我试图在不考虑[,1:6] and [,7:14] 组的情况下生成一个完整的数组,但它也出错了。另外,我不想计算同一组中列之间的相关性。例如:第 1 列与第 2 列,第 1 列与第 3 列...

plot1<-corrplot(cor(df, method = 'spearman', use = "pairwise.complete.obs"),
         method = 'color', 
         addCoef.col = 'black',
         p.mat = correlation_df_sig$p,
         insig='blank',
         diag = FALSE,
         number.cex = 0.5,
         type='upper'
         )
plot1

【问题讨论】:

我不懂你的计算,不应该cor(df)[1:6, 7:14]吗? 是的,我可以,但是如何只显示重要的值? 【参考方案1】:

我会使用成熟的Hmisc::rcorr 进行计算。在corrplot::corrplot 中,将corr=p.mat= 子集化为[1:6, 7:14]

c_df <- Hmisc::rcorr(cor(correlation_df), type='spearman')

library(corrplot)
corrplot(corr=c_df$r[1:6, 7:14], p.mat=c_df$P[1:6, 7:14], sig.level=0.05, 
         method='color', diag=FALSE, addCoef.col=1, type='upper', insig='blank',
         number.cex=.8)

这似乎对应于 p 值。

m <- c_df$P[1:6, 7:14] < .05
m[lower.tri(m, diag=TRUE)] <- ''
as.data.frame(replace(m, lower.tri(m, diag=TRUE), ''))
#    Al    Fe    Mn   Zn    Mo Baresoil Humdepth    pH
# N     FALSE FALSE TRUE FALSE    FALSE    FALSE FALSE
# P            TRUE TRUE FALSE    FALSE    FALSE FALSE
# K                 TRUE FALSE    FALSE    FALSE  TRUE
# Ca                     FALSE     TRUE     TRUE FALSE
# Mg                               TRUE     TRUE  TRUE
# S                                        FALSE FALSE

【讨论】:

您好!你的答案正是问题所问的。但是我遇到了一种情况,我在 data.frame 中有 nodataNA 值。 corr 函数将如何解决这个问题?问候 @wesleysc352 " 具有少于 2 个非缺失值的对将 r 值设置为 NA。" 文档中有说明,只需键入 help(rcorr),它们的例如NA's

以上是关于生成具有特定列且仅在 corrplot 中具有显着值的相关矩阵的主要内容,如果未能解决你的问题,请参考以下文章

仅在 mysql “show tables” 中显示具有特定模式的表

如何仅在 recyclerview 中显示具有特定值的数据

仅在具有特定前缀的文件中搜索 IntelliJ 中的文本

特定字体仅在 Firefox 中具有不正确的下划线 - 错误在哪里,如何解决?

仅在最大日期而不是在组的其他条目中显示具有特定值的组

仅在选择具有特定值[重复]时才需要才需要域