数据准备
df <- read.table(file = "D:/Documents/R wd/df.csv", header = T, sep = ",", colClasses = c(year = "character", nitrogen = "character", variety = "character", block = "character")) # 数据导入。
df # 查看数据。
## year nitrogen variety block v1 v2 v3 v4 v5
## 1 2020 N1 a 1 1.26 2.14 3.4 4.66 3.25
## 2 2020 N1 a 2 1.20 2.90 4.1 5.30 1.27
## 3 2020 N1 a 3 1.30 3.00 4.3 5.60 2.24
## 4 2020 N1 b 1 1.08 1.72 2.8 3.88 1.00
## 5 2020 N1 b 2 1.05 1.65 2.7 3.75 3.12
## 6 2020 N1 b 3 1.15 1.35 2.5 3.65 4.57
## 7 2020 N2 a 1 1.32 3.78 5.1 6.42 5.85
## 8 2020 N2 a 2 1.28 4.32 5.6 6.88 6.48
## 9 2020 N2 a 3 1.35 3.95 5.3 6.65 7.21
## 10 2020 N2 b 1 1.33 3.47 4.8 6.13 6.56
## 11 2020 N2 b 2 1.28 2.72 4.0 5.28 8.43
## 12 2020 N2 b 3 1.30 3.90 5.2 6.50 7.55
## 13 2021 N1 a 1 1.19 3.61 4.8 5.99 3.11
## 14 2021 N1 a 2 1.21 3.29 4.5 5.71 2.54
## 15 2021 N1 a 3 1.24 3.26 4.5 5.74 1.28
## 16 2021 N1 b 1 1.09 2.71 3.8 4.89 3.24
## 17 2021 N1 b 2 1.28 2.32 3.6 4.88 1.27
## 18 2021 N1 b 3 1.35 1.95 3.3 4.65 1.15
## 19 2021 N2 a 1 1.45 4.35 5.8 7.25 5.74
## 20 2021 N2 a 2 1.40 3.80 5.2 6.60 6.85
## 21 2021 N2 a 3 1.37 4.23 5.6 6.97 7.42
## 22 2021 N2 b 1 1.28 2.72 4.0 5.28 8.20
## 23 2021 N2 b 2 1.15 3.35 4.5 5.65 5.70
## 24 2021 N2 b 3 1.24 3.46 4.7 5.94 6.00
7.3 相关
相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。
相关系数可以用来描述定量变量之间的关系。相关系数的符号()表明关系的方向(正相关+或负相关-),其值的大小表示关系的强弱程度(完全不相关时为0,完全相关时为1)。
相关性强弱程度判定
|r|>0.95:显著性相关;
|r|≥0.8:高度相关;
0.5≤|r|<0.8:中度相关;
0.3≤|r|<0.5:低度相关;
|r|<0.3:弱相关。
7.3.1 相关的类型
1.Pearson、Spearman和Kendall相关
Pearson积差相关系数衡量了两个定量变量之间的线性相关程度。数据符合正态分布时使用。
Spearman等级相关系数则衡量分级定序变量之间的相关程度。数据不符合正态分布时使用。
Kendall’s Tau相关系数也是一种非参数的等级相关度量。
cor()函数可以计算这三种相关系数,而cov()函数可用来计算协方差。
cor(x, use= , method=)
默认参数为use="everything"和method="pearson"。

