感謝各位簡(jiǎn)友一直的關(guān)注。
請(qǐng)關(guān)注:感謝陪伴
什么是相關(guān)矩陣?
相關(guān)矩陣 又稱 相關(guān)性矩陣
之前,我們描述了如何在兩個(gè)變量之間進(jìn)行相關(guān)性測(cè)。在本文中,您將學(xué)習(xí)如何計(jì)算相關(guān)矩陣,該矩陣用于同時(shí)研究多個(gè)變量之間的依賴關(guān)系。結(jié)果是一個(gè)包含每個(gè)變量與其他變量之間的相關(guān)系數(shù)的表。
相關(guān)分析有不同的方法:Pearson參數(shù)相關(guān)檢驗(yàn),Spearman和Kendall基于秩的相關(guān)分析。這些方法將在下一節(jié)中討論。
本R教程的目的是向您展示如何計(jì)算和可視化相關(guān)矩陣。我們還提供了用于計(jì)算和可視化相關(guān)矩陣的在線軟件。
在R中的計(jì)算相關(guān)矩陣
R函數(shù)
您可能知道,R函數(shù)cor()可用于計(jì)算相關(guān)矩陣。該函數(shù)的簡(jiǎn)化格式為:
cor(x, method = c("pearson", "kendall", "spearman"))
- x:數(shù)字矩陣或數(shù)據(jù)框。
- 方法:表示要計(jì)算的相關(guān)系數(shù)。默認(rèn)值為皮爾遜相關(guān)系數(shù),該系數(shù)測(cè)量?jī)蓚€(gè)變量之間的線性相關(guān)性。肯德爾和斯皮爾曼相關(guān)方法是基于非參數(shù)等級(jí)的相關(guān)檢驗(yàn)。
如果您的數(shù)據(jù)包含缺失值,請(qǐng)使用以下R代碼通過按大小寫刪除來處理缺失值。
cor(x, method = "pearson", use = "complete.obs")
將數(shù)據(jù)導(dǎo)入R
在這里,我們將使用從內(nèi)置R數(shù)據(jù)集mtcars派生的數(shù)據(jù)作為示例:
# 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
計(jì)算相關(guān)矩陣
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
在上表中,顯示了可能的變量對(duì)之間的相關(guān)系數(shù)。
請(qǐng)注意,如果您的數(shù)據(jù)包含缺失值,請(qǐng)使用以下R代碼通過來處理缺失值。
cor(my_data, use = "complete.obs")
不幸的是,函數(shù)cor()僅返回變量之間的相關(guān)系數(shù)。在下一節(jié)中,我們將使用Hmisc R包來計(jì)算相關(guān)性p值。
具有顯著性水平(p值)的相關(guān)矩陣
功能 rcorr() [在Hmisc包]能為 皮爾森和Spearman相關(guān) 計(jì)算 顯著性水平。對(duì)于數(shù)據(jù)表中所有可能的列對(duì),它都返回相關(guān)系數(shù)和相關(guān)的p值。
- 簡(jiǎn)化格式:
rcorr(x, type = c("pearson","spearman"))
x應(yīng)該是一個(gè)矩陣。的相關(guān)性類型可以是皮爾森或斯皮爾曼。
- 安裝Hmisc軟件包:
install.packages("Hmisc")
- 使用rcorr()函數(shù)
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()函數(shù)的輸出包含 -r
相關(guān)矩陣 和 -P
顯著性水平。
如果要從輸出中提取p值或相關(guān)系數(shù),請(qǐng)使用以下命令:
# Extract the correlation coefficients
res2$r
# Extract p-values
res2$P
格式化相關(guān)矩陣的簡(jiǎn)單函數(shù)
本節(jié)提供了一個(gè)簡(jiǎn)單的函數(shù),用于將相關(guān)矩陣格式化為具有4列的表,其中包含:
- 第1列:行名(相關(guān)性測(cè)試的變量1)
- 第2列:列名(相關(guān)性測(cè)試的變量2)
- 第3列:相關(guān)系數(shù)
- 第4列:相關(guān)性的p值
可以使用以下自定義函數(shù):
# ++++++++++++++++++++++++++++
# 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
可視化相關(guān)矩陣
在R軟件中可以用不同的方式顯示相關(guān)矩陣:
- symnum()函數(shù)
- corrplot()函數(shù)繪制相關(guān)圖
- 散點(diǎn)圖
- 熱圖
使用 symnum() 函數(shù):符號(hào)數(shù)字編碼
R函數(shù) symnum() 根據(jù)相關(guān)程度用符號(hào)替換相關(guān)系數(shù)。它以相關(guān)矩陣作為參數(shù):
- 簡(jiǎn)化格式:
symnum(x, cutpoints = c(0.3, 0.6, 0.8, 0.9, 0.95),
symbols = c(" ", ".", ",", "+", "*", "B"),
abbr.colnames = TRUE)
x:可視化的相關(guān)矩陣
cutpoints :相關(guān)系數(shù)的臨界點(diǎn)。0和0.3之間的相關(guān)系數(shù)用空格(“”)替換;0.3和0.6之間的相關(guān)系數(shù)用“。”替換;等等…
symbol:要使用的符號(hào)。
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之間的相關(guān)系數(shù)由空格(“”)替換;0.3和0.6之間的相關(guān)系數(shù)由“。”替換;等等…
使用corrplot()函數(shù):繪制相關(guān)圖
在同名程序包中的函數(shù)corrplot()創(chuàng)建相關(guān)矩陣的圖形顯示,突出顯示數(shù)據(jù)表中最相關(guān)的變量。
在該圖中,相關(guān)系數(shù)根據(jù)該值著色。相關(guān)矩陣也可以根據(jù)變量之間的關(guān)聯(lián)程度進(jìn)行重新排序。
- 安裝corrplot:
install.packages("corrplot")
- 使用corrplot()創(chuàng)建一個(gè)相關(guān)圖:
函數(shù)corrplot()將相關(guān)矩陣作為第一個(gè)參數(shù)。第二個(gè)參數(shù)(類型=“上層”)用于僅顯示相關(guān)矩陣的上三角。
library(corrplot)
corrplot(res, type = "upper", order = "hclust",
tl.col = "black", tl.srt = 45)
正相關(guān)以藍(lán)色顯示,負(fù)相關(guān)以紅色顯示。顏色強(qiáng)度和圓圈的大小與相關(guān)系數(shù)成正比。在相關(guān)圖的右側(cè),圖例顏色顯示了相關(guān)系數(shù)和相應(yīng)的顏色。
- 使用“ hclust”方法根據(jù)相關(guān)系數(shù)對(duì)相關(guān)矩陣進(jìn)行重新排序。
- tl.col(用于文本標(biāo)簽顏色)和tl.srt(用于文本標(biāo)簽字符串旋轉(zhuǎn))用于更改文本的顏色和旋轉(zhuǎn)。
- 參數(shù)類型的可能值為:“ upper”,“ lower”,“ full”
閱讀更多:使用corrplot可視化相關(guān)矩陣。
也可以將相關(guān)圖與顯著性檢驗(yàn)相結(jié)合。我們將通過rcorr()函數(shù)(在Hmisc包中)使用在上一節(jié)中生成的結(jié)果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的相關(guān)被認(rèn)為是無關(guān)緊要的。在這種情況下,相關(guān)系數(shù)值留為空白或添加叉號(hào)。
使用chart.Correlation():繪制散點(diǎn)圖
軟件包 PerformanceAnalytics中 的功能chart.Correlation() [可用于顯示相關(guān)矩陣的圖表。
- 安裝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)
在上圖中:
- 每個(gè)變量的分布都顯示在對(duì)角線上。
- 在對(duì)角線的底部:顯示帶有擬合線的二元散點(diǎn)圖
- 在對(duì)角線的頂部:相關(guān)值加上顯著性水平(以星標(biāo)表示)
- 每個(gè)顯著性水平都與一個(gè)符號(hào)相關(guān)聯(lián):p值(0、0.001、0.01、0.05、0.1、1)<=>符號(hào)(“ ***”,“ **”,“ *”,“。”,“ ”)
使用heatmap()
# Get some colors
col<- colorRampPalette(c("blue", "white", "red"))(20)
heatmap(x = res, col = col, symm = TRUE)
- x:要繪制的相關(guān)矩陣
- col:調(diào)色板
- symm:邏輯指示x是否應(yīng)對(duì)稱對(duì)待;僅當(dāng)x是方矩陣時(shí)才為true。
覺得有用的老鐵麻煩點(diǎn)個(gè)小愛心~??