R數據可視化11:相關性圖

之前我們用熱圖的形式展現了相關關系,今天我們來用另外幾種形式來展現相關關系的圖。本文代碼來源:Visualize correlation matrix using correlogram

多種多樣的相關性圖

下圖是幾張很典型的相關性圖。

相關性圖

不過上圖中給的信息相對冗余,因為顏色和圖形大小都與相關性的大小有關,在我們作圖的過程中可以考慮將相關性的大小和pvalue用顏色和大小分別表示。
當然除此之外還有更加復雜的展現相關性的圖,下圖就不僅展示了相關系數的大小這么簡單,還給了各種分布,能夠更加具體地了解兩個變量之間的相關關系:

散點圖體現了所有樣本的各種參數情況,條形圖表現了不同參數的數據分布情況,數字和星號體現出相關性的具體值和顯著性。可以發現很多時候數據之間的相關性可能并不是簡單的線性相關,而只提供相關性檢驗結果的時候可能會造成信息缺失。但是你也可以看到這幅圖提供了比較多的信息,有時候也許這些信息并沒有這么重要,展示過多的數據會讓讀者感到困惑,找不到關鍵和重點。所以我們在作圖的時候要做好取舍,合理、客觀地展示有效的關鍵數據。

怎么做這些相關性圖

1)需要什么格式的數據
我們使用R自帶的數據mtcars,之前我們已經多次使用過這個數據集,在此不過多介紹。

首先我們來計算以下參數間的相關性,然后再畫圖。

data("mtcars")
M<-cor(mtcars)
head(M)
            mpg        cyl       disp         hp       drat         wt        qsec         vs         am       gear       carb
mpg   1.0000000 -0.8521620 -0.8475514 -0.7761684  0.6811719 -0.8676594  0.41868403  0.6640389  0.5998324  0.4802848 -0.5509251
cyl  -0.8521620  1.0000000  0.9020329  0.8324475 -0.6999381  0.7824958 -0.59124207 -0.8108118 -0.5226070 -0.4926866  0.5269883
disp -0.8475514  0.9020329  1.0000000  0.7909486 -0.7102139  0.8879799 -0.43369788 -0.7104159 -0.5912270 -0.5555692  0.3949769
hp   -0.7761684  0.8324475  0.7909486  1.0000000 -0.4487591  0.6587479 -0.70822339 -0.7230967 -0.2432043 -0.1257043  0.7498125
drat  0.6811719 -0.6999381 -0.7102139 -0.4487591  1.0000000 -0.7124406  0.09120476  0.4402785  0.7127111  0.6996101 -0.0907898
wt   -0.8676594  0.7824958  0.8879799  0.6587479 -0.7124406  1.0000000 -0.17471588 -0.5549157 -0.6924953 -0.5832870  0.4276059

當然如果你已經計算了好了相關性,那可以直接用相關性的表格進行繪圖,類似于下面的數據表:


2)如何作圖
本次介紹兩個R包:corrplot和PerformanceAnalytics
首先介紹corrplot包。主要的函數為corrplot,改變不同的method就會看到不同的展現形式,具體如下:

library(corrplot)
corrplot(M, method="circle")
corrplot(M, method="pie")
corrplot(M, method="color")
corrplot(M, method="number")

corrplot(M, type="upper")
corrplot(M, type="lower")

也可以修改顏色包括背景字體等以及參數順序:

col<- colorRampPalette(c("red", "white", "blue"))(20)
corrplot(M, type="upper", order="hclust", col=col)


library(RColorBrewer)
corrplot(M, type="upper", order="hclust", 
         col=brewer.pal(n=8, name="RdBu"))

corrplot(M, type="upper", order="hclust",
         col=brewer.pal(n=8, name="RdYlBu"))

corrplot(M, type="upper", order="hclust",
         col=brewer.pal(n=8, name="PuOr"))

#修改背景
corrplot(M, type="upper", order="hclust", col=c("black", "white"),
         bg="lightblue")

#修改字體
corrplot(M, type="upper", order="hclust", tl.col="black", tl.srt=45)

如果相關性是非顯著的不想顯示或用不同的符號顯示要怎么辦呢?
首先我們要得到一張相應的pvalue的表

cor.mtest <- function(mat, ...) {
    mat <- as.matrix(mat)
    n <- ncol(mat)
    p.mat<- matrix(NA, n, n)
    diag(p.mat) <- 0
    for (i in 1:(n - 1)) {
        for (j in (i + 1):n) {
            tmp <- cor.test(mat[, i], mat[, j], ...)
            p.mat[i, j] <- p.mat[j, i] <- tmp$p.value
        }
    }
  colnames(p.mat) <- rownames(p.mat) <- colnames(mat)
  p.mat
}
# matrix of the p-value of the correlation
p.mat <- cor.mtest(mtcars)
head(p.mat[, 1:5])
  mpg          cyl         disp           hp         drat
mpg  0.000000e+00 6.112687e-10 9.380327e-10 1.787835e-07 1.776240e-05
cyl  6.112687e-10 0.000000e+00 1.802838e-12 3.477861e-09 8.244636e-06
disp 9.380327e-10 1.802838e-12 0.000000e+00 7.142679e-08 5.282022e-06
hp   1.787835e-07 3.477861e-09 7.142679e-08 0.000000e+00 9.988772e-03
drat 1.776240e-05 8.244636e-06 5.282022e-06 9.988772e-03 0.000000e+00
wt   1.293959e-10 1.217567e-07 1.222320e-11 4.145827e-05 4.784260e-06


#不顯著的顯示叉叉,篩選的標準為0.01
corrplot(M, type="upper", order="hclust", 
         p.mat = p.mat, sig.level = 0.01)
#不顯著的為空白,篩選的標準為0.01
corrplot(M, type="upper", order="hclust", 
         p.mat = p.mat, sig.level = 0.01, insig = "blank")

然后我們來制作一張比較好看的圖

col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF", "#77AADD", "#4477AA"))
corrplot(M, method="color", col=col(200),  
         type="upper", order="hclust", 
         addCoef.col = "black", #添加相關系數
         tl.col="black", tl.srt=45, #修改字體
         p.mat = p.mat, sig.level = 0.01, insig = "blank", #顯著性篩選
         diag=FALSE 
         )

接下來我們來簡單講一下另一個PerformanceAnalytics包

library(PerformanceAnalytics)
my_data <- mtcars[, c(1,3,4,5,6,7)]
chart.Correlation(my_data, histogram=TRUE, pch=19)

往期R數據可視化分享
R數據可視化10: 蜜蜂圖 Beeswarm
R數據可視化9: 棒棒糖圖 Lollipop Chart
R數據可視化8: 金字塔圖和偏差圖
R數據可視化7: 氣泡圖 Bubble Plot
R數據可視化6: 面積圖 Area Chart
R數據可視化5: 熱圖 Heatmap
R數據可視化4: PCA和PCoA圖
R數據可視化3: 直方/條形圖
R數據可視化2: 箱形圖 Boxplot
R數據可視化1: 火山圖

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容