如何显示缺失条目的相关矩阵?

机器算法验证 r 数据可视化 相关性
2022-03-10 15:23:35

我想获得迄今为止我收集的文章中相关性的图形表示,以便轻松探索变量之间的关系。我曾经画过一个(凌乱的)图表,但我现在有太多的数据。

基本上,我有一张桌子:

  • [0]:变量 1 的名称
  • [1]:变量 2 的名称
  • [2]:相关值

“整体”矩阵不完整(例如,我有 V1*V2、V2*V3 的相关性,但没有 V1*V3)。

有没有办法以图形方式表示这一点?

3个回答

基于@GaBorgulya 的回复,我建议尝试波动或水平图(又名热图显示)。

例如,使用ggplot2

library(ggplot2, quietly=TRUE)
k <- 100
rvals <- sample(seq(-1,1,by=.001), k, replace=TRUE)
rvals[sample(1:k, 10)] <- NA
cc <- matrix(rvals, nr=10)
ggfluctuation(as.table(cc)) + opts(legend.position="none") + 
  labs(x="", y="")

(这里,缺少的条目以纯灰色显示,但可以更改默认配色方案,您也可以在图例中输入“NA”。)

在此处输入图像描述

或者

ggfluctuation(as.table(cc), type="color") + labs(x="", y="") +
  scale_fill_gradient(low = "red",  high = "blue")

(这里,缺失值根本不显示。但是,您可以添加一个geom_text()并在空单元格中显示类似“NA”的内容。)

在此处输入图像描述

您的数据可能像

  name1 name2 correlation
1    V1    V2         0.2
2    V2    V3         0.4

您可以使用以下 R 代码将长桌重新排列成宽桌

d = structure(list(name1 = c("V1", "V2"), name2 = c("V2", "V3"), 
    correlation = c(0.2, 0.4)), .Names = c("name1", "name2", 
    "correlation"), row.names = 1:2, class = "data.frame")
k = d[, c(2, 1, 3)]
names(k) = names(d)
e = rbind(d, k)
x = with(e, reshape(e[order(name2),], v.names="correlation", 
  idvar="name1", timevar="name2", direction="wide"))
x[order(x$name1),]

你得到

  name1 correlation.V1 correlation.V2 correlation.V3
1    V1             NA            0.2             NA
3    V2            0.2             NA            0.4
4    V3             NA            0.4             NA

现在您可以使用技术来可视化相关矩阵(至少可以处理缺失值的矩阵)。

corrplot包是可视化相关矩阵的有用功能。它接受一个相关矩阵作为输入对象,并有几个用于显示矩阵本身的选项。一个不错的功能是它可以使用层次聚类或 PCA 方法对变量重新排序。

有关示例可视化,请参阅此线程中接受的答案。