草庐IT

【R语言】——相关性分析和热图绘制

在打豆豆的小潘学长 2023-12-11 原文

本期介绍了利用R语言进行相关性分析和数据的可视化的方法。

一、什么是相关性分析?

相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。组学测序转录组中需设置多个生物学重复,而对多个生物学重复样本的相关性分析,可从中判断生物学重复样本数据是否可以用于接下来的分析。如有一生物学重复不一致的情况,可去除变异数据,预防某一重复数据不可用进而影响实验数据的分析。

常见的相关性分析方法有三种:皮尔森(pearson)相关系数、斯皮尔曼(spearman)相关系数和肯德尔(kendall)相关系数

表1 相关性关系

极弱相关或无相关

弱相关

中等程度相关

强相关

极强相关

0.0-0.2

0.2-0.4

0.4-0.6

0.6-0.8

0.8-1.0

1 皮尔森相关系数(Pearson)

皮尔森相关系数Pearson),也称为线性相关系数,积差相关系数,1890年由英国统计学家卡尔•皮尔逊提出。是用来反映两个变量线性相关程度的统计量,适用于满足正态分布的数据。相关系数用r表示,其中n为样本量,分别为两个变量的观测值和均值。r描述的是两个变量间线性相关强弱的程度。r的绝对值越大表明相关性越强。r的取值在-1与+1之间,若r>0,表明两个变量是正相关,即一个变量的值越大,另一个变量的值也会越大;若r<0,表明两个变量是负相关,即一个变量的值越大另一个变量的值反而会越小。r 的绝对值越大表明相关性越强,要注意的是这里并不存在因果关系。若r=0,表明两个变量间不是线性相关,但有可能是其他方式的相关(比如曲线方式)。

计算公式为:

其中n为样本容量,xi和yi为两变量的样本值。

2 斯皮尔曼相关性系数(spearman)

斯皮尔曼相关性系数(spearman)又称斯皮尔曼秩相关系数是利用两变量的秩次大小作线性相关分析,而不是根据数据的实际值计算,适用于有序数据和不满足正态分布假设的等间隔数据,与Pearson相关系数相比属于非参数统计方法,具有更广的适用范围。经常用希腊字母ρ表示。

其计算公式为:

其中di表示每对观察值(x,y)的秩之差,n为观察对的个数。

3 肯相关性系数(spearman)

肯德尔相关系数(Kendall),是一种相关系数是对两个有序变量或两个秩变量之间相关程度测量属于非参数统计

二、代码

1 数据准备

数据输入格式(csv格式):

2 R包加载及数据导入

#下载包#

install.packages("corrplot")

install.packages("ggcorrplot")

install.packages("psych")

install.packages("vcd")

#加载包#

library(corrplot)

library(ggplot2)

library(ggcorrplot)

library(vcd)

library(psych)

library(ggrepel)

#数据导入#

data<-read.table(file='C:/Rdata/jc/相关性热图数据.csv',row.names= 1,header=TRUE,sep=',')

dim(data) #数组维度

data<-as.matrix(data) #利用as.matrix()将所需数据集转换为matrix格式,才可在corrplot中跑

data=data.frame(scale(data))#数据标准化

head(data)

#相关性计算

data<-cor(data,method="spearman") #pearson积差相关系数,spearman等级相关系数和kendall秩相关系数

round(data, 2)#保留两位小数#相关性计算

data<-cor(data,method="spearman") #pearson积差相关系数,spearman等级相关系数和kendall秩相关系数

round(data, 2)#保留两位小数

  

3 相关性热图绘制

3.1 ggcorrplot包绘制热图

#相关性热图绘制

ggcorrplot(data, method="circle") #圆圈大小变化

图1 相关性基础热图

#调整与美化

