高级可视化系列 | 带显著性标记的组合型相关性矩阵

onlybugs 轻松玩转生信 2023-07-11 21:06 发表于湖北

 上文中讲了基本的层次聚类相关性饼图矩阵绘制,但是很多时候我们还需要添加对应的显著性检验p值标记以及将数字展示在相关性矩阵中。




本篇文章的主要内容有:

  • 绘制只有一半的相关性矩阵并组合。

    图片

  • 在相关性矩阵中添加显著性标记以及置信区间。


    图片

  • 通过多种参数配合以及显著性标记绘制高级感十足的相关性矩阵。


    图片

    图片


首先,简单回顾一下相关性矩阵。相关性矩阵是一个用于衡量不同变量之间相关关系的矩阵。在统计学和数据分析中,相关性矩阵常用于描述变量之间的线性相关性程度,相关性矩阵的每一个位置(i, j)表示第i个变量和第j个变量之间的相关系数。关于基本的相关性矩阵绘制已经展示在上次的文章中:

层次聚类相关性饼图矩阵绘制

onlybugs,公众号:轻松玩转生信高级可视化系列 | 层次聚类相关性饼图矩阵1

接下来,我们继续使用经典示例数据集mtcars来展示不同变量之间的相关性吧!



01

绘制只有一半的相关性矩阵并组合


这里不多说废话,先加载包和计算相关性矩阵

library(corrplot)
mt = mtcarsmcor = cor(mt)


接下来我们依照上文的操作绘制一个饼图相关性矩阵然后选择类型为一半

corrplot(mcor,         tl.col = 'black',         method = 'pie'         type = 'upper',         diag = T)

图片

这样我们通过type参数的控制就得到了一半的相关性矩阵,不过很多时候我们并不想看到变量和自身的相关性系数为1,这里可以使用diag参数控制

corrplot(mcor,         tl.col = 'black',         method = 'pie',          type = 'upper',         diag = F)

图片


通过改变类型和type还可以绘制不一样的下三角相关性矩阵


图片


比如上面的数字型看起来就十分的清晰并且和饼图遥相对应。


但是我们到此仅仅只是实现了一半相关性矩阵的可视化,而无法完整的绘制对角不同的结果。corrplot给出了一个add的参数,允许我们在同一个画板上连续绘图。

通俗来说,就好比在一张白纸上绘画,add=F的时候画完了就扔了,add=T的时候画完了可以接着画。但是要万分注意,需要先有白纸才能画图,我们这里需要先绘制一个完整的作为底子的corrplot,然后再使用add=T来绘制余下部分。


下面给出一个组合案例,将椭圆和数字进行组合绘制对角不同的相关性矩阵。

# 绘制白纸部分 corrplot(mcor,tl.col = 'black',         number.cex = .5,diag = F)#  绘制上三角的结果corrplot(mcor,add=T,         cl.pos = 'n',tl.pos = 'n',         method = 'ellipse',type = 'upper',diag = F)# 绘制下三角的结果corrplot(mcor,add=T,         cl.pos = 'n',tl.pos = 'n',         method = 'number',type = 'lower',diag = F)


这里使用tl.pos以及cl.pos舍弃新绘制结果的图例以及标题,然后通过diag=F参数将结果中的对角线位置空出来。


图片

当然了,我们也可以有其它的组合方式,

corrplot(mcor,tl.col = 'black',         col = rev(COL2('RdBu', 200)),         number.cex = .5,diag = F)corrplot(mcor,add=T,         col = rev(COL2('RdBu', 200)),         cl.pos = 'n',tl.pos = 'n',         method = 'shade',type = 'upper',diag = F)corrplot(mcor,add=T,         col = rev(COL2('RdBu', 200)),         cl.pos = 'n',tl.pos = 'n',         method = 'pie',type = 'lower',diag = F)


这里的结果使用了我们上次提到的rev函数将颜色值逆转然后绘制更符合固定认知的结果。

图片




02


在相关性矩阵中添加显著性标记


