相關(guān)性分析 | R語言 -- 相關(guān)性矩陣及可視化

感謝各位簡(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)SpearmanKendall基于秩的相關(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

如圖例所示,00.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)矩陣-R軟件和統(tǒng)計(jì)

正相關(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")
相關(guān)矩陣-R軟件和統(tǒng)計(jì)

在上圖中,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)
散點(diǎn)圖,圖表

在上圖中:

  • 每個(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)
相關(guān)矩陣的熱圖
  • x:要繪制的相關(guān)矩陣
  • col:調(diào)色板
  • symm:邏輯指示x是否應(yīng)對(duì)稱對(duì)待;僅當(dāng)x是方矩陣時(shí)才為true。

覺得有用的老鐵麻煩點(diǎn)個(gè)小愛心~??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,327評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,996評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,316評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,406評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,128評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,524評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,576評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,759評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,310評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,065評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,249評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,821評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,479評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,909評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,140評(píng)論 1 290
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,984評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,228評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容