在進(jìn)行基因分析中,我們時常會對樣本或基因之間的相關(guān)性進(jìn)行分析,雖然R語言中的cor函數(shù)可以進(jìn)行計算,但并沒有提供合適的可視化方法,今天我們介紹一個R包-ggcorr(https://briatte.github.io/ggcorr/),可以對數(shù)據(jù)的相關(guān)性分析進(jìn)行可視化。
安裝
ggcorr可通過GGally包進(jìn)行安裝:
#有兩種安裝方式
install.packages("GGally")
#or
source("https://raw.githubusercontent.com/briatte/ggcorr/master/ggcorr.R")#僅僅安裝該功能
依賴包
ggcorr的主要依賴包是ggplot2軟件包(ggplot2高效實用指南 (可視化腳本、工具、套路、配色))。
library(ggplot2)
舉個栗子|籃球統(tǒng)計
nba = read.csv("http://datasets.flowingdata.com/ppg2008.csv")
#讓我們看一下數(shù)據(jù)格式
head(nba)
Name G MIN PTS FGM FGA FGP FTM FTA FTP X3PM X3PA X3PP ORB DRB TRB AST STL BLK TO PF
Dwyane Wade 79 38.6 30.2 10.8 22.0 0.491 7.5 9.8 0.765 1.1 3.5 0.317 1.1 3.9 5.0 7.5 2.2 1.3 3.4 2.3
LeBron James 81 37.7 28.4 9.7 19.9 0.489 7.3 9.4 0.780 1.6 4.7 0.344 1.3 6.3 7.6 7.2 1.7 1.1 3.0 1.7
Kobe Bryant 82 36.2 26.8 9.8 20.9 0.467 5.9 6.9 0.856 1.4 4.1 0.351 1.1 4.1 5.2 4.9 1.5 0.5 2.6 2.3
Dirk Nowitzki 81 37.7 25.9 9.6 20.0 0.479 6.0 6.7 0.890 0.8 2.1 0.359 1.1 7.3 8.4 2.4 0.8 0.8 1.9 2.2
Danny Granger 67 36.2 25.8 8.5 19.1 0.447 6.0 6.9 0.878 2.7 6.7 0.404 0.7 4.4 5.1 2.7 1.0 1.4 2.5 3.1
Kevin Durant 74 39.0 25.3 8.9 18.8 0.476 6.1 7.1 0.863 1.3 3.1 0.422 1.0 5.5 6.5 2.8 1.3 0.7 3.0 1.8
我們可以看到top3分別是Wade,James,Kobe(洛杉磯的凌晨4點(diǎn)。。。。再也見不到了o(╥﹏╥)o)。
讓我們將整個數(shù)據(jù)集直接用ggcorr進(jìn)行分析,計算每一列數(shù)值列之間的相關(guān)性,并繪制一個下三角熱圖展示:
ggcorr(nba)
## Warning in ggcorr(nba): data in column(s) 'Name' are not numeric and were
## ignored
# 顏色設(shè)置的一個Warning,暫時忽略
## Warning: Non Lab interpolation is deprecated
相關(guān)性矩陣是一個對稱陣,這里用下三角熱圖展示全部信息。每個格子的顏色代表對于行與列的相關(guān)性,顏色越紅正相關(guān)性越強(qiáng),越藍(lán)負(fù)相關(guān)性越強(qiáng)。可以看出:
PTS (Percent of Team's Points, 每場得分), FGM (Field Goals Made, 投籃命中率), FGA (Field Goals Attempted, 嘗試投籃次數(shù))之間正相關(guān)性比較強(qiáng),確實多嘗試才能獲得更高的分?jǐn)?shù);DRB (Defensive Rebounds,防守籃板), ORB (Defensive Rebounds,進(jìn)攻籃板), TRB (Defensive Rebounds,總籃板)之間正相關(guān)性比較強(qiáng);3PA (Defensive Rebounds, 三分投籃),3PM (3 Point Field Goals Made,3分命中),3PP (3 Point Field Goal Percentage,3分命中率), FTP (Free Throw Percentage,罰球命中率)之間正相關(guān),但與籃板強(qiáng)負(fù)相關(guān),這也是挺符合場上分工的。
更多籃球術(shù)語見:
關(guān)聯(lián)數(shù)據(jù)集
ggcorr的第一個參數(shù)稱為data??梢允且粋€數(shù)據(jù)框(如上所示)或一個矩陣,在繪制之前將其轉(zhuǎn)換為數(shù)據(jù)框:
ggcorr(matrix(runif(5), 2, 5))
ggcorr也可以通過cor_matrix接受相關(guān)矩陣,在這種情況下,它的第一個參數(shù)必須設(shè)置為NULL,以指示ggcorr應(yīng)該使用相關(guān)矩陣:
ggcorr(data = NULL, cor_matrix = cor(nba[, -1], use = "everything"))
相關(guān)性方法
ggcorr支持cor函數(shù)提供的所有相關(guān)方法。
相關(guān)矩陣中需要考慮的第一個設(shè)置是要使用的observations的選擇。此設(shè)置可以采用以下任何值:“everything”,“ all.obs”,“complete.obs”,“na.or.complete”或“ pairwise.complete.obs”(ggcorr使用的默認(rèn)值)。
ggcorr要求的第二個設(shè)置是要計算的相關(guān)系數(shù)的類型。有三個可能的值:“pearson”(ggcorr和cor使用的默認(rèn)值),“kendall”或“spearman”。cor function的文檔中說明了每個設(shè)置之間的差異。一般而言,除非數(shù)據(jù)是序數(shù),否則默認(rèn)選擇應(yīng)為“pearson”,即基于pearson的方法產(chǎn)生相關(guān)系數(shù)。
例如:
# Pearson correlation coefficients, using pairwise observations (default method)
ggcorr(nba[, -1], method = c("pairwise", "pearson"))
# Pearson correlation coefficients, using all observations
ggcorr(nba[, -1], method = c("everything", "pearson"))
# Kendall correlation coefficients, using complete observations
ggcorr(nba[, -1], method = c("complete", "kendall"))
# Spearman correlation coefficients, using strictly complete observations
ggcorr(nba[, -1], method = c("all.obs", "spearman"))
繪圖參數(shù)
控制色階
默認(rèn)情況下,ggcorr使用從-1到+1的連續(xù)色標(biāo)顯示矩陣中表示相關(guān)性的強(qiáng)度。要切換到分類顏色,需要添加nbreaks參數(shù),該參數(shù)指定色標(biāo)中應(yīng)包含多少種區(qū)塊顏色:
ggcorr(nba[, 2:15], nbreaks = 5)
使用nbreaks參數(shù)時,通過digits參數(shù)控制色階中顯示的位數(shù)。digits參數(shù)默認(rèn)為兩位數(shù)字,但是如上例所示,如果breaks不需要更高的精度,它將默認(rèn)為一位數(shù)字。
對色階的進(jìn)一步調(diào)控包括:name參數(shù),用于設(shè)置其標(biāo)題;legend.size參數(shù),用于設(shè)置圖例文本的大??;以及legend.position參數(shù),用于控制圖例的顯示位置。使用方式和ggplot2相同:
ggcorr(nba[, 2:15], name = expression(rho), legend.position = "bottom", legend.size = 12) +
guides(fill = guide_colorbar(barwidth = 18, title.vjust = 0.75)) +
theme(legend.title = element_text(size = 14))
控制調(diào)色板
ggcorr使用默認(rèn)的顏色漸變,該漸變從鮮紅色到淺灰色再到鮮藍(lán)色。可以通過低,中和高參數(shù)來修改此梯度,這與ggplot2中的scale_gradient2控制參數(shù)類似:
ggcorr(nba[, 2:15], low = "steelblue", mid = "white", high = "darkred")
## Warning: Non Lab interpolation is deprecated
默認(rèn)情況下,漸變的中點(diǎn)設(shè)置為0.0,表示零相關(guān)。中點(diǎn)參數(shù)可用于修改此設(shè)置。特別是,將中點(diǎn)設(shè)置為NULL時將自動選擇中值相關(guān)系數(shù)為中點(diǎn),并向用戶顯示該值:
ggcorr(nba[, 2:15], midpoint = NULL)
## Color gradient midpoint set at median correlation to 0.08
控制色階顏色的最后一個選擇是通過調(diào)色板參數(shù)使用ColorBrewer調(diào)色板。僅當(dāng)色階進(jìn)行分類時(即使用nbreaks參數(shù)時),才應(yīng)使用此參數(shù):
ggcorr(nba[, 2:15], nbreaks = 4, palette = "RdGy")

控制幾何形狀
默認(rèn)情況下,ggcorr使用彩色圖塊表示相關(guān)系數(shù)的強(qiáng)度,類似于熱圖表示方式。
ggcorr也可以將相關(guān)性表示為按比例大小的圓圈,就是將其geom參數(shù)設(shè)置為“circle”:
ggcorr(nba[, 2:15], geom = "circle", nbreaks = 5)
此外,用戶可以通過min_size和max_size參數(shù)設(shè)置圓的最小和最大尺寸:
ggcorr(nba[, 2:15], geom = "circle", nbreaks = 5, min_size = 0, max_size = 6)
控制系數(shù)顯示
ggcorr可以通過將label參數(shù)設(shè)置為TRUE來在相關(guān)矩陣的頂部顯示相關(guān)系數(shù):
ggcorr(nba[, 2:15], label = TRUE)

label_color和label_size參數(shù)允許設(shè)置系數(shù)標(biāo)簽的樣式:
ggcorr(nba[, 2:15], nbreaks = 4, palette = "RdGy", label = TRUE, label_size = 3, label_color = "white")
label_round參數(shù)進(jìn)一步控制系數(shù)標(biāo)簽中顯示的位數(shù)(默認(rèn)為一位數(shù)字),label_alpha參數(shù)控制標(biāo)簽的透明度。如果label_alpha設(shè)置為TRUE,則透明度級別將像相關(guān)系數(shù)一樣變化,并且相關(guān)系數(shù)的絕對值越小,透明度越高:
ggcorr(nba[, 2:15], label = TRUE, label_size = 3, label_round = 2, label_alpha = TRUE)

控制變量標(biāo)簽
在上面的幾個示例中,變量標(biāo)簽(在相關(guān)矩陣的對角線上顯示)的呈現(xiàn)不一定是最佳的。要修改這些標(biāo)簽的外觀,要做的就是將geom_text支持的任何參數(shù)直接傳遞給ggcorr。以下示例顯示了如何在將標(biāo)簽向左移動并更改其顏色的同時減小標(biāo)簽的尺寸:
ggcorr(nba[, 2:15], hjust = 0.75, size = 5, color = "grey50")
相關(guān)矩陣中的變量標(biāo)簽可能會出現(xiàn)的一個問題是,變量標(biāo)簽太長而無法在圖的左下方完整顯示。如下圖:
ggcorr(nba[, 3:16], hjust = 0.75, size = 5, color = "grey50")
要解決此問題,ggcorr可以通過layout.exp參數(shù)在繪圖的水平軸上添加一些空格,有助于顯示長名稱的變量:
ggcorr(nba[, 3:16], hjust = 0.75, size = 5, color = "grey50", layout.exp = 1)
還等什么呢,快來試一試吧!