ggcorrplot(data, method = "circle", #"square", "circle"相比corrplot少了很多种,只有方形和圆形,默认方形。

           type ="upper" , #full完全(默认),lower下三角,upper上三角

           ggtheme = ggplot2::theme_minimal,

           title = "",

           show.legend = TRUE,  #是否显示图例。

           legend.title = "Corr", #指定图例标题。

           show.diag =T ,    #FALSE显示中间

           colors = c("blue", "white", "red"), #需要长度为3的颜色向量,同时指定low,mid和high处的颜色。

           outline.color = "gray", #指定方形或圆形的边线颜色。

           hc.order = FALSE,  #是否按hclust(层次聚类顺序)排列。

           hc.method = "complete", #相当于corrplot中的hclust.method, 指定方法一样,详情见?hclust。

           lab =T , #是否添加相关系数。FALSE

           lab_col = "black", #指定相关系数的颜色,只有当lab=TRUE时有效。

           lab_size = 4, #指定相关系数大小,只有当lab=TRUE时有效。

           p.mat = NULL,  #p.mat= p_mat,insig= "pch", pch.col= "red", pch.cex= 4,

           sig.level = 0.05,

           insig = c("pch", "blank"),

           tl.cex = 12, #指定变量文本的大小,

           tl.col = "black", #指定变量文本的颜色,

           tl.srt = 45, #指定变量文本的旋转角度。

           digits = 2 #指定相关系数的显示小数位数(默认2)。

)

图2 调整与美化后的热图

3.2 gcorrplot包绘制相关性热图

3.2.1 gcorrplot包基础热图

#corrplot包绘图#

corrplot(data)

corrplot(data, method="circle", #square方形,ellipse, 椭圆形,number数值,shade阴影,color颜色,pie饼图

         title = "pearson",   #指定标题

         type="full",  #full完全(默认),lower下三角,upper上三角

         #col=c("#FF6666", "white", "#0066CC"), #指定图形展示的颜色,默认以均匀的颜色展示。支持grDevices包中的调色板,也支持RColorBrewer包中调色板。

         outline = T,  #是否添加圆形、方形或椭圆形的外边框,默认为FALSE。

         diag = TRUE,  #是否展示对角线上的结果,默认为TRUE

         mar = c(0,0,0,0), #设置图形的四边间距。数字分别对应(bottom, left, top, right)。

         bg="white", #指定背景颜色

         add = FALSE, #表示是否添加到已经存在的plot中。默认FALSE生成新plot。

         is.corr = TRUE, #是否为相关系数绘图,默认为TRUE,FALSE则可将其它数字矩阵进行可视化。

         addgrid.col = "darkgray", #设置网格线颜色,当指定method参数为color或shade时, 默认的网格线颜色为白色,其它method则默认为灰色,也可以自定义颜色。

         addCoef.col = NULL, #设置相关系数值的颜色,只有当method不是number时才有效

         addCoefasPercent = FALSE, #是否将相关系数转化为百分比形式,以节省空间,默认为FALSE。

         order = "original", #指定相关系数排序的方法, 可以是original原始顺序,AOE特征向量角序,FPC第一主成分顺序,hclust层次聚类顺序,alphabet字母顺序。

         hclust.method = "complete", # 指定hclust中细分的方法,只有当指定order参数为hclust时有效。有7种可选:complete,ward,single,average,mcquitty,median,centroid。

         addrect = NULL, #是否添加矩形框,只有当指定order参数为hclust时有效, 默认不添加, 用整数指定即可添加。

         rect.col = "black", #指定矩形框的颜色。

         rect.lwd = 2, #指定矩形框的线宽。

         tl.pos = NULL,  #指定文本标签(变量名称)相对绘图区域的位置,为"lt"(左侧和顶部),"ld"(左侧和对角线),"td"(顶部和对角线),"d"(对角线),"n"(无);当type="full"时默认"lt"。当type="lower"时默认"ld"。当type="upper"时默认"td"。

         tl.cex = 1,  #设置文本标签的大小

         tl.col = "black", #设置文本标签的颜色。

         cl.pos = NULL #设置图例位置,为"r"(右边),"b"(底部),"n"(无)之一。当type="full"/"upper"时,默认"r"; 当type="lower"时,默认"b"。

         #addshade = c("negative", "positive", "all"), # 表示给增加阴影,只有当method="shade"时有效。#为"negative"(对负相关系数增加阴影135度);"positive"(对正相关系数增加阴影45度);"all"(对所有相关系数增加阴影)。

         #shade.lwd = 1,  #指定阴影线宽。

         #shade.col = "white",  #指定阴影线的颜色。    

         #p.mat= res1$p,sig.level= 0.01,insig= "pch", pch.col= "blue", pch.cex= 3,#只有指定矩阵的P值,sig.level,pch等参数才有效。只有当insig = "pch"时,pch.col和pch.cex参数才有效。

)

