参考资料:R语言实战【第2版】
相关系数可以用来描述定量变量之间的关系。相关系数的符号(±)表明关系的方向(正相关或负相关),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1)。
本文中将使用R语言基础安装中的state.x77数据集。
1、相关的类型
R语言可以计算多种相关系数,包括Pearson相关系数,Spearman相关系数、Kendall相关系数、偏相关系数、多分格(polychoric)相关系数和多系列(polyserial)相关系数。
(1)Pearson、Spearman和Kendall相关
Pearson积差相关系数衡量了两个定量变量之间的线性相关程度。
Spearman等级相关系数则衡量分级定序变量之间的相关程度。
Kendall's Tau相关系数也是一种非参数的等级相关度量。
cor()函数可以计算着三种相关系数,而cov函数用来计算协方差。两个函数的参数有很多,其中与相关系数的计算有关的参数可以简化为:
cor(x,use="everything",method="pearson")
x表示矩阵或数据框;
use用于指定缺失数据的处理方式。可选的方式为all.obs(假设不存在缺失数据——遇到缺失数据时将报错)、everything(遇到缺失数据时,相关系数的计算结果将被设为missing)、complete.obs(行删除)以及pairwise.complete.obs(成对删除,pairwise deletion)
method指定相关系数的类型。可选类型为pearson、spearman或kendall。
# 加载数据集
states<-state.x77[,1:6]
# 查看数据集
states
# 计算协方差矩阵
cov(states)
# 计算pearson相关系数
cor(states)
# 计算spearman相关系数
cor(states,method="spearman")
请注意,在默认情况下cor()函数得到的结果是一个方阵(所有变量之间两两计算相关),我们也可以计算非方形的相关矩阵,如下:
x<-states[,c('Population','Income','Illiteracy','HS Grad')]
y<-states[,c('Life Exp','Murder')]
cor(x,y)
当我们对一组变量与另外一组变量之间的关系感兴趣时,cor()函数的这种用法是非常实用的。注意,cor()函数的结果并未指明相关系数是否显著不为0,所以还需要对相关系数进行显著性检验。
(2)偏相关
偏相关是指在控制一个或多个定量变量时,另外两个定量变量之间的相互关系。我们可以使用ggm包中的pcor()函数计算偏相关系数。ggm包没有被默认安装,在第一次使用之前需要先行安装。函数的调用格式为:
pcor(u,S)
u是一个数值向量,前面两个数值表示要计算相关系数的变量下标,其余的数值为条件变量(即要排除影响的变量)下标。S为变量的协方差阵。
# 加载ggm包
library(ggm)
# 展示列名
colnames(states)
# 计算偏相关系数
pcor(c(1,5,2,3,6),cov(states))
结果表明,在控制了2,3,6(即收入、文盲率、高中毕业率)的影响时,1和5(即人口和谋杀率)之间的相关系数为0.346。偏相关系数常用于社会科学的研究中。
2、相关的显著性检验
相关性统计显著性检验常用的原假设为变量间不相关(即总体的相关系数为0)。我们可以使用cor.test()函数对单个的Pearson、Spearman和kendall相关系数进行检验,简化后的使用格式为:cor.test(x,y,alternative=,method=)
其中,x和y为要检验相关性的变量,alternative则用来指定双侧检验或单侧检验(取值为"two.side"、"less"或"greater",默认为two.side),而method用以指定要计算的相关类型("pearson","spearman","kendall")。
# 相关性的显著性检验
cor.test(states[,3],states[,5])
本例,原假设是:与其寿命和谋杀率的pearson相关系数为0。检验结果显示p值远小于0.01,则拒绝原假设,即预期寿命和谋杀率之间的总体相关度不为0.
但cor.test()函数每次只能检验一种相关关系。psych包提供的corr.test()函数可以一次做更多检验。corr.test()函数可以为Pearson、Spearman或Kendall相关计算相关矩阵和显著性水平。
# 加载psych包
library(psych)
# 计算相关矩阵并进行显著性检验
corr.test(states,use="complete")
在多元正态性的假设下,ggm包中的pcor.test()函数可以用来检验在控制一个或多个额外变量时两个变量之间的条件独立性。使用格式为:
pcor.test(r,q,n)
其中,r是pcor()函数计算得到的偏相关系数,q为要控制的变量数(以数值表示位置),n为样本量大小。