如何为RNA-Seq中的基因与基因相互作用创建邻接矩阵(循环输入)

时间:2019-04-03 17:56:32

标签: r data-visualization adjacency-matrix chord-diagram circlize

我正在分析肿瘤的微环境,我想展示我发现的亚群之间的相互作用。例如,我有一个受体和配体的列表,我想证明种群A表达配体1,种群C表达受体1,因此这两个种群之间可能通过配体受体1的表达发生相互作用。

我一直在尝试通过制作chordDiagram来使用circlize来可视化这些交互,但是它需要一个邻接矩阵作为输入,并且我不知道如何创建该矩阵。邻接矩阵应该显示矩阵中任意两个基因之间关系的强度。我有6个独特的细胞群体,它们可以表达我感兴趣的485个配体/受体中的任何一个,目的是通过配体和受体显示这些群体之间的相互作用。

我找到了一个在RStudio中使用的称为BUS-gene的工具。相似性:计算邻接关系矩阵以进行基因与基因的相互作用。

也许我只是错误地使用了BUS,但它说:对于具有M个基因​​和N个实验的基因表达数据,邻接矩阵的大小为MxM。 MxM大小的邻接矩阵,行和列均代表基因。第i行和第j列中的元素表示基因i和基因j之间的相似性。

因此,我制作了一个矩阵,其中每一列都是一个子种群,每一行都是一个想要显示相互作用的配体/受体。细胞具有表达值,看起来像这样:

> head(Test)
            A          B           C          D           E           F
Adam10 440.755990 669.875468 748.7313995 702.991422 1872.033343 2515.074366
Adam17 369.813134 292.625603 363.0301707 434.905968 1183.152694 1375.424034
Agt     12.676036  28.269671   9.2428034  19.920561  121.587010  168.116735
Angpt1  22.807415  42.350205  25.5464603  16.010813  194.620550   99.383567
Angpt2  92.492760 186.167844 819.3679836 852.666499  669.642441 1608.748788
Angpt4   3.327743   0.693985   0.8292746   1.112826    5.463647    5.826927

A-F是我的人口。然后我将此矩阵传递给BUS:

res<-gene.similarity(Test,measure="corr",net.trim="none")

Warning message:
In cor(mat) : the standard deviation is zero

但是应该是我的邻接矩阵的输出文件充满了NA:

         Adam10 Adam17 
Adam10      1     NA
Adam17     NA     1       

我以为我的基质可能太复杂了,所以我只比较了2个细胞群与我的配体/受体,但是得到的输出却完全相同。

我期望得到类似的东西:

         A:Adam10 A:Adam17 
C:Adam10     6       1 
E:Adam17     2      10 

但是,即使res对象给了我数字而不是NA,当在基因之间建立联系时,它也不维护种群的身份,因此仍然不会产生我的预期输出。

我不必使用BUS来制作矩阵,因此我不一定需要帮助对该代码进行故障排除,我只需要一些方法来制作邻接矩阵。

我以前从未使用过circlize或Circos,所以如果我的问题很愚蠢,我深表歉意。

1 个答案:

答案 0 :(得分:0)

似乎需要对矩阵进行一些转换。
您可以创建一个新的矩阵,其大小为(nrow(Test)x ncol(Text))x(nrow(Test)x ncol(Text)),因此在您给出的示例中,新矩阵将为36x36,并且colnames和行名将相同,分别是A_Adam10,A_Adam17,...,A_Angpt4,B_Adam10,...,F_Angpt4。
借助循环,您可以将每对相似度加载到新矩阵中,现在可以绘制矩阵。这有点复杂,还需要一段时间才能运行循环,但是很直观。
欢迎您检查我的github repo,因为不久前我遇到了类似的问题,并且我在上面发布了详细的代码。希望对您有帮助