图3 corrplot包绘图

3.2.2 corrplot包图形与数值混合

#显示数字与图形混合

corrplot(data, method="circle", #square方形,ellipse, 椭圆形,number数值,shade阴影,color颜色,pie饼图

         title = "pearson",   #指定标题

         type="full", #full完全(默认),lower下三角,upper上三角

         #col=c("#FF6666", "white", "#0066CC"), #指定图形展示的颜色,默认以均匀的颜色展示。支持grDevices包中的调色板,也支持RColorBrewer包中调色板。

         outline = F,  #是否添加圆形、方形或椭圆形的外边框,默认为FALSE。

         diag = TRUE,  #是否展示对角线上的结果,默认为TRUE

         mar = c(0,0,0,0), #设置图形的四边间距。数字分别对应(bottom, left, top, right)。

         bg="white", #指定背景颜色

         add = FALSE, #表示是否添加到已经存在的plot中。默认FALSE生成新plot。

         is.corr = TRUE, #是否为相关系数绘图,默认为TRUE,FALSE则可将其它数字矩阵进行可视化。

         addgrid.col = "darkgray", #设置网格线颜色,当指定method参数为color或shade时, 默认的网格线颜色为白色,其它method则默认为灰色,也可以自定义颜色。

         addCoef.col = NULL, #设置相关系数值的颜色,只有当method不是number时才有效

         addCoefasPercent = FALSE, #是否将相关系数转化为百分比形式,以节省空间,默认为FALSE。

         order = "original", #指定相关系数排序的方法, 可以是original原始顺序,AOE特征向量角序,FPC第一主成分顺序,hclust层次聚类顺序,alphabet字母顺序。

         hclust.method = "complete", # 指定hclust中细分的方法,只有当指定order参数为hclust时有效。有7种可选:complete,ward,single,average,mcquitty,median,centroid。

         addrect = NULL, #是否添加矩形框,只有当指定order参数为hclust时有效, 默认不添加, 用整数指定即可添加。

         rect.col = "black", #指定矩形框的颜色。

         rect.lwd = 2, #指定矩形框的线宽。

         tl.pos = NULL,  #指定文本标签(变量名称)相对绘图区域的位置,为"lt"(左侧和顶部),"ld"(左侧和对角线),"td"(顶部和对角线),"d"(对角线),"n"(无);当type="full"时默认"lt"。当type="lower"时默认"ld"。当type="upper"时默认"td"。

         tl.cex = 1,  #设置文本标签的大小

         tl.col = "black", #设置文本标签的颜色。

         cl.pos = NULL #设置图例位置,为"r"(右边),"b"(底部),"n"(无)之一。当type="full"/"upper"时,默认"r"; 当type="lower"时,默认"b"。

         #addshade = c("negative", "positive", "all"), # 表示给增加阴影,只有当method="shade"时有效。#为"negative"(对负相关系数增加阴影135度);"positive"(对正相关系数增加阴影45度);"all"(对所有相关系数增加阴影)。

         #shade.lwd = 1,  #指定阴影线宽。

         #shade.col = "white",  #指定阴影线的颜色。    

         #p.mat= res1$p,sig.level= 0.01,insig= "pch", pch.col= "blue", pch.cex= 3,#只有指定矩阵的P值,sig.level,pch等参数才有效。只有当insig = "pch"时,pch.col和pch.cex参数才有效。

)



corrplot(data, title = "",         

         method = "number", #square方形,ellipse, 椭圆形,number数值,shade阴影,color颜色,pie饼图        

         outline = F, #是否添加圆形、方形或椭圆形的外边框,默认为FALSE。     

         add = TRUE, #表示是否添加到已经存在的plot中。默认FALSE生成新plot。

         type = "lower", #full完全(默认),lower下三角,upper上三角        

         order="original",

         col="black", #指定图形展示的颜色,默认以均匀的颜色展示。支持grDevices包中的调色板,也支持RColorBrewer包中调色板。

         diag=FALSE, #是否展示对角线上的结果,默认为TRUE

         tl.pos="n",  #指定文本标签(变量名称)相对绘图区域的位置,为"lt"(左侧和顶部),"ld"(左侧和对角线),"td"(顶部和对角线),"d"(对角线),"n"(无)

         cl.pos=NULL #设置图例位置,为"r"(右边),"b"(底部),"n"(无)之一。

         )

