最近的马拉松授课交流群有学员反馈了跟着我们的单细胞转录组标准代码处理一个公共数据集的时候,明明读进去了20多万个细胞但是简单的质量控制就只剩下了八九万的细胞数量,太可怕了。
所以我就要了一下这个数据集和文章,是中山大学附属第六医院 :《Remodeling of the immune and stromal cell compartment by PD-1 blockade in mismatch repair-deficient colorectal cancer》,数据集是公开的,https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE205506
我们也测试了,确实是默认读取 23526 features 个基因, 262943 个细胞, 然后默认过滤就只剩下了8到9万的细胞数量。代码没有问题,仔细的看了看文章,确实是提到了不同单细胞亚群的个性化的线粒体含量过滤标准,如下所示:

不同单细胞亚群的个性化的线粒体含量过滤标准
文章里面给出来了第一层次降维聚类分群的:
cell_markers <- list(
T_cells = c("CD3D", "CD3E", "TRAC", "TRBC1"),
B_cells = c("CD79A", "CD79B", "MS4A1", "TNFRSF17", "MZB1"),
Myeloid_cells = c("CD14", "CD68"),
Epithelial_cells = c("EPCAM", "CD24"),
Fibroblast = c("COL1A2", "COL3A1", "MYH11", "ACTA2"),
Endothelial_cells = c("VWF", "PECAM1")
)
所以我们可以读取后先不要设置线粒体过滤参数,也是可以进行第一层次降维聚类分群并且生物学命名的,可以看到确实是上皮细胞亚群里面的线粒体含量非常夸张,一方面呢是作者的单细胞转录组数据质量确实是不行,另外的话其实不同单细胞亚群的生物学本质不一样,也确实是不应该是一概而论的过滤 :

上皮细胞亚群里面的线粒体含量非常夸张
文章就是对上皮细胞选择删除了线粒体含量过高的那些细胞,前25%,对于其它单细胞亚群选择删除了线粒体含量高于2倍的MAD值的,基于正态分布的统计学原理。在统计学中,过滤两倍的中位数绝对偏差(MAD)和三倍的MAD通常用于识别数据集中的离群值(outliers)。MAD是一种稳健的离散度(或变异性)度量,它描述了数据点相对于其中位数的偏离程度。使用MAD来识别离群值是基于这样的假设:大部分数据点应该紧密地围绕中位数分布。如果数据分布接近正态分布,两倍MAD通常对应于大约99.3%的数据点位于这个范围内,而三倍MAD则对应于大约99.9%的数据点。这意味着三倍MAD的标准更加严格,说明我们会很谨慎的过滤低质量的细胞。
过滤之前的20多万细胞确实是第一层次降维聚类分群很丑,如下所示:

聚类分群很丑
但是丑一点并不会是什么不可饶恕的bug,仅仅是视觉上不讨喜。比如学员最开始以为他自己做的不太好的就是过滤的很夸张, 到了只剩下八九万细胞的,其实第一层次降维聚类分群也是类似的。

只剩下八九万细胞的
需要对没有过滤线粒体含量时候的二十多万细胞数量的Seurat对象进行第一层次降维聚类分群和命名,然后拆分成为每个亚群独立的Seurat对象在每个对象里面进行个性化过滤,最后把每个亚群独立的Seurat对象继续合并成为一个大的Seurat对象,再走一次降维聚类分群流程。大家可以试试看哈...