SingleR是用于单细胞RNA测序(scRNAseq)数据的自动注释方法(Aran et al.2019)。给定具有已知标签的样本(单细胞或RNAseq)参考数据集,它将基于与参考数据的相似性标记测试数据集中的新细胞。具体来说,对于每个测试单元:
- 计算其表达谱与每个参考样品的表达谱之间的Spearman相关性。
- 将每个标签的分数定义为相关性分布的fixed quantile(默认为0.8)。
- 对所有标签重复此操作,然后将得分最高的标签作为此细胞的注释。
- 选择性执行微调
安装
BiocManager::install("SingleR")
BiocManager::install("scRNAseq")
SingleR通过专用的数据检索功能提供了多个参考数据集(主要来自大量RNA-seq或微阵列数据)。例如,我们使用HumanPrimaryCellAtlasData()
函数从人类原代细胞图集获得参考数据,该函数返回一个SummarizedExperiment
对象,该对象包含带有样本级标签的对数表达值矩阵。
1.使用内置的参考
library(SingleR)
hpca.se <- HumanPrimaryCellAtlasData()
hpca.se
导入要检测的数据集
我们的测试数据集将取自La Manno et al. (2016)。
为了提高速度,我们只选取100个细胞来标记细胞类型。
library(scRNAseq)
hESCs <- LaMannoBrainData('human-es')
hESCs <- hESCs[,1:100]
# SingleR() expects log-counts, but the function will also happily take raw
# counts for the test dataset. The reference, however, must have log-values.
library(scater)
hESCs <- logNormCounts(hESCs)
使用hpca.se作为参考对测试数据集hESCs通过SingleR()进行注释
默认的检测marker的方法是largest positive log-fold changes in the per-label medians for each gene.
输出的每一行都包含单个细胞的预测结果。在 fine-tuning(first.labels)之前, fine-tuning()之后labels和after pruning (pruned.labels)之后的细胞标签,以及相关的分数。
pred.hesc <- SingleR(test = hESCs, ref = hpca.se, labels = hpca.se$label.main)
pred.hesc
## DataFrame with 100 rows and 5 columns
## scores first.labels
## <matrix> <character>
## 1772122_301_C02 0.347652:0.109547:0.123901:... Neuroepithelial_cell
## 1772122_180_E05 0.361187:0.134934:0.148672:... Neuroepithelial_cell
## 1772122_300_H02 0.446411:0.190084:0.222594:... Neuroepithelial_cell
## 1772122_180_B09 0.373512:0.143537:0.164743:... Neuroepithelial_cell
## 1772122_180_G04 0.357341:0.126511:0.141987:... Neuroepithelial_cell
## ... ... ...
## 1772122_299_E07 0.371989:0.169379:0.1986877:... Neuroepithelial_cell
## 1772122_180_D02 0.353314:0.115864:0.1374981:... Neuroepithelial_cell
## 1772122_300_D09 0.348789:0.136732:0.1303042:... Neuroepithelial_cell
## 1772122_298_F09 0.332361:0.141439:0.1437860:... Neuroepithelial_cell
## 1772122_302_A11 0.324928:0.101609:0.0949826:... Neuroepithelial_cell
## tuning.scores labels pruned.labels
## <DataFrame> <character> <character>
## 1772122_301_C02 0.1824402:0.0991116 Neuroepithelial_cell Neuroepithelial_cell
## 1772122_180_E05 0.1375484:0.0647134 Neurons Neurons
## 1772122_300_H02 0.2757982:0.1369690 Neuroepithelial_cell Neuroepithelial_cell
## 1772122_180_B09 0.0851623:0.0819878 Neuroepithelial_cell Neuroepithelial_cell
## 1772122_180_G04 0.1988415:0.1016622 Neuroepithelial_cell Neuroepithelial_cell
## ... ... ... ...
## 1772122_299_E07 0.1760025:0.0922504 Neuroepithelial_cell Neuroepithelial_cell
## 1772122_180_D02 0.1967609:0.1124805 Neuroepithelial_cell Neuroepithelial_cell
## 1772122_300_D09 0.0816424:0.0221368 Neuroepithelial_cell Neuroepithelial_cell
## 1772122_298_F09 0.1872499:0.0671893 Neuroepithelial_cell Neuroepithelial_cell
## 1772122_302_A11 0.1560800:0.1051322 Astrocyte Astrocyte
统计细胞个数
table(pred.hesc$labels)
##
## Astrocyte Neuroepithelial_cell Neurons
## 14 81 5
2.使用单个细胞参考
在这里,我们将使用两个人类胰腺数据集。目的是使用一个预先标记的数据集注释另一个未标记的数据集。
library(scRNAseq)
sceM <- MuraroPancreasData()
#移除未标记的细胞
sceM <- sceM[,!is.na(sceM$label)]
sceM <- logNormCounts(sceM)
sceG <- GrunPancreasData()
sceG <- sceG[,colSums(counts(sceG)) > 0] # Remove libraries with no counts.
sceG <- logNormCounts(sceG)
#选取100个测试
sceG <- sceG[,1:100]
SingleR()
,与之前一样的用法,但是这次使用了marker检测模式,该模式考虑了跨细胞种类表达的差异。在这里,将使用Wilcoxon ranked sum test来识别marker。与默认检测算法相比,此方法更慢,但更适合单细胞数据。
pred.grun <- SingleR(test=sceG, ref=sceM, labels=sceM$label, de.method="wilcox")
table(pred.grun$labels)
##
## acinar beta delta duct
## 53 4 2 41
3.对细胞分数可视化
SingleR提供了强大的可视化工具。 plotScoreHeatmap()
显示所有参考标签上的分数,这使用户可以检查整个数据集中预测标签的置信度。每个细胞的实际分配标签显示在顶部。理想情况下,每个cell(即热图的一列)应具有一个明显大于其余得分的分数,表明已将其明确分配给标签。
plotScoreHeatmap(pred.grun)
image.png
欢迎关注微信公众号:生信编程日常
公众号二维码.jpg
reference:
https://www.nature.com/articles/s41590-018-0276-y
https://bioconductor.org/packages/devel/bioc/vignettes/SingleR/inst/doc/SingleR.html
网友评论