第 6 章数据分析
质控:哪些细胞值得留下
Cell Ranger 判定为“细胞”的条形码,并不都是好细胞:有的是破损细胞,有的是漏网的空液滴,有的是双细胞。质控用每个细胞的三个数字来识别它们:UMI 总数、检测到的基因数和线粒体比例。每个数字都能追溯到一个湿实验步骤。
三个指标,三个湿实验来源
| 指标 | 偏低时提示 | 偏高时提示 | 湿实验来源 |
|---|---|---|---|
| nCount_RNA | 破损细胞、空液滴 | 双细胞,或本来就大的细胞 | 解离损伤(第 1 章)、上样(第 2 章)、深度(第 4 章) |
| nFeature_RNA | 同上;UMI 不低而基因很少,说明被少数基因占据 | 双细胞 | 同上,并反映文库复杂度(第 3 章) |
| percent.mt | — | 膜破损、濒死细胞 | 解离、冻融、等待(第 1 章) |
在 Seurat 里,线粒体比例这样计算(人类基因以 MT- 开头,小鼠为 mt-):
obj[["percent.mt"]] <- PercentageFeatureSet(obj, pattern = "^MT-")
三个指标要一起看。破损细胞的典型组合是 UMI 少、线粒体比例高;只是线粒体比例偏高而 UMI 正常的细胞,可能是代谢旺盛的真实细胞类型。还可以加看核糖体蛋白比例、血红蛋白比例和第 2 章的双细胞得分。
在 pbmc3k 上拖动阈值
组件里是 pbmc3k 的全部 2,700 个细胞。左图横轴是 UMI 数、纵轴是线粒体比例,右图是基因数对 UMI 数,虚线是当前阈值。先点“Seurat 教程阈值”:保留基因数 200–2,500、线粒体比例低于 5% 的细胞,剩下 2,638 个。看看被去掉的细胞落在散点图的哪里。
obj <- subset(obj, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)
固定阈值简单,但它是为这一份数据定的。另一种做法是 MAD 自适应阈值:在对数尺度上取中位数,把偏离中位数超过若干个 MAD(中位数绝对偏差)的细胞标为离群。它随数据自动调整,适合不同组织、不同深度的样本。OmicOne 的默认设置是:对 UMI 数和基因数(对数尺度)用 5 个 MAD,对线粒体比例只看高端、用 3 个 MAD。在组件里切换两种模式,比较它们去掉的细胞有什么不同。
常见误区
- 把 200–2,500 和 5% 套到别的数据上。 pbmc3k 是 v1 化学,每个细胞检测到的基因少;新化学版本的数据里,2,500 这个上限会删掉大量正常细胞。
- 下限定得过高。 血小板、静息淋巴细胞等 RNA 含量低的细胞天然 UMI 少,硬下限会把整个类型删掉。
- 只看阈值,不看被删的是谁。 聚类之后回头检查:被去掉或离群的细胞是否集中在某一个簇。
- 以为质控能去掉环境 RNA。 过滤去掉的是坏细胞;留下来的细胞身上的背景污染要用 SoupX、CellBender 等工具处理。