R语言内置环境中具有多种多样的统计函数,并且还提供了多种函数包可以用来拓展统计函数。corrplot包实现了一个封装好的进行相关系数显著性检验的函数cor.mtest来获取p值,这里我们就不必大费周章的来自己编写函数计算p值矩阵以及置信度矩阵了。


但是,学习编程和通用的数据处理方式仍旧是十分重要的,周五晚上的下期推文将讲解cor.mtest函数的代码逻辑以及复现一个简单版本的mtest函数。


下面简单回顾一下显著性检验的概念。显著性检验是一种统计方法,用于确定样本数据与一个假设相符或不符的程度。在相关系数的检验中,显著性检验用于评估两个变量之间的相关性是否显著

在显著性检验中,我们首先建立一个原假设(null hypothesis),假设样本数据不存在相关性或不存在差异。接着,我们收集样本数据,计算出一个统计量,然后使用这个统计量来评估原假设的可信程度,即计算一个p值。p值表示在原假设成立的情况下,观察到的样本结果或更极端结果出现的概率。如果p值很小(通常小于0.05),我们就有足够的证据来拒绝原假设,并得出结论样本数据存在相关性或存在差异。即,我们进行相关性检验的结果中p-value小于0.05则认为此相关系数是可靠的,确实存在相关性。接下来,我们就要计算p矩阵以及使用corrplot展示结果。


# 计算显著性矩阵pm = cor.mtest(mcor,conf.level = 0.95)# pm是一个list对象 其中包括三个成员# p矩阵> pm$p              mpg          cyl         disp           hp         drat           wtmpg  0.000000e+00 4.037623e-09 1.091445e-09 4.322152e-06 1.780708e-05 2.518729e-08cyl  4.037623e-09 0.000000e+00 1.659424e-09 5.625666e-07 5.174268e-05 1.320552e-06disp 1.091445e-09 1.659424e-09 0.000000e+00 1.304240e-05 4.935086e-06 1.901561e-08hp   4.322152e-06 5.625666e-07 1.304240e-05 0.000000e+00 2.049276e-03 1.787328e-04drat 1.780708e-05 5.174268e-05 4.935086e-06 2.049276e-03 0.000000e+00 3.782478e-07> # 置信区间> pm$lowCI            mpg        cyl       disp         hp       drat         wt       qsecmpg   1.0000000 -0.9976823 -0.9982698 -0.9888091  0.7778575 -0.9965075  0.1885083cyl  -0.9976823  1.0000000  0.9700514  0.8931885 -0.9801076  0.8717271 -0.9359355disp -0.9982698  0.9700514  1.0000000  0.7918066 -0.9884636  0.9488324 -0.9129200hp   -0.9888091  0.8931885  0.7918066  1.0000000 -0.9514038  0.6445032 -0.9686117drat  0.7778575 -0.9801076 -0.9884636 -0.9514038  1.0000000 -0.9935715 -0.1782837wt   -0.9965075  0.8717271  0.9488324  0.6445032 -0.9935715  1.0000000 -0.8786800> pm$uppCI            mpg        cyl       disp          hp        drat          wt        qsecmpg   1.0000000 -0.9635787 -0.9726924 -0.83492892  0.98449032 -0.94558734  0.91808400cyl  -0.9635787  1.0000000  0.9981001  0.99296695 -0.72322813  0.99146342 -0.30799033disp -0.9726924  0.9981001  1.0000000  0.98556954 -0.83023726  0.99672088 -0.15755245hp   -0.8349289  0.9929670  0.9855695  1.00000000 -0.43047203  0.97331807 -0.59373847


这里的返回值是一个list,使用$运算符取出结果,下面我们使用pm以及上文计算好的mcor矩阵进行可视化。

