【问题标题】:How to have R Venn Diagram of two matrices differences?如何获得两个矩阵差异的 R 维恩图?
【发布时间】:2016-11-12 14:12:22
【问题描述】:

我想要一个维恩图,说明两个矩阵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

# http://stackoverflow.com/q/2471188/54964
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
操作系统:Debian 8.5

【问题讨论】:

  • 看来你真的不知道如何描述你想要的东西。
  • 矩阵分布?而且您只显示上三角元素。对了,你怎么能再清楚点????
  • 在哪里导入 vennCounts 和 vennDiagram? '&gt; a &lt;- vennCounts(c3) Error: could not find function "vennCounts" &gt; vennDiagram(a) Error: could not find function "vennDiagram"'
  • @Masi "package ‘limma’ is not available (for R version 3.3.2)",请注意 limma 在 3.3.2 中已经贬值了——不幸的是,这里无法正常工作。
  • @hhh 是的。请完全按照此处的说明进行操作ats.ucla.edu/stat/r/faq/venn.htm

标签: r list matrix venn-diagram


【解决方案1】:

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

       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

【讨论】:

  • 我更新了你的身体。我认为如果您有两个以上的矩阵,这将无法正常工作。我也不确定您是否可以根据结果创建维恩图。 - - 尝试的第一步是 - 从矩阵中获取所有为真的点,将它们放在交叉点;将total - intersections 放在维恩图的其他两部分。 - - 我认为 R 中必须有更直接的东西才能从列表或矩阵创建维恩图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多