r - 如何从 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)然后我会做一个标准的热图
我需要帮助弄清楚各个组件(例如如何进行循环以进行所有成对比较),但我认为我应该从更高的层次开始,以确保我对这个过程的想法是正确的,然后再询问一堆不同的关于细节的问题。
解决方案
这是一个非常简化的解决方案,可能只是为了探索数据。您将问题简化为以二进制方式询问每个肿瘤与哪个基因相关:
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))
推荐阅读
- javascript - 直角三角形的斜边?
- excel - 我们可以使用 PowerTerm 和 VBA/Excel 宏自动化大型机吗?
- python - */_MEI*/VCRUNTIME140.dll 不是为在 Windows 上运行而设计的,或者在尝试运行由 pyinstaller 创建的 .exe 时包含错误
- python - 问题:ValueError:无法将字符串转换为浮点数:
- .net-core - 绕过 WebView2 中显示的 Kestrel 服务器的无效 SSL 证书
- latex - 如何在乳胶中输入“<”
- reactjs - 异步函数未执行
- typescript - 检查 package.json 依赖项的数组是否在 typeScript 中按字母数字顺序排序
- jms - 为什么 NiFi GetJMSQueue 不接收消息?
- python - python pulsar concumer 收到消息时被阻塞