cov(df[, 5:9]) # 计算df数据5到9列方差和协方差。
## v1 v2 v3 v4 v5
## v1 0.01036359 0.05478315 0.06514674 0.07551033 0.1146962
## v2 0.05478315 0.76947228 0.82425543 0.87903859 1.1895592
## v3 0.06514674 0.82425543 0.88940217 0.95454891 1.3042554
## v4 0.07551033 0.87903859 0.95454891 1.03005924 1.4189516
## v5 0.11469620 1.18955924 1.30425543 1.41895163 6.3269650
cor(df[, 5:9]) # 计算df数据5到9列的Pearson积差相关系数。
## v1 v2 v3 v4 v5
## v1 1.0000000 0.6134730 0.6785604 0.7308364 0.4479157
## v2 0.6134730 1.0000000 0.9963599 0.9873710 0.5391280
## v3 0.6785604 0.9963599 1.0000000 0.9972820 0.5498141
## v4 0.7308364 0.9873710 0.9972820 1.0000000 0.5558259
## v5 0.4479157 0.5391280 0.5498141 0.5558259 1.0000000
cor(df[, 5:9], method = "spearman") # 计算df数据5到9列的 Spearman等级相关系数。
## v1 v2 v3 v4 v5
## v1 1.0000000 0.6141791 0.6317174 0.6473308 0.4569266
## v2 0.6141791 1.0000000 0.9984764 0.9939104 0.5345803
## v3 0.6317174 0.9984764 1.0000000 0.9984764 0.5332178
## v4 0.6473308 0.9939104 0.9984764 1.0000000 0.5302305
## v5 0.4569266 0.5345803 0.5332178 0.5302305 1.0000000
cor(df[, 5:9], method = "kendall") # 计算df数据5到9列的Kendall’s Tau相关系数。
## v1 v2 v3 v4 v5
## v1 1.0000000 0.4510791 0.4785122 0.4954475 0.2920922
## v2 0.4510791 1.0000000 0.9890307 0.9563636 0.4000000
## v3 0.4785122 0.9890307 1.0000000 0.9890307 0.3970830
## v4 0.4954475 0.9563636 0.9890307 1.0000000 0.3854545
## v5 0.2920922 0.4000000 0.3970830 0.3854545 1.0000000
在默认情况下得到的结果是一个方阵(所有变量之间两两计算相关) 。你同样可以计算非方形的相关矩阵。当你对某一组变量与另外一组变量的关系感兴趣时,可以选择感兴趣的变量在cor函数中进行相关系数的计算。
cor(df[, c("v1", "v3")], df[, c("v2", "v5")]) # 计算df中v1和v3与v2和v5的相关系数。
## v2 v5
## v1 0.6134730 0.4479157
## v3 0.9963599 0.5498141
2.偏相关
偏相关(partial correlation)是指在控制一个或多个定量变量时,另外两个定量变量之间的相互关系。ggm包中的pcor()函数计算偏相关系数。偏相关系数常用于社会科学的研究中。
pcor(u, S)
其中的u是一个数值向量,前两个数值表示要计算相关系数的变量下标,其余的数值为条件变量(即要排除影响的变量)的下标。S为变量的协方差阵。
df2 <- df[5:9] # 构建数据集df2.
df2 # 显示数据集df2
## v1 v2 v3 v4 v5
## 1 1.26 2.14 3.4 4.66 3.25
## 2 1.20 2.90 4.1 5.30 1.27
## 3 1.30 3.00 4.3 5.60 2.24
## 4 1.08 1.72 2.8 3.88 1.00
## 5 1.05 1.65 2.7 3.75 3.12
## 6 1.15 1.35 2.5 3.65 4.57
## 7 1.32 3.78 5.1 6.42 5.85
## 8 1.28 4.32 5.6 6.88 6.48
## 9 1.35 3.95 5.3 6.65 7.21
## 10 1.33 3.47 4.8 6.13 6.56
## 11 1.28 2.72 4.0 5.28 8.43
## 12 1.30 3.90 5.2 6.50 7.55
## 13 1.19 3.61 4.8 5.99 3.11
## 14 1.21 3.29 4.5 5.71 2.54
## 15 1.24 3.26 4.5 5.74 1.28
## 16 1.09 2.71 3.8 4.89 3.24
## 17 1.28 2.32 3.6 4.88 1.27
## 18 1.35 1.95 3.3 4.65 1.15
## 19 1.45 4.35 5.8 7.25 5.74
## 20 1.40 3.80 5.2 6.60 6.85
## 21 1.37 4.23 5.6 6.97 7.42
## 22 1.28 2.72 4.0 5.28 8.20
## 23 1.15 3.35 4.5 5.65 5.70
## 24 1.24 3.46 4.7 5.94 6.00
library(ggm) # 调用ggm包。
pcor(c(1,5,4), cov(df2)) # 控制了第4列变量,也就是v4列,对v1和v5列求算偏相关系数。
## [1] 0.07348866
3.其他类型的相关
polycor包中的hetcor()函数可以计算一种混合的相关矩阵,其中包括数值型变量的Pearson积差相关系数、数值型变量和有序变量之间的多系列相关系数、有序变量之间的多分格相关系数以及二分变量之间的四分相关系数。多系列、多分格和四分相关系数都假设有序变量或二分变量由潜在的正态分布导出。
7.3.2 相关性的显著性检验
常用的原假设为变量间不相关(即总体的相关系数为0)。你可以使用cor.test()函数对单个的Pearson、Spearman和Kendall相关系数进行检验。
cor.test(x, y, alternative = , method = )
x和y:要检验相关性的变量;
alternative:用来指定进行双侧检验或单侧检验(取值为"two.side"、"less"或"greater");当研究的假设为总体的相关系数小于0时,请使用alternative="less"。在研究的假设为总体的相关系数大于0时,应使用alternative="greater"。在默认情况下,假设为alternative="two.side"(总体相关系数不等于0)。
method:指定要计算的相关类型("pearson"、"kendall"或"spearman")。
cor.test(df2$v1, df2$v5) # 检验df2数据集v1和v5列相关显著性。
##
## Pearson's product-moment correlation
##
## data: df2$v1 and df2$v5
## t = 2.3498, df = 22, p-value = 0.02817
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.05433698 0.72103095
## sample estimates:
## cor
## 0.4479157
结果解释:原假设为v1和v5不相关,相关系数为0,检验结果显示p值小于0.05,推翻原假设,表明v1和v5相关。
遗憾的是,cor.test每次只能检验一种相关关系。但幸运的是,psych包中提供的
corr.test()函数可以一次做更多事情。corr.test()函数可以为Pearson、Spearman或Kendall相关计算相关矩阵和显著性水平。
corr.test(x, use)
参数use=的取值可为"pairwise"或"complete"(分别表示对缺失值执行成对删除或行删除)。参数method=的取值可为"pearson"(默认值)、"spearman"或"kendall"。
library(psych) # 调用psych包。
corr.test(df2, use ="complete") # 各指标相关性显著性。
## Call:corr.test(x = df2, use = "complete")
## Correlation matrix
## v1 v2 v3 v4 v5
## v1 1.00 0.61 0.68 0.73 0.45
## v2 0.61 1.00 1.00 0.99 0.54
## v3 0.68 1.00 1.00 1.00 0.55
## v4 0.73 0.99 1.00 1.00 0.56
## v5 0.45 0.54 0.55 0.56 1.00
## Sample Size
## [1] 24
## Probability values (Entries above the diagonal are adjusted for multiple tests.)
## v1 v2 v3 v4 v5
## v1 0.00 0.01 0.00 0 0.03
## v2 0.00 0.00 0.00 0 0.02
## v3 0.00 0.00 0.00 0 0.02
## v4 0.00 0.00 0.00 0 0.02
## v5 0.03 0.01 0.01 0 0.00
##
## To see confidence intervals of the correlations, print with the short=FALSE option
其他显著性检验
在多元正态性的假设下,psych包中的pcor.test()函数可以用来检验在控制一个或多个额外变量时两个变量之间的条件独立性。
pcor.test(r, q, n)
其中的r是由pcor()函数计算得到的偏相关系数,q为要控制的变量数(以数值表示位置),n为样本大小。
pcor.test(pcor(c(1,5,4), cov(df2)), 4, n=24) # 检验df2数据集v1和v5的条件独立性,控制变量v4。
## $tval
## [1] 0.3126313
##
## $df
## [1] 18
##
## $pvalue
## [1] 0.7581538
7.3.3 相关关系的可视化
以相关系数表示的二元关系可以通过散点图和散点图矩阵进行可视化,而相关图(correlogram)则为以一种有意义的方式比较大量的相关系数提供了一种独特而强大的方法。
利用corrgram包中的corrgram()函数,你可以以图形方式展示该相关系数矩阵。
library(corrgram) # 调用corrgram包。
corrgram(df2) # 绘制基本相关关系矩阵图。

参考资料:
- 《R语言实战》(中文版),人民邮电出版社,2013.
- 相关性分析-百度,https://baike.baidu.com/item/%E7%9B%B8%E5%85%B3%E6%80%A7%E5%88%86%E6%9E%90
- 数据相关性分析,https://zhuanlan.zhihu.com/p/343361192