Bisque:根据单细胞信息估算bulk数据中细胞组成|生信开发实战

企业   2024-12-19 17:02   浙江  




BulkRNA测序通常检测异质组织总的基因表达,然而不同组织细胞类型组成的异质性会严重混淆这些数据的分析,确定组织中细胞类型组成有助于增强传统RNA测序分析的可靠性。确定细胞类型组成的传统方法,如免疫组织化学或流式细胞术,依赖于一组有限的分子标记物,存在效率较低以及可扩展性差的问题。单细胞技术提供了细胞异质性和细胞类型特异性表达的高分辨率,然而与Bulk RNA-seq相比,单细胞实验仍然成本高昂且噪音大。而BulkRNA测序得益于近些年来的积累,存在大量可用的公共数据库的数据可用,因此收集大规模表达数据仍然是识别群体水平关联(例如差异表达)的一种具备强吸引力的方法,进一步进行细胞类型比例的估计(通常称为分解)可用于提取大规模细胞类型特异性信息。
Bisque是一种利用单细胞表达谱,估计bulk RNA-seq中细胞类型比例的工具。其主要思想是利用回归的方法,使用单细胞 RNA-seq (scRNA-seq) 或者单核RNA-seq(snRNA-seq)数据生成参考表达谱,然后对bulk数据进行基因特异的转换,以分解bulk RNA-seq 数据,达到准确有效估计bulk RNA-seq中细胞组成的目的。相比于其他反卷积软件具有快速、直接使用单细胞数据作为参考,对各细胞类型的表达特征没有特别的假设的优点;适用于基因表达数据较为均匀且细胞类型特征明显的情况。










Bisque提供了两种分解模式








  • 基于单细胞参考图谱的分解:

该方法利用单细胞数据来分解bulk RNA-seq的表达模式。假设单细胞定量和bulk定量都是基于同一组织。那么,这种分解方法的一个很重要的前提,就是理论上来说,单细胞数据鉴定得到的细胞类型和组成,应与真实的生理组成相匹配。基于此,我们才可以使用单细胞数据来作为参考。
基于单细胞参考表达谱的方式来进行bulk RNA-seq拆解的话,虽然没有明确要求两者是完全来源一致的样本,但是为了结果准确性,最好此方法还是采用于同时进行单细胞和bulk测序的样本。
  • 构建参考图谱:首先,需要构建一个参考图谱,其中包含每种细胞类型的基因表达模式。参考图谱可以从已知的单细胞RNA-seq数据中获取。从单细胞数据中识别出不同的细胞类型,并计算每个细胞类型的平均表达水平,作为参考表达谱。

  • 选择标记基因:只选择那些在至少一个细胞类型中有显著差异表达的基因作为标记基因,过滤掉方差为零、在bulk数据中未表达或者是线粒体基因的基因。

  • 转换bulk数据:对于每个基因,根据单细胞数据和bulk数据之间的线性关系,学习一个转换函数,将bulk数据转换为与参考表达谱更一致的形式。如果有部分样本同时有单细胞和bulk数据,就用这些样本来拟合线性回归模型;如果没有,就用单细胞数据的均值和方差来估计转换函数。

  • 估计细胞类型比例:对于每个样本,使用转换后的bulk数据和参考表达谱,求解一个带有非负约束和和为一约束的最小二乘问题,得到每个细胞类型的比例估计。其中,使用非负最小二乘回归方法来进行反卷积,这意味着在估计细胞类型比例时,结果必须保持非负且最小误差。非负最小二乘回归是一种优化算法,通过最小化实际数据与估计结果之间的误差来实现这一点。为了确保估计的细胞类型比例总和为一,还会添加一个约束条件。这样可以保证细胞类型比例之和等于100%,表示完整的细胞组成。

  • 基于标记基因的分解:

当单细胞参考图谱不可提供时(例如,bulk RNA-seq数据无法获取相应样本的snRNA-seq数据),可以仅利用先验的marker基因来分解bulk表达数据。这种分解方法的一个逻辑基础就是:随着细胞类型的比例在个体之间变化,其marker基因的表达将倾向于与其细胞类型比例正相关。在同样的论点下,marker基因对应的细胞类型特异性越强,其表达就越能反映其细胞类型比例,这就是BisqueMarker 的原理基础。
这是一种半监督模型,使用了加权PCA方法。使用单细胞数据获得的各细胞类型特异性marker基因,从归一化的bulk表达样本中提取细胞组成的趋势。
  • 获取标记:对于单细胞数据,需要每种细胞类型的一组marker基因,以及差异分析所得的倍数变化,以表示每个标记的特异性程度。差异倍数在后期可以作为一个权重,用来调整每个基因在PCA分析中的贡献。

  • 选择标记基因:选择一组已知的marker基因,这些基因在某些细胞类型中有显著的差异表达。

  • 估计细胞类型比例:使用加权PCA方法,使用已知的marker基因来估计相对细胞类型丰度。具体来说,对于每个细胞类型,选取其marker基因的子矩阵,这个子矩阵包含了所有样本在这些marker基因上的表达水平。然后对每个子矩阵进行加权PCA分析,第一主成分能解释最多变异性的方向,因此可以看作该细胞类型的代表性表达模式。所以,最终提取其第一主成分作为该细胞类型的比例估计。









操作方法







1. 基于单细胞参考图谱的分解:

a. 准备bulk RNA-seq表达谱(例如:bulk_profile.txt)

