在 R 中绘制相关矩阵,如 Excel 示例 [英] Plot of a correlation matrix in R like in Excel example

查看:40
本文介绍了在 R 中绘制相关矩阵,如 Excel 示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直试图尽量减少 Excel 的使用以支持 R,但在显示简单的数据单元格时仍然卡住了,这通常是分析的最后一步所需要的.以下示例是我想要破解的示例,因为它将帮助我在工作流程的这一关键部分切换到 R.

I have been trying to minimize my use of Excel in favor of R, but am still stuck when it comes to display simple data cells as is often needed as the last step of an analysis. The following example is one I would like to crack, as it would help me switch to R for this critical part of my workflow.

我想在 R 中说明以下相关矩阵:

I would like to illustrate the following correlation matrix in R :

matrix_values <- c(
  NA,1.54,1.63,1.15,0.75,0.78,1.04,1.2,0.94,0.89,
  17.95,1.54,NA,1.92,1.03,0.78,0.89,0.97,0.86,1.27,
  0.95,25.26,1.63,1.92,NA,0.75,0.64,0.61,0.9,0.88,
  1.18,0.74,15.01,1.15,1.03,0.75,NA,1.09,1.03,0.93,
  0.93,0.92,0.86,23.84,0.75,0.78,0.64,1.09,NA,1.2,
  1.01,0.85,0.9,0.88,30.4,0.78,0.89,0.61,1.03,1.2,
  NA,1.17,0.86,0.95,1.02,17.64,1.04,0.97,0.9,0.93,
  1.01,1.17,NA,0.94,1.09,0.93,17.22,1.2,0.86,0.88,
  0.93,0.85,0.86,0.94,NA,0.95,0.96,24.01,0.94,1.27,
  1.18,0.92,0.9,0.95,1.09,0.95,NA,1.25,21.19,0.89,
  0.95,0.74,0.86,0.88,1.02,0.93,0.96,1.25,NA,18.14)
cor_matrix <- matrix(matrix_values, ncol = 10, nrow = 11)

item_names <- c('Item1','Item2','Item3','Item4','Item5',
                'Item6','Item7','Item8','Item9','Item10')
colnames(cor_matrix) <- item_names
rownames(cor_matrix) <- c(item_names, "Size")

单元格应该根据它们的等级进行着色(例如,>95% 是完全绿色,<5% 是完全红色).最后一行应该用水平条表示(代表最大值的分数).

The cells should be colored based on their rank (e.g. >95 percentile is completely green, <5 percentile is completely red). The last row should be illustrated by a horizontal bar (representing the fraction of the maximum value).

我在 Excel 中制作了我想要的输出:

I have made in Excel the output that I would like to have:

理想情况下,我还想突出显示相关组(手动或通过脚本),如下图所示:

Ideally, I would also like to highlight correlation groups (either manually or by script), like in the following illustration:

推荐答案

这是使用基本图形的方法:

Here is an approach using base graphics:

par( mar=c(1,5,5,1) )
plot.new()
plot.window( xlim=c(0,10), ylim=c(0,11) )

quant_vals <- findInterval( cor_matrix[-11,], 
    c(-Inf, quantile(cor_matrix[-11,], c(0.05, 0.25, 0.45, 0.55, 0.75, 0.95), na.rm=TRUE ),
            Inf) )
quant_vals[ is.na(quant_vals) ] <- 4
cols <- c('#ff0000','#ff6666','#ffaaaa','#ffffff','#aaffaa','#66ff66','#00ff00')
colmat <- matrix( cols[quant_vals], ncol=10, nrow=10)

rasterImage(colmat, 0, 1, 10, 11, interpolate=FALSE)
for(i in seq_along( cor_matrix[11,] ) ) {
    rect( i-1, 0.1, i-1 + cor_matrix[11,i]/max(cor_matrix[11,]), 0.9, col='lightsteelblue3')
}

text( col( cor_matrix )-0.5, 11.5-row( cor_matrix ), cor_matrix, font=2 )
rect( 0,1,10,11 )
rect( 0,0,10,1)
axis(2, at=(11:1)-0.5, labels=rownames(cor_matrix), tick=FALSE, las=2)
axis(3, at=(1:10)-0.5, labels=colnames(cor_matrix), tick=FALSE, las=2)

rect(0,8,3,11, lwd=2)
rect(4,4,7,7, lwd=2)
rect(8,1,10,3, lwd=2)

这篇关于在 R 中绘制相关矩阵,如 Excel 示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