如何获得两个矩阵差异的 R 维恩图?

How to have R Venn Diagram of two matrices differences?

我想得到两个矩阵 p.mat.pp.mat.t 的差异的维恩图,它们在设置 alpha 时具有相同的维度。 伪代码

  1. 如果两个矩阵之间匹配,则将项目添加到交集;它可以匹配 FALSE 或 TRUE;否则像通常使用维恩图一样将项目留在交叉点之外
  2. 将矩阵单元格的 ID 放在维恩图上

两种方法:矩阵与 vennDiagramvenn 与列表。 数据

p.mat.p
           1     2     3     4     5     6     7     8     9    10    11
    1   TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
    2   TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    3   TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
    4  FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    5  FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
    6   TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
    7  FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
    8  FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    9  FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
    10 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
    11 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

p.mat.t
           1     2     3     4     5     6     7     8     9    10    11
    1  FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
    2   TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
    3   TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
    4   TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
    5  FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
    6   TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
    7  FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
    8  FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
    9  FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
    10 FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
    11  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE

用矩阵编码

library("psych")
library("gplots")
library("limma") # http://www.ats.ucla.edu/stat/r/faq/venn.htm       

ids <- seq(1,11)
M.cor <- cor(mtcars)
colnames(M.cor) <- ids
rownames(M.cor) <- ids
p.mat <- psych::corr.test(M.cor, adjust = "none", ci = F)

alpha <- .00000005

p.mat.p <- (p.mat[["p"]] < alpha)
str(p.mat.p)
print(p.mat.p)

p.mat.t <- (p.mat[["t"]] < alpha)
str(p.mat.t)
print(p.mat.t)

# http://www.ats.ucla.edu/stat/r/faq/venn.htm
c3 <- cbind( c(p.mat.p), c(p.mat.t))
a <- vennCounts(c3)
vennDiagram(a)

在圆及其交点上没有 ID 的输出因此不够

预期输出:在交叉点、圆圈和其他地方带有 ID 的维恩图。

有列表

我认为这里必须使用列表,因为 venn 只支持它们

library("corrplot")
library("psych")

ids <- seq(1,11)
M.cor <- cor(mtcars)
colnames(M.cor) <- ids
rownames(M.cor) <- ids
p.mat <- psych::corr.test(M.cor, adjust = "none", ci = F)

alpha <- .00000005

# 
p.mat.p <- (p.mat[["p"]] < alpha)
p.mat.p <- as.list(p.mat.p)

p.mat.t <- (p.mat[["t"]] < alpha)
p.mat.t <- as.list(p.mat.t)

venn(list(first.vector = p.mat.p, second.vector = p.mat.t))

输出:121 在路口所以错了

R: 3.3.1
OS:Debian 8.5

MATRIX_1 == MATRIX_2 给出矩阵之间的差异。 做 print(p.mat.p == p.mat.t) 你会得到 TRUEs 是交叉点和其他项目的地方;但是,这不适用于两个以上的矩阵

       1     2     3     4     5     6     7     8     9    10    11
1  FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
2   TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE
3   TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
4  FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE
5   TRUE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE
6   TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
7   TRUE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE
8   TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE  TRUE  TRUE FALSE
9   TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE
10  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE
11 FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE