首页 > 解决方案 > 如何从 R 中的多个基因列表生成相似度分数热图

问题描述

问题
我有 19 种不同肿瘤类型的融合数据框,每种都有相关的标记基因。我想可视化肿瘤类型之间的相似性,看看它们是如何聚集的。我有一个解决这个问题的计划,但似乎应该有一个更简单的方法。

虚拟数据

>df <- data.frame(tumor_type = c("tumor1", "tumor1", "tumor1", "tumor2", "tumor2", "tumor3", "tumor4", "tumor4"), genes = c("geneA", "geneB", "geneC", "geneA", "geneD", "geneD", "geneA", "geneD"))

>df
tumor_type  genes
tumor1      geneA
tumor1      geneB
tumor1      geneC
tumor2      geneA
tumor2      geneD
tumor3      geneD
tumor4      geneA
tumor4      geneD

建议的解决方案
1)将融化的数据框分解为单个肿瘤列表
2)计算所有肿瘤组合之间的成对相似性得分。我将不得不使用(intersect(tumor1,tumor2)/(intersect(tumor1,tumor2)+ setdiff(tumor1,tumor2)+ setdiff(tumor2,tumor1))* 100做某种for循环。
应该得到一个矩阵:

>dfmatrix
       tumor1   tumor2   tumor3   tumor4
tumor1    100       25        0       25
tumor2     25      100       50       50
tumor3      0       50      100       50  
tumor4     25       50       50      100

3)然后我会做一个标准的热图

我需要帮助弄清楚各个组件(例如如何进行循环以进行所有成对比较),但我认为我应该从更高的层次开始,以确保我对这个过程的想法是正确的,然后再询问一堆不同的关于细节的问题。

标签: rloopsheatmapbioinformatics

解决方案


这是一个非常简化的解决方案,可能只是为了探索数据。您将问题简化为以二进制方式询问每个肿瘤与哪个基因相关:

table(df$tumor_type,df$genes)
         geneA geneB geneC geneD
  tumor1     1     1     1     0
  tumor2     1     0     0     1
  tumor3     0     0     0     1
  tumor4     1     0     0     1

然后我们可以使用 dist 使用成对距离:

D = dist(table(df$tumor_type,df$genes),method="binary")
       tumor1 tumor2 tumor3
tumor2   0.75              
tumor3   1.00   0.50       
tumor4   0.75   0.00   0.50

或者,如果您更喜欢其他测量,您可以执行以下操作:

library(ade4)
D = dist.binary(unclass(table(df$tumor_type,df$genes)),method=1)

然后只需可视化 1 距离

library(pheatmap)
pheatmap(1-as.matrix(D))

在此处输入图像描述


推荐阅读