感谢各位简友一直的关注。
请关注:感谢陪伴
什么是相关矩阵?
相关矩阵 又称 相关性矩阵
之前,我们描述了如何在两个变量之间进行相关性测。在本文中,您将学习如何计算相关矩阵,该矩阵用于同时研究多个变量之间的依赖关系。结果是一个包含每个变量与其他变量之间的相关系数的表。
相关分析有不同的方法:Pearson参数相关检验,Spearman和Kendall基于秩的相关分析。这些方法将在下一节中讨论。
本R教程的目的是向您展示如何计算和可视化相关矩阵。我们还提供了用于计算和可视化相关矩阵的在线软件。
在R中的计算相关矩阵
R函数
您可能知道,R函数cor()可用于计算相关矩阵。该函数的简化格式为:
cor(x, method = c("pearson", "kendall", "spearman"))
如果您的数据包含缺失值,请使用以下R代码通过按大小写删除来处理缺失值。
cor(x, method = "pearson", use = "complete.obs")
将数据导入R
在这里,我们将使用从内置R数据集mtcars派生的数据作为示例:
# Load data
data("mtcars")
my_data <- mtcars[, c(1,3,4,5,6,7)]
# print the first 6 rows
head(my_data, 6)
mpg disp hp drat wt qsec
Mazda RX4 21.0 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 160 110 3.90 2.875 17.02
Datsun 710 22.8 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 360 175 3.15 3.440 17.02
Valiant 18.1 225 105 2.76 3.460 20.22
计算相关矩阵
res <- cor(my_data)
round(res, 2)
mpg disp hp drat wt qsec
mpg 1.00 -0.85 -0.78 0.68 -0.87 0.42
disp -0.85 1.00 0.79 -0.71 0.89 -0.43
hp -0.78 0.79 1.00 -0.45 0.66 -0.71
drat 0.68 -0.71 -0.45 1.00 -0.71 0.09
wt -0.87 0.89 0.66 -0.71 1.00 -0.17
qsec 0.42 -0.43 -0.71 0.09 -0.17 1.00
在上表中,显示了可能的变量对之间的相关系数。
请注意,如果您的数据包含缺失值,请使用以下R代码通过来处理缺失值。
cor(my_data, use = "complete.obs")
不幸的是,函数cor()仅返回变量之间的相关系数。在下一节中,我们将使用Hmisc R包来计算相关性p值。
具有显着性水平(p值)的相关矩阵
功能 rcorr() [在Hmisc包]能为 皮尔森和Spearman相关 计算 显着性水平。对于数据表中所有可能的列对,它都返回相关系数和相关的p值。
- 简化格式:
rcorr(x, type = c("pearson","spearman"))
x应该是一个矩阵。的相关性类型可以是皮尔森或斯皮尔曼。
- 安装Hmisc软件包:
install.packages("Hmisc")
- 使用rcorr()函数
library("Hmisc")
res2 <- rcorr(as.matrix(my_data))
res2
mpg disp hp drat wt qsec
mpg 1.00 -0.85 -0.78 0.68 -0.87 0.42
disp -0.85 1.00 0.79 -0.71 0.89 -0.43
hp -0.78 0.79 1.00 -0.45 0.66 -0.71
drat 0.68 -0.71 -0.45 1.00 -0.71 0.09
wt -0.87 0.89 0.66 -0.71 1.00 -0.17
qsec 0.42 -0.43 -0.71 0.09 -0.17 1.00
n= 32
P
mpg disp hp drat wt qsec
mpg 0.0000 0.0000 0.0000 0.0000 0.0171
disp 0.0000 0.0000 0.0000 0.0000 0.0131
hp 0.0000 0.0000 0.0100 0.0000 0.0000
drat 0.0000 0.0000 0.0100 0.0000 0.6196
wt 0.0000 0.0000 0.0000 0.0000 0.3389
qsec 0.0171 0.0131 0.0000 0.6196 0.3389
rcorr()函数的输出包含 -r
相关矩阵 和 -P
显著性水平。
如果要从输出中提取p值或相关系数,请使用以下命令:
# Extract the correlation coefficients
res2$r
# Extract p-values
res2$P
格式化相关矩阵的简单函数
本节提供了一个简单的函数,用于将相关矩阵格式化为具有4列的表,其中包含:
- 第1列:行名(相关性测试的变量1)
- 第2列:列名(相关性测试的变量2)
- 第3列:相关系数
- 第4列:相关性的p值
可以使用以下自定义函数:
# ++++++++++++++++++++++++++++
# flattenCorrMatrix
# ++++++++++++++++++++++++++++
# cormat : matrix of the correlation coefficients
# pmat : matrix of the correlation p-values
flattenCorrMatrix <- function(cormat, pmat) {
ut <- upper.tri(cormat)
data.frame(
row = rownames(cormat)[row(cormat)[ut]],
column = rownames(cormat)[col(cormat)[ut]],
cor =(cormat)[ut],
p = pmat[ut]
)
}
用法示例:
library(Hmisc)
res2<-rcorr(as.matrix(mtcars[,1:7]))
flattenCorrMatrix(res2$r, res2$P)
row column cor p
1 mpg cyl -0.85216194 6.112697e-10
2 mpg disp -0.84755135 9.380354e-10
3 cyl disp 0.90203285 1.803002e-12
4 mpg hp -0.77616835 1.787838e-07
5 cyl hp 0.83244747 3.477856e-09
6 disp hp 0.79094857 7.142686e-08
7 mpg drat 0.68117189 1.776241e-05
8 cyl drat -0.69993812 8.244635e-06
9 disp drat -0.71021390 5.282028e-06
10 hp drat -0.44875914 9.988768e-03
11 mpg wt -0.86765939 1.293956e-10
12 cyl wt 0.78249580 1.217567e-07
13 disp wt 0.88797992 1.222311e-11
14 hp wt 0.65874785 4.145833e-05
15 drat wt -0.71244061 4.784268e-06
16 mpg qsec 0.41868404 1.708199e-02
17 cyl qsec -0.59124213 3.660527e-04
18 disp qsec -0.43369791 1.314403e-02
19 hp qsec -0.70822340 5.766250e-06
20 drat qsec 0.09120482 6.195823e-01
21 wt qsec -0.17471591 3.388682e-01
可视化相关矩阵
在R软件中可以用不同的方式显示相关矩阵:
- symnum()函数
- corrplot()函数绘制相关图
- 散点图
- 热图
使用 symnum() 函数:符号数字编码
R函数 symnum() 根据相关程度用符号替换相关系数。它以相关矩阵作为参数:
- 简化格式:
symnum(x, cutpoints = c(0.3, 0.6, 0.8, 0.9, 0.95),
symbols = c(" ", ".", ",", "+", "*", "B"),
abbr.colnames = TRUE)
x:可视化的相关矩阵
cutpoints :相关系数的临界点。0和0.3之间的相关系数用空格(“”)替换;0.3和0.6之间的相关系数用“。”替换;等等…
symbol:要使用的符号。
abbr.colnames:逻辑值。如果为TRUE,则缩写名称。
用法示例:
symnum(res, abbr.colnames = FALSE)
mpg disp hp drat wt qsec
mpg 1
disp + 1
hp , , 1
drat , , . 1
wt + + , , 1
qsec . . , 1
attr(,"legend")
[1] 0 ' ' 0.3 '.' 0.6 ',' 0.8 '+' 0.9 '*' 0.95 'B' 1
如图例所示,0和0.3之间的相关系数由空格(“”)替换;0.3和0.6之间的相关系数由“。”替换;等等…
使用corrplot()函数:绘制相关图
在同名程序包中的函数corrplot()创建相关矩阵的图形显示,突出显示数据表中最相关的变量。
在该图中,相关系数根据该值着色。相关矩阵也可以根据变量之间的关联程度进行重新排序。
- 安装corrplot:
install.packages("corrplot")
- 使用corrplot()创建一个相关图:
函数corrplot()将相关矩阵作为第一个参数。第二个参数(类型=“上层”)用于仅显示相关矩阵的上三角。
library(corrplot)
corrplot(res, type = "upper", order = "hclust",
tl.col = "black", tl.srt = 45)
正相关以蓝色显示,负相关以红色显示。颜色强度和圆圈的大小与相关系数成正比。在相关图的右侧,图例颜色显示了相关系数和相应的颜色。
- 使用“ hclust”方法根据相关系数对相关矩阵进行重新排序。
- tl.col(用于文本标签颜色)和tl.srt(用于文本标签字符串旋转)用于更改文本的颜色和旋转。
- 参数类型的可能值为:“ upper”,“ lower”,“ full”
阅读更多:使用corrplot可视化相关矩阵。
也可以将相关图与显着性检验相结合。我们将通过rcorr()函数(在Hmisc包中)使用在上一节中生成的结果res.cor2:
# Insignificant correlation are crossed
corrplot(res2$r, type="upper", order="hclust",
p.mat = res2$P, sig.level = 0.01, insig = "blank")
# Insignificant correlations are leaved blank
corrplot(res2$r, type="upper", order="hclust",
p.mat = res2$P, sig.level = 0.01, insig = "blank")
在上图中,p值> 0.01的相关被认为是无关紧要的。在这种情况下,相关系数值留为空白或添加叉号。
使用chart.Correlation():绘制散点图
软件包 PerformanceAnalytics中 的功能chart.Correlation() [可用于显示相关矩阵的图表。
- 安装PerformanceAnalytics:
install.packages("PerformanceAnalytics")
- 使用chart.Correlation():
library("PerformanceAnalytics")
my_data <- mtcars[, c(1,3,4,5,6,7)]
chart.Correlation(my_data, histogram=TRUE, pch=19)
在上图中:
- 每个变量的分布都显示在对角线上。
- 在对角线的底部:显示带有拟合线的二元散点图
- 在对角线的顶部:相关值加上显着性水平(以星标表示)
- 每个显着性水平都与一个符号相关联:p值(0、0.001、0.01、0.05、0.1、1)<=>符号(“ ***”,“ **”,“ *”,“。”,“ ”)
使用heatmap()
# Get some colors
col<- colorRampPalette(c("blue", "white", "red"))(20)
heatmap(x = res, col = col, symm = TRUE)
- x:要绘制的相关矩阵
- col:调色板
- symm:逻辑指示x是否应对称对待;仅当x是方矩阵时才为true。
觉得有用的老铁麻烦点个小爱心~😏