相关系数可以用来描述定量变量之间的关系。 相关系数的符号(±)表明关系的方向(正相关或负相关),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1) 本次训练中,我们将关注多种相关系数和相关性的显著检验。
本次训练的数据集采用R基础安装自带的state.x77数据集,它提供了美国50个州在1977年的人口、收入、文盲率、预期寿命、谋杀率和高中毕业率数据。可以通过help(“state.x77”)查看详细说明
R中可以计算多种相关系数,包括: * Pearson(皮尔森)相关系数 * Spearman(斯皮尔曼)相关系数 * Kendall(肯德尔)相关系数 * 偏相关系数 * 多分格(polychoric)相关系数 * 多系列(polyserial)相关系数
Pearson积差相关系数衡量了两个定量变量之间的线性相关程度。 Spearman等级相关系数则衡量分级定序变量之间的相关程度。 Kendall’s Tau相关系数也是一种非参数的等级相关度量。 cor()函数可以计算这三种相关系数,而cov()函数可用来计算协方差,两个函数的参数有很多,具体可以通过?cor来查看
cor(x, y = NULL, use = “everything”, method = c(“pearson”, “kendall”, “spearman”))
cov(x, y = NULL, use = “everything”, method = c(“pearson”, “kendall”, “spearman”))
表1 cor和cov的参数 参数|描述 x|一个数值型向量,矩阵或数据框 y|默认为NULL,默认情况下y=x,与x兼容,可以是一个数值型的向量、矩阵或数据框 na.rm|逻辑参数,缺失值是否移除 use|“everything”(默认,遇到缺失数据时,相关系数的计算结果将被设为missing), “all.obs”(假设不存在确实数据——遇到确实数据时将报错), “complete.obs”(删除行), “na.or.complete”, or “pairwise.complete.obs”(成对删除) method|指定相关系数的类型。可选类型为pearson,spearman,kendall
states<- state.x77[,1:6]
cov(states)
## Population Income Illiteracy Life Exp Murder
## Population 19931683.7588 571229.7796 292.8679592 -407.8424612 5663.523714
## Income 571229.7796 377573.3061 -163.7020408 280.6631837 -521.894286
## Illiteracy 292.8680 -163.7020 0.3715306 -0.4815122 1.581776
## Life Exp -407.8425 280.6632 -0.4815122 1.8020204 -3.869480
## Murder 5663.5237 -521.8943 1.5817755 -3.8694804 13.627465
## HS Grad -3551.5096 3076.7690 -3.2354694 6.3126849 -14.549616
## HS Grad
## Population -3551.509551
## Income 3076.768980
## Illiteracy -3.235469
## Life Exp 6.312685
## Murder -14.549616
## HS Grad 65.237894
cor(states)
## Population Income Illiteracy Life Exp Murder
## Population 1.00000000 0.2082276 0.1076224 -0.06805195 0.3436428
## Income 0.20822756 1.0000000 -0.4370752 0.34025534 -0.2300776
## Illiteracy 0.10762237 -0.4370752 1.0000000 -0.58847793 0.7029752
## Life Exp -0.06805195 0.3402553 -0.5884779 1.00000000 -0.7808458
## Murder 0.34364275 -0.2300776 0.7029752 -0.78084575 1.0000000
## HS Grad -0.09848975 0.6199323 -0.6571886 0.58221620 -0.4879710
## HS Grad
## Population -0.09848975
## Income 0.61993232
## Illiteracy -0.65718861
## Life Exp 0.58221620
## Murder -0.48797102
## HS Grad 1.00000000
cor(states,method = "spearman")
## Population Income Illiteracy Life Exp Murder
## Population 1.0000000 0.1246098 0.3130496 -0.1040171 0.3457401
## Income 0.1246098 1.0000000 -0.3145948 0.3241050 -0.2174623
## Illiteracy 0.3130496 -0.3145948 1.0000000 -0.5553735 0.6723592
## Life Exp -0.1040171 0.3241050 -0.5553735 1.0000000 -0.7802406
## Murder 0.3457401 -0.2174623 0.6723592 -0.7802406 1.0000000
## HS Grad -0.3833649 0.5104809 -0.6545396 0.5239410 -0.4367330
## HS Grad
## Population -0.3833649
## Income 0.5104809
## Illiteracy -0.6545396
## Life Exp 0.5239410
## Murder -0.4367330
## HS Grad 1.0000000
可以看出收入和高中毕业率有很强的正相关性,谋杀和预期寿命有很强的负相关性; 我们也可以指定x和y来进行观察
x <- state.x77[,c("Population","Income","Illiteracy","Life Exp")]
y <- state.x77[,c("Murder","HS Grad")]
cor(x,y)
## Murder HS Grad
## Population 0.3436428 -0.09848975
## Income -0.2300776 0.61993232
## Illiteracy 0.7029752 -0.65718861
## Life Exp -0.7808458 0.58221620
但要注意,上述结果为指明相关系数是否显著不为0,这说明我们要有足够的证据得出总体相关系数不为0的结论。因此我们要进行相关系数的显著性检验。
偏相关是指在控制一个或多个定量变量时,另外两个定量变量之间的相互关系。这里使用ggm包中的pcor()函数计算偏相关系数。调用格式如下: pcor(u,S) “u”为一个数值向量,前两个下标表明要计算相关系数的变量下标,其余的数值为条件变量(即要排除影响或者控制的变量)的下标。S为变量的协方差阵。
library(ggm)
#在控制了收入、文盲和高中毕业率时
#人口和谋杀率的偏相关系数
pcor(c(1,5,2,3,6),cov(states))
## [1] 0.3462724
拓展,还有一个polycor包中的hetcor()函数可以计算一种混合的相关矩阵,可以用于计算几乎所有的相关系数。可以参考详细文档
前面的练习已经提到过,在计算出相关系数以后,还要对这些系数进行统计显著性检验,常用的原假设为H0:变量间不相关(即总体的相关系数为0)。这可使用cor.test()函数对单个的Pearson,Spearman和Kendall相关系数进行检验。调用格式如下:
cor.test(x, y, alternative = c(“two.sided”, “less”, “greater”), method = c(“pearson”, “kendall”, “spearman”), exact = NULL, conf.level = 0.95, continuity = FALSE, …)
x和y为要检验相关性的变量,alternative制定双侧检验或单侧检验。
#Illiteracy <- states[,3]
Life.Exp <- states[,4]
Murder <- states[,5]
cor.test(Life.Exp,Murder)
##
## Pearson's product-moment correlation
##
## data: Life.Exp and Murder
## t = -8.6596, df = 48, p-value = 2.26e-11
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.8700837 -0.6420442
## sample estimates:
## cor
## -0.7808458
p值小于0.05,可以拒绝原假设,说明预期寿命和谋杀率之间的总体相关度不为0,切为负相关
不足的是cor.test()一次只能检验一种相关关系。这里可以用psych包中提供的corr.test()函数来一次检验多种相关关系。
library(psych)
corr.test(states,use="complete")
## Call:corr.test(x = states, use = "complete")
## Correlation matrix
## Population Income Illiteracy Life Exp Murder HS Grad
## Population 1.00 0.21 0.11 -0.07 0.34 -0.10
## Income 0.21 1.00 -0.44 0.34 -0.23 0.62
## Illiteracy 0.11 -0.44 1.00 -0.59 0.70 -0.66
## Life Exp -0.07 0.34 -0.59 1.00 -0.78 0.58
## Murder 0.34 -0.23 0.70 -0.78 1.00 -0.49
## HS Grad -0.10 0.62 -0.66 0.58 -0.49 1.00
## Sample Size
## [1] 50
## Probability values (Entries above the diagonal are adjusted for multiple tests.)
## Population Income Illiteracy Life Exp Murder HS Grad
## Population 0.00 0.59 1.00 1.0 0.10 1
## Income 0.15 0.00 0.01 0.1 0.54 0
## Illiteracy 0.46 0.00 0.00 0.0 0.00 0
## Life Exp 0.64 0.02 0.00 0.0 0.00 0
## Murder 0.01 0.11 0.00 0.0 0.00 0
## HS Grad 0.50 0.00 0.00 0.0 0.00 0
##
## To see confidence intervals of the correlations, print with the short=FALSE option
使用相关关系图correlogram进行相关关系的可视化
library(corrgram)
corrgram(states,order = TRUE,lower.panel = panel.shade,upper.panel = panel.pie,text.panel = panel.txt,main="Correlogram of state.x77 intercorrelations")