本篇文章介绍基于R语言的相关性分析、相关系数的显著性检验及可视化,该教程为个人笔记,大家也可参考学习,不足之处也欢迎大家批评指正!
相关性分析用于评估两个或多个变量之间的关联,能通过定量指标描述变量之间的强弱、直接或间接联系。相关系数是对变量之间的相关程度的定量描述,相关系数值介于-1~1之间,越接近0相关性越低,越接近-1或1相关性越高;正负号表明相关方向,正号为正相关、负号为负相关。当数据呈正态分布时,才可以使用相关性分析。可以使用Shapiro-Wilk test进行检查数据是否满足正态分布。
该案例中示例数据包含多样性(diversity)、生物量(biomass)、产量(yield)和种植密度(density)四个指标(单位请自动忽略,数据仅作为示例使用)。
一、常见的变量间相关系数1、Pearson相关系数:Pearson相关系数是用于表示相关性大小的最常用指标,适用于两个正态分布的连续变量。
2、Spearman等级相关系数:又称为秩相关系数,利用两变量的秩次大小来进行分析,属于非参数统计方法。适用于不满足Pearson相关系数正态分布要求的连续变量,也可以用于有序分类变量的之间的相关性测量。
3、Kendall's Tau相关系数:Kendall's Tau相关系数是一种非参数检验。适用于两个有序分类变量。
4、偏相关:当要进行相关性分析的两个变量其取值受到其他变量影响时,可以利用偏相关分析对其他变量进行控制,在控制其他变量基础之上进行这两个变量之间相关性分析。适用于考虑第三方影响的两个变量之间的相关性分析。
二、R语言的实现1、Pearson、Kendall、Spearman相关
##读入数据df##查看数据df
##正态分布检验shapiro.test(df$diversity)shapiro.test(df$biomass)shapiro.test(df$yield)shapiro.test(df$density)
结果符合正态分布
##计算列与列之间的协方差cov(df)
##计算列与列之间的相关系数,默认的方法为pearsoncor(df)
##计算列与列之间的pearson、kendall、spearman相关系数cor(df, method = "pearson")cor(df, method = "kendall")cor(df, method = "spearman")
2、偏相关
偏相关是指在控制一个或多个定量变量时,另外两个定量变量之间的相互关系。
##使用ggm包的pcor()函数library(ggm)##控制yield(第三列)时,计算diversity(第一列)和biomass(第二列)的偏相关系数##前两个数值表示要计算相关系数的变量,其余的数值为条件变量(即要排除影响的变量)pcor(c(1,2,3), cov(df))
3、相关系数的显著性检验
##相关性的显著性检验(pearson、kendall、spearman相关系数)##计算好相关矩阵后,对其进行显著性检验,可以使用cor.test()函数和psych包的corr.test()函数##cor.test()函数检验p值(只能检验一种相关关系)##计算第一列和第二列直接的相关性,方法使用pearsoncor.test(df[,1],df[,2], method = "pearson")
##psych包的corr.test()函数可以检验相关系数矩阵library("psych")cor##查看相关系数rcor$r##查看相关系数的显著性检验结果pcor$p
4、可视化
4.1 corrplot包
##使用 corrplot() 函数实现可视化library(corrplot)##默认图corrplot(cor$r, p.mat = cor$p, insig = 'label_sig', sig.level = c(.001, .01, .05), pch.cex = 1.5)
*** p<0.001; ** p<0.01; * p<0.05, the same below.
##作图并加上显著性(上半部分)corrplot(cor$r, p.mat = cor$p,tl.col = "black",method = "circle",type = "upper",tl.pos = "d", insig = 'label_sig', sig.level = c(.001, .01, .05))##加上下半部分corrplot(cor$r,add=TRUE, type="lower", method="number",order="AOE",diag=FALSE,tl.pos="n", cl.pos="n")
##设置颜色,颠倒系统默认的颜色color"#053061", "#FFFFFF","#FDDBC7","#F4A582","#D6604D","#B2182B","#67001F"))
###颠倒系统默认的颜色(红蓝色互换位置)corrplot(cor$r, p.mat = cor$p,tl.col = "black",method = "circle",type = "upper",tl.pos = "d",col = color(9), insig = 'label_sig', sig.level = c(.001, .01, .05), pch.cex = 1.5)corrplot(cor$r,add=TRUE, type="lower", method="number",order="AOE",diag=FALSE,tl.pos="n", cl.pos="n", col = color(9))
4.2 PerformanceAnalytice包
#加载PerformanceAnalytics包library(PerformanceAnalytics)chart.Correlation(cor$r)
图解:
对角线上显示的是分布图,左下部显示的是具有拟合线的双变量散点图,右上部显示的是相关系数以及显著性水平。
两个包做出来的图显著性不一致,额... 有点懵;后续还需进一步研究,但是一般情况下多用corrplot包作图。
完
参考文献: Kabacoff, R. (2015). R in Action: Data Analysis and Graphics with R: Manning Publications Co.