首先SingleR属于不基于Prior Knowledge的注释方法;相对应的还有基于Prior Knowledge的方法,比如CellAssign,但两个用起来都不是很顺手~这也是为什么目前手工注释不可或缺的原因(注释细胞类型是一项需要反复推敲的工作,花的时间长也很正常)
各种单细胞注释软件有各种平台,各种算法,可以参考这篇综述:
官方教程:https://www.bioconductor.org/packages/release/bioc/vignettes/SingleR/inst/doc/SingleR.html
SingleR的原理:
- 首先找到“marker基因”,marker基因是通过两个label之间进行两两比较得到的。由于1个label下有多个样本,因
此两个label在进行比较时,某基因A在两个label中的中位表达值之比最大(即差异最大),则将该基因A作为这两个label两两比较得到的“marker基因”;对所有可能的label组合进行两两比较,得到所有的marker基因,生成一个marker基因集
使用该marker基因集,对单细胞和所有label下所有参考样本的表达谱进行Spearman相关分析 - 单个细胞的per-label score定义为同该label下所有样本进行相关分析的相关系数的0.8分位数
- 将具有最高score的label作为该细胞的注释
可以使用bulk数据注释单细胞,也可以使用预先注释好的单细胞数据注释单细胞。
对于后者,在寻找“marker基因”这一步需要使用de.method
SingleR包的工具包括:
SingleR()
函数,用于注释
plotScoreHeatmap()
使用热图比较label score
pruneScores()
对低质量的注释进行“修剪”(即注释为NA)
plotScoreDistribution()
观察修剪是否合适,默认为偏离中值3个MAD(评价数据离散程度的统计学指标)
自带的注释集包括以下这些