corrplot(mcor,         tl.col = 'black',         col = rev(COL2('RdBu', 200)),         method = 'square',          # 使用p值矩阵         p.mat = pm$p,         # 设置显著性水平         sig.level = .05)


我们增加了参数p.mat以及sig.level来设置显著性水平展示结果:

图片


我们能够看到结果不够显著的已经被标记为了X。


我们也可以通过增加参数insig来直接显示不够显著的p值

corrplot(mcor,         tl.col = 'black',         col = rev(COL2('RdBu', 200)),         method = 'square',          # 使用p值矩阵         p.mat = pm$p,         insig = 'p-value',         # 设置显著性水平         sig.level = .05)

图片


不过一一般来说,我们平时使用最多的是*符号来显示p值,所以corrplot也同样提供了对应的参数。

corrplot(mcor,         tl.col = 'black',         col = rev(COL2('RdBu', 200)),         method = 'square',          p.mat = pm$p,         # 使用标签类型的显著性标记         insig='label_sig',         # 显著性标记范围         sig.level = c(.001,.01,.05),         # 标记的类型 大小 颜色等等         pch.cex = 2,         pch.col = 'black',         pch = '*')

具体参数解释已经放在代码块中了,直接放结果

图片


是不是已经学术感十分浓厚了呢!不过corrplot甚至还提供了置信区间的添加,当使用置信区间的时候,method参数可以随意设定,因为它只会展示置信区间的结果

corrplot(mcor,           p.mat = pm$p,         tl.col = 'black',         # 添加置信区间         lowCI.mat = pm$lowCI,         uppCI.mat = pm$uppCI,         col = rev(COL2('RdBu', 200)),         sig.level = c(.01),         # 整个图片的背景色         bg = 'gold2',         # 如何绘制置信区间circle square rect         plotCI = 'square',         pch.col = 'black')

图片


个人感觉这个置信区间的绘制纯属炫技,在实际应用中从来没见过,因此重点掌握的部分应该是上面关于显著性的展示。




03


多种参数配合显著性标记绘制高级感十足的相关性矩阵


终于进行到文章的最后部分了,通过上期推文以及本期推文的讲解,我们已经了解到了如何绘制多种多样的相关性矩阵,但是我们想要组合相关性矩阵和显著性标记该如何做到呢?


如果你已经了解上述参数和代码的讲解,相信心中已经有了一个初步的方案,下面给出一个例子。

corrplot(mcor,tl.col = 'black',         col = rev(COL2('RdBu', 200)),         number.cex = .5,diag = F)corrplot(mcor,add = T,         tl.col = 'black',         col = rev(COL2('RdBu', 200)),         method = 'pie',          diag = F,         type = 'upper',         cl.pos = 'n',tl.pos = 'n',         p.mat = pm$p,         pch.col = 'red')corrplot(mcor,add = T,         tl.col = 'black',         col = rev(COL2('RdBu', 200)),         method = 'square',          diag = F,         type = 'lower',         cl.pos = 'n',tl.pos = 'n',         p.mat = pm$p,         insig='label_sig',         sig.level = c(.0001,.01,.05),         pch.cex = 1.1,         pch.col = 'black',         pch = '*')

结果如下:

图片


再来一个

corrplot(mcor,tl.col = 'black',         col = rev(COL2('RdBu', 200)),         number.cex = .5,diag = F)corrplot(mcor,add = T,         method = "number",         tl.col = 'black',         col = rev(COL2('RdBu', 200)),         diag = F,         type = 'lower',         cl.pos = 'n',tl.pos = 'n')corrplot(mcor,add = T,         tl.col = 'black',         col = rev(COL2('RdBu', 200)),         method = 'square',          diag = F,         type = 'upper',         cl.pos = 'n',tl.pos = 'n',         p.mat = pm$p,pch.col = 'black')

图片




这次的文章就先到这里了,关于文章内部所有的图表都是由这两期推文的代码编写,下次推文将分享代码实战之cor.mtest函数逻辑讲解和实现



最后,如果你觉得这篇文章让你学到了知识,就请你动动小手帮忙点一点赞和在看,赠人玫瑰,手有余香,你对我的认可就是我更新下去的最大动力!


-结束-



点击关注公众号,学习资料免费送,学生信,不迷路图片


收录于合集 #数据可视化
 30
上一篇可视化系列6 | 三种绘制高级小提琴图的方法下一篇高级可视化系列 | 带显著性标记的组合型相关性矩阵

微信扫一扫
关注该公众号