b. 准备单细胞Seurat object的RData文件,包含count matrix信息和细胞类型注释信息(例如:sc_obj.RData)

c. 撰写代码并运行(以下代码写入一个R脚本,例如:Bisque_Reference.R):

library(Biobase)library(BisqueRNA)library(Seurat)
## 读取bulk表达谱,bulk_profile <- read.table("bulk_profile.txt", sep = "\t", quote = "\t", row.names = 1, header = TRUE, check.names = FALSE, stringsAsFactors = FALSE)
## 将bulk表达谱转换为ExpressionSet格式bulk.eset <- ExpressionSet(assayData = as.matrix(bulk_profile))
## 读取单细胞Seurat object数据load("sc_obj.RData") # 此处RData里面存储的数据变量名称叫“sc_obj”,根据实际存储结果进行调用/重新赋值
## 将单细胞数据转换为ExpressionSet格式# sc.eset <- SeuratToExpressionSet(sc_obj, delimiter="-", position=2, version="v3")# 如果Seurat object中以Idents的方式进行过细胞类型注释,并且格式标准,那么上述SeuratToExpressionSet的方式可以直接转换。如果转换后,有信息缺失,下游分析有问题,那么可以使用下述方法进行必要信息提取后,进行格式转换(注意:不同操作者/项目的单细胞Seurat object中存储的格式和信息可能有不同,提取信息时需要根据实际存储结构进行针对性提取):sc.counts.matrix <- as.matrix(GetAssayData(sc_obj, assay = "RNA", slot = "counts"))sample.ids <- colnames(sc.counts.matrix)sc.pheno <- data.frame(check.names=F, check.rows=F, stringsAsFactors=F, row.names=sample.ids, SubjectName=sc_obj$orig.ident, # 每个细胞所属的样本(与samples.ids细胞顺序一致) cellType=Idents(sc_obj)) # 每个细胞所属的细胞类型(与samples.ids细胞顺序一致)sc.meta <- data.frame(labelDescription=c("SubjectName","cellType"), row.names=c("SubjectName","cellType"))sc.pdata <- new("AnnotatedDataFrame", data=sc.pheno, varMetadata=sc.meta)sc.eset <- Biobase::ExpressionSet(assayData=sc.counts.matrix,phenoData=sc.pdata)
## 计算细胞类型比例res <- ReferenceBasedDecomposition(bulk.eset, sc.eset, use.overlap=FALSE)# 如果use.overlap设置为TRUE,那么函数将只使用在参考基因表达谱和目标基因表达谱中都存在的样本来进行分解。
## 提取获取细胞类型比例,保存文件estimated.cell.proportions <- res$bulk.propswrite.table(estimated.cell.proportions, file = "estimated.cell.proportions.txt", sep = "\t", row.names = TRUE, col.names = NA, quote = FALSE)


2. 基于标记的分解:

a. 准备bulk RNA-seq表达谱(例如:bulk_profile.txt)

b. 准备marker基因表格(例如:markers.txt)

c. 撰写代码并运行(以下代码写入一个R脚本,例如:Bisque_Marker.R)

library(Biobase)library(BisqueRNA)
## 读取bulk表达谱,bulk_profile <- read.table("bulk_profile.txt", sep = "\t", quote = "\t", row.names = 1, header = TRUE, check.names = FALSE, stringsAsFactors = FALSE)
## 读取marker基因信息markers <- read.table("markers.txt", sep = "\t", quote = "\t", header = TRUE, check.names = FALSE, stringsAsFactors = FALSE)
## 计算细胞类型比例res <- MarkerBasedDecomposition(bulk.eset, markers, weighted = FALSE)# 如果weighted设置为TRUE,那么函数将使用基因的权重来进行分解。这意味着,权重较高的基因将对分解结果有更大的影响。通过w_col参数来制定权重列,例如:w_col = "avg_logFC"# 如果weighted设置为FALSE,那么函数将不使用基因的权重来进行分解。这意味着,所有的基因都将对分解结果有相同的影响。
## 提取获取细胞类型比例,保存文件estimated.cell.proportions <- res$bulk.propswrite.table(estimated.cell.proportions, file = "estimated.cell.proportions.txt", sep = "\t", row.names = TRUE, col.names = NA, quote = FALSE)







结果说明







给出每一个bulk样本在各细胞类型上的比例。利用Bisque解析bulk RNA-seq中细胞组成的方式,也有一定的局限性。需要结合具体数据实际考虑,比如单细胞群细胞数较少的细胞类型可能较难准确解析出来。


参考文献

Jew, B., Alvarez, M., Rahmani, E. et al. Accurate estimation of cell composition in bulk expression through robust integration of single-cell information. Nat Commun 11, 1971 (2020). https://doi.org/10.1038/s41467-020-15816-6



相关阅读


CytoTRACE:细胞分化潜能分析|生信开发实战
Visium HD数据分析之Bin2Cell |生信开发实战
ROC分析介绍|生信开发实战
如果使用find_circ来鉴定circRNA|生信开发实战


本文系联川生物公众号原创文章,未经授权禁止转载,侵权必究!

扫描下方二维码





点分享


点点赞


点在看


联川生物
一个提供科研入门学习资源、经验的平台。 分享前沿测序技术资讯、实用生信绘图技巧及工具。 发布高质量的科研论文精度、精炼科研思路。 我们的目标是持续提供“干货”,滋润您的科研生涯。
 最新文章