imd 统计教程 · 统计图表与论文表格
← 教程首页 返回本模块

相关系数矩阵美图

聂志强实战医学统计2023-01-03 14:12:59广东



前言

相关分析中,我们使用相关系数(correlation coefficient)来表明变量之间的相关密切程度,通常用r表示,它的取值范围为[-1,1]。r的正、负号可以反映相关的方向变量间相关性的系数,包括Pearson、Spearman、Kendall、Gamma、Polychoric、Tetrachoric、Polyserial、(Point-)Biserial等等。

当r>0时表示线性正相关;当r<0时表示线性负相关;r的大小可以反映相关的程度,r=0表示两个变量之间不存在线性关系。相关分析随着变量数量不同,也可分为简单相关系数(2变量间)、复相关系数(1变量对1群变量)、偏相关系数(校正其他变量的2变量间)、典型相关系数(1群变量对1群变量)。本文仅探讨简单相关系数。

一、各相关系数适用条件

1.1 Pearson相关

Pearson相关系数要求高,应用于连续变量,假定两组变量均为正态分布、存在线性关系且等方差。

1.2 Spearman秩相关

Spearman与Pearson相关相比不要求变量的正态性和等方差假设,且对异常值的敏感度较低。

1.3 Kendall相关

适用于两个分类变量均为有序分类的情况。如果一致对的数量比不一致对的数量大得多,则变量是正相关的。

1.4 r应用条件

1.5 r强弱

二、R实战

相关性热图软件包比较多,例如pheatmap、corrplot、ggcorrplot、ggcor、heatmap等。图像展示方式(全图、半图、圆形、方形、椭圆形等)、相关系数及P值显示、显著性水平、混合矩阵等,还有通用参数,可参考对应R包函数设置。笔者觉得比较美观实用的包为corrplot、ggcorrplot、pheatmap。

2.1 corrplot包

#df 数据集
df <- dfou[,12:33]
#1 corrplot包,corrplot.mixed 相关系数;
pacman::p_load(corrplot)
cor.matrix <- cor(df, method = "spearman")  
#绘制热力图
corrplot.mixed(cor.matrix, number.cex = 0.8)  

p <- cor.mtest(df, conf.level = .95)
corrplot(cor.matrix, method = "color", col = colorRampPalette(c('navy','white','firebrick3'))(200),
         addCoef.col = "black",number.cex = 0.8,###添加系数及字体
         tl.col = "black", tl.srt = 45, ### 上部标签的颜色和倾斜度
         p.mat = p$p, sig.level = 0.05, insig = "blank",  #insig = "label_sig或 blank"
         diag = T,#显示对角线上的相关系数
         type="lower"#显示一半全图
#type = c("full"/"lower"/"upper")

#其他参数设置
corrplot(cor, method = "circle",tl.col = 'black',tl.srt = 45)
corrplot(cor, method = "square",tl.col = 'black',tl.srt = 45)
corrplot(cor, method = "ellipse",tl.col = 'black',tl.srt = 45)
corrplot(cor, method = "number",tl.col = 'black',tl.srt = 45)
corrplot(cor, method = "shade",tl.col = 'black',tl.srt = 45)
corrplot(cor, method = "pie",tl.col = 'black',tl.srt = 45)  ###能够以上述多种形式进行展示结果

p <- cor.mtest(df, conf.level = .95)
#至少有4对完整观测值时的皮尔逊积矩相关系数
corrplot(cor, p.mat = p$p, sig.level = 0.05,tl.col = 'black',tl.srt = 45)
### 显著差异水平设置为0.05,差异不显著则‘叉号’展示
corrplot(cor, p.mat = p$p, insig = "blank",tl.col = 'black',tl.srt = 45)
### 显著差异水平设置为0.05,差异不显著则‘空值’展示
corrplot(cor, p.mat = p$p, insig = "p-value",tl.col = 'black',tl.srt = 45)
### 显著差异水平设置为0.05,差异不显著则‘P的数值’展示
corrplot(cor, p.mat = p$p, method = "color",insig = "label_sig", pch.col = "green",tl.col = 'black',tl.srt = 45)
### 显著差异水平设置为0.05,差异显著则绿色‘*’展示


#1.1  与固定x的spearman相关棒棒图
pacman::p_load(corrplot,ggplot2)
cr <- cor(df, method = "spearman")
metals_x <- c(  "Na",
            "Mg",
            "K",
            "Ca",
            "Be",
            "Al",
            "V",
            "Cr",
            "Mn",
            "Fe",
            "Co",
            "Ni",
            "Cu",
            "Zn",
            "As",
            "Se",
            "Sr",
            "Cd",
            "Sn",
            "Sb",
            "Ce")
#固定x为Pb
plotdata <- data.frame(metals_x,cor=cr[metals_x,"Pb"])
plotdata$correlation <- ifelse(plotdata$cor > 0,'positive correlation','negative correlation')
#+-相关降序棒棒图
ggplot(plotdata,aes(x=cor,y=reorder(metals_x,cor)))+
  ylab('metals_x')+
  xlab('pearson-r')+
  ggtitle("Expression correlation with Pb")+
  geom_segment(aes(yend=metals_x),xend=0,colour='grey50')+  ###绘制以数据点为端点的线段
  geom_point(size=3,aes(colour=correlation))+   ###此处我们将以正负相关(postive  negative)映射其颜色
  scale_colour_brewer(palette = 'Set1',limits=c('positive correlation','negative correlation'))+ ###颜色加深  
  theme_bw() +
  theme(panel.grid.major.y = element_blank(),
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank(),
        plot.title = element_text(hjust = 0.5))

 

2.2 ggcorrplot包

#2 ggcorrplot包;Pearson、Spearman、Kendall 相关
pacman::p_load(ggcorrplot,ggthemes)

cor <- cor(df, method = 'spearman')
#相关性P值
p.mat <- round(cor_pmat(df),3)
ggcorrplot(cor,method="circle",hc.order = TRUE,
           hc.method = "ward.D",outline.col = "white",ggtheme = theme_bw(),
           type="full",# upper full lower但是会漏元素
           colors = c("#6D9EC1","white","#E46726"),lab = TRUE,lab_size = 2,
           p.mat=p.mat,insig="blank")

2.3 pheatmap包

 

#3.2 pheatmap包聚类热图
pacman::p_load(pheatmap)
pheatmap(cr)
#不显示树状结构
pheatmap(cr,cluster_rows=F,cluster_cols=F,
        clustering_method = "ward.D",display_numbers = T,
        fontsize_number = 5,number_format = "%.2f")
#显示树状结构聚类
pheatmap(cr,clustering_method = "ward.D",display_numbers = T,
        fontsize_number = 5,number_format = "%.2f",
        color = colorRampPalette(c("blue""white""red"))(100))


小结

推荐corrplot、pheatmap包绘制相关系数矩阵图

原创不易,欢迎转载,分享给你身边的小伙伴