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

本期介绍了利用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”获得完整代码以及演示数据包

猜你喜欢

转载自blog.csdn.net/weixin_54004950/article/details/128286890