第3章 单细胞数据中的双细胞问题

做单细胞测序的第一步,就是拿到一个细胞悬液。但你有没有想过——一个液滴里可能裹进了两个细胞?这种情况我们叫它「双细胞」,英文叫 doublet。我最早接触 UMI 数据时,总觉得双细胞离自己很远。直到有一次,聚类出来一个莫名其妙的亚群,表达谱既有 T 细胞 marker 又有 B 细胞 marker —— 我才意识到,双细胞不是小概率事件。

3.1 双细胞是怎么来的?

双细胞的形成原因,说白了就两种:

  • 同种双细胞:两个来自同一类型的细胞被意外封到同一个液滴里。这种情况相对好处理,因为它们的表达谱和单细胞差别不大,统计上容易被淹掉。
  • 异种双细胞:两个不同类型的细胞混在了一起。这很麻烦——混合后的表达谱会生成一个“四不像”的伪细胞,误导下游分析。

常见的物理原因有哪些?你想想看,细胞悬液浓度过高、微流控通道堵塞、液滴生成不稳定……都会导致双细胞率上升。我见过一个项目,上机前 Cell Ranger 给的估算细胞数是 5000,结果 doublet 率飙到了 10% 以上。后来一查,是细胞团没充分过滤,堵了不少通道。

3.2 双细胞对分析的影响

双细胞混进数据里,最直接的后果就是产生假细胞群。我来给你列几个我亲身体会过的坑:

影响一:聚类结果失真

双细胞会强行把两个不同细胞的表达谱揉在一起。聚类时,它们可能聚在两个真实类群之间,形成一个“桥接”簇。这个簇没有生物学意义,但会拉偏相邻类群的基因表达均值。我曾在一个免疫细胞图谱项目中,因为 5% 的双细胞,把 CD4+ 和 CD8+ T 细胞的差异基因数量高估了将近 30%。

影响二:差异表达分析中的假阳性

双细胞本身的基因表达是两份独立转录本的叠加。比较两组细胞时,如果一组里混入的双细胞更多,那些“双细胞特有”的基因(其实是两个细胞共同高表达的基因)就会被误判为差异基因。你做完富集分析,发现一堆核糖体通路显著 —— 那很可能是双细胞在捣鬼。

影响三:UMI 计数分布畸变

双细胞的 UMI 总数通常是单细胞的两倍(甚至更多)。它会拉高整体的 UMI 分布尾部,干扰你后面设定 UMI 计数阈值时的判断。我在一次质控流程中,没提前过滤双细胞,结果 UMI 分布的 95% 分位数比真实值高了将近 40%。

我把这些影响整理成了一个对比表,方便你对照:

分析环节 双细胞带来的问题 典型表现
聚类 产生伪簇 / 桥接簇 中间过渡态,无明确 marker
差异表达 假阳性差异基因 核糖体 / 管家基因富集
UMI 阈值设定 尾部被拉高 95% 分位数异常偏大
细胞类型注释 混淆注释结果 单个细胞同时表达两种矛盾 marker

3.3 为什么一定要检测双细胞?

可能有朋友会问:如果我的实验设计里细胞类型差异很大,双细胞会不会自动在后续分析中暴露出来?我的回答是:别指望它自己现形。原因如下——

  1. 双细胞数量往往很少,但破坏力很大。 1% 的双细胞可能影响 5% 的类群边界。你肉眼看不出来,但算法跑出来就歪了。
  2. 异种双细胞最难识别。 它们不会出现在某个已知类群里,而是躲在类群之间。不专门检测,你就找不到它们。
  3. UMI 计数阈值不能替代双细胞检测。 我曾经踩过这个坑:以为设一个高 UMI 阈值就能把双细胞一起扔掉。结果扔掉的都是高表达细胞(比如巨噬细胞),真正的双细胞反而因为 UMI 数刚好落在中位附近,顺利通过了质控。

避坑指南: 不要用 UMI 数量作为双细胞筛选的唯一标准。双细胞检测一定要基于表达谱相似性或基因计数特征。我习惯先跑一遍 Scrubblet 或 DoubletFinder,再用 UMI 阈值做二次过滤。

下面这张图,帮你把双细胞问题的来龙去脉串起来:

双细胞形成 → 影响 → 检测必要性 细胞类型 A 细胞类型 B 双细胞 (混合表达谱) 伪聚类 + 桥接簇 差异表达假阳性 UMI 阈值被扭曲 必须检测双细胞 Scrublet / DoubletFinder / CellBender 等专用工具

我的经验: 双细胞检测的最佳时机是在 UMI 计数过滤 之后、标准化 之前。先去掉低质量细胞,再跑 doublet detection,准确率更高。另外,别只看软件给的 doublet score 阈值 —— 我习惯画个 score 分布图,找明显分离的拐点。

最后说一句更实在的:如果你做的是 10X 标准建库,建议 doublet 率控制在 1% 以下。高细胞上样量(比如 10000+)时,doublet 会显著增加,这时候提前用诸如 cellranger count --expect-cells 调整预期细胞数,也能有些帮助。当然,这不能代替后面那一步专门的 doublet 检测。嗯,就先讲这些。