共现矩阵 - 热力图

4

我有一个包含20多列和2000多行的大数据集。我想知道不同变量共同出现的次数。此外,将其制作成热图(共现热图或相关性热图)也是很好的。但是,我不确定是否可以使用虚拟/二进制变量完成这项任务。有什么建议吗?

我需要转换这个示例数据集(x)。

    A   B   C   D   E   F
1   0   1   1   1   1   0
2   0   1   1   0   0   1
3   1   0   0   0   1   0
4   0   0   1   1   1   1
5   0   0   1   1   0   0

转换成类似以下内容:

    A   B   C   D   E   F
A   0   0   0   0   1   0
B   0   0   2   1   1   1
C   0   2   0   3   2   2
D   0   1   3   0   2   1
E   1   1   2   2   0   1
F   0   1   2   2   1   0
2个回答

2

给定一个矩阵X,我们有:

(A <- t(X) %*% X)
#   A B C D E F
# A 1 0 0 0 1 0
# B 0 2 2 1 1 1
# C 0 2 4 3 2 2
# D 0 1 3 3 2 1
# E 1 1 2 2 3 1
# F 0 1 2 1 1 2

如果您希望对角线包含零,则添加 diag(A) <- 0。例如,可以使用以下方式获得热图:
heatmap(A, Rowv = NA, Colv = NA)

非常感谢您的帮助。然而,我遇到了这个错误:Error in t(Data) %*% Data : requires numeric/complex matrix/vector arguments。 - Tvdv
好的。使用 A <- t(Data) %*% as.matrix(Data) 解决了它。谢谢! - Tvdv

2
temp = sapply(colnames(A), function(x)
    sapply(colnames(A), function(y)
        sum(rowSums(A[,c(x, y)]) == 2)))
diag(temp) = 0
temp
#  A B C D E F
#A 0 0 0 0 1 0
#B 0 0 2 1 1 1
#C 0 2 0 3 2 2
#D 0 1 3 0 2 1
#E 1 1 2 2 0 1
#F 0 1 2 1 1 0

library(reshape2)
library(ggplot2)

df1 = melt(temp)

graphics.off()
ggplot(df1, aes(x = Var1, y = Var2, fill = value)) +
    geom_tile() +
    theme_classic()

enter image description here

DATA

A = structure(list(A = c(0L, 0L, 1L, 0L, 0L), B = c(1L, 1L, 0L, 0L, 
0L), C = c(1L, 1L, 0L, 1L, 1L), D = c(1L, 0L, 0L, 1L, 1L), E = c(1L, 
0L, 1L, 1L, 0L), F = c(0L, 1L, 0L, 1L, 0L)), .Names = c("A", 
"B", "C", "D", "E", "F"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接