图4 gcorrplot包数值与图形混合绘图

#椭圆加数值#

corrplot(data, method = "ellipse", order = "original",          

         addCoef.col = "black",#设置相关系数值的颜色,只有当method不是number时才有效

         type="full", #full完全(默认),lower下三角,upper上三角

         title = "椭圆与黑色系数值",

         add = FALSE, #表示是否添加到已经存在的plot中。默认FALSE生成新plot。

         diag = TRUE, #是否展示对角线上的结果,默认为TRUE

         tl.cex = 1,  #设置文本标签的大小

         tl.col = "black", #设置文本标签的颜色。

         cl.pos = NULL, #设置图例位置,为"r"(右边),"b"(底部),"n"(无)之一。当type="full"/"upper"时,默认"r"; 当type="lower"时,默认"b"。

         mar = c(1,1,1,1)) #设置图形的四边间距。数字分别对应(bottom, left, top, right)。

图5 椭圆加全部数值

#百分比表示#

corrplot(data, method = "ellipse", order = "original",          

         addCoef.col = "black",#设置相关系数值的颜色,只有当method不是number时才有效

         addCoefasPercent = TRUE, #是否将相关系数转化为百分比形式,以节省空间,默认为FALSE。

         type="full", #full完全(默认),lower下三角,upper上三角

         title = "椭圆与黑色百分比",

         add = FALSE, #表示是否添加到已经存在的plot中。默认FALSE生成新plot。

         diag = TRUE, #是否展示对角线上的结果,默认为TRUE

         tl.cex = 1,  #设置文本标签的大小

         tl.col = "black", #设置文本标签的颜色。

         cl.pos = NULL, #设置图例位置,为"r"(右边),"b"(底部),"n"(无)之一。当type="full"/"upper"时,默认"r"; 当type="lower"时,默认"b"。

         mar = c(1,1,1,1)) #设置图形的四边间距。数字分别对应(bottom, left, top, right)。

图6 数值百分比

好了本次分享就到这里。

关注公众号,发送“相关性热图5”获得完整代码以及演示数据包

有关【R语言】——相关性分析和热图绘制的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  3. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  4. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  5. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  6. ruby-on-rails - 在具有 ActiveRecord 条件的相关模型中按字段排序 - 2

    我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我

  7. ruby - 如何保持我不常用的编程语言技能 - 2

    关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion我不经常使用ruby​​-通常它加起来相当于每两个月或更长时间编写一次脚本。我的大部分编程都是使用C++进行的,这与ruby​​有很大不同。由于我与ruby​​之间的差距如此之大,我总是忘记语言的基本方面(比如解析文本文件和其他简单的东西)。我想每天练习一些基本的东西,我想知道是否有一些我可以订阅的网站,并且会向我发送当天的Ruby问题或类似的东西。有人知道这样的站点/Internet服务吗?

  8. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  9. ruby-on-rails - 如何通过 URL 更改语言环境? - 2

    在我的双语Rails4应用程序中,我有一个像这样的LocalesController:classLocalesController用户可以通过此表单更改其语言环境:deflocale_switcherform_tagurl_for(:controller=>'locales',:action=>'change_locale'),:method=>'get',:id=>'locale_switcher'doselect_tag'set_locale',options_for_select(LANGUAGES,I18n.locale.to_s)end这有效。但是,目前用户无法通过URL更改

  10. ruby - 使用指向 ruby​​ 可执行文件的符号链接(symbolic link)时查找相关库 - 2

    假设您有一个可执行文件foo.rb,其库bar.rb的布局如下:/bin/foo.rb/lib/bar.rb在foo.rb的header中放置以下要求以在bar.rb中引入功能:requireFile.dirname(__FILE__)+"../lib/bar.rb"只要对foo.rb的所有调用都是直接的,这就可以正常工作。如果你把$HOME/project和符号链接(symboliclink)foo.rb放入$HOME/usr/bin,然后__FILE__解析为$HOME/usr/bin/foo.rb,因此无法找到bar.rb关于foo.rb的目录名.我意识到像ruby​​gems这

随机推荐