如何从 R 中的多个基因列表生成相似性分数热图
How to generate similarity scores heatmap from multiple gene lists in 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))
假设“19种不同的肿瘤类型”可以表示为19个样本,这样你就可以创建一个n_genes x 19的表达矩阵,你可以使用dcast
来生成矩阵,然后生成成对相关热图。
您可能需要考虑处理缺失数据的方法以获得适当的相似度分数。
假设一个完整的矩阵,你可以只使用 dist 函数,例如:
library(data.table)
library(pheatmap)
# mock data
set.seed(1)
mat <- matrix(
stats::runif(1000, 3, 14),
nrow = 100,
ncol = 10,
dimnames = list(paste0("gene", 1:100), paste0("Sample", 1:10))
)
modmat <- base::sample(1:100, 30)
mat[modmat, 1:5] <- mat[modmat, 1:5] + stats::runif(150, 4, 6)
MAT <- melt(data.table(mat, keep.rownames = TRUE), id.vars = "rn")
# MAT would correspond to your melted data.frame, after setDT(your.df)
mat <- as.matrix(dcast(MAT, rn ~ variable), rownames = 1)
cmat <- as.matrix(dist(t(mat), diag=TRUE, upper=TRUE))
pheatmap(cmat)
由 reprex package (v0.3.0)
于 2020-04-09 创建
问题
我有一个包含 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))
假设“19种不同的肿瘤类型”可以表示为19个样本,这样你就可以创建一个n_genes x 19的表达矩阵,你可以使用dcast
来生成矩阵,然后生成成对相关热图。
您可能需要考虑处理缺失数据的方法以获得适当的相似度分数。
假设一个完整的矩阵,你可以只使用 dist 函数,例如:
library(data.table)
library(pheatmap)
# mock data
set.seed(1)
mat <- matrix(
stats::runif(1000, 3, 14),
nrow = 100,
ncol = 10,
dimnames = list(paste0("gene", 1:100), paste0("Sample", 1:10))
)
modmat <- base::sample(1:100, 30)
mat[modmat, 1:5] <- mat[modmat, 1:5] + stats::runif(150, 4, 6)
MAT <- melt(data.table(mat, keep.rownames = TRUE), id.vars = "rn")
# MAT would correspond to your melted data.frame, after setDT(your.df)
mat <- as.matrix(dcast(MAT, rn ~ variable), rownames = 1)
cmat <- as.matrix(dist(t(mat), diag=TRUE, upper=TRUE))
pheatmap(cmat)
由 reprex package (v0.3.0)
于 2020-04-09 创建