1.1 为什么动手做单细胞:从群体平均到个体差异 本节摘要:bulk 转录组测的是一份样本里所有细胞的平均表达,单细胞测序测的是每个细胞各自的表达谱。平均值会抹掉细胞类型的构成差异,把"细胞比例变了"误读成"基因调控变了"。理解这一点,后面所有质控与归一化的设计动机才说得通。 先从一个反例说起 假设你拿到一个肿瘤组织的 bulk 转录组数据,看到 EGFR 这个基因的表达量是中等偏高。顺理成章的推断是:"这份组织的细胞调高了 EGFR"。但把同一份组织做单细胞测序再拆开看,真相可能是:占组织三成的肿瘤上皮细胞把 EGFR 表达拉到了极高水平,而剩下七成的免疫基质细胞里这个基因几乎测不到读段——所谓"中等",只是高低两群混合后的算术平均。
本节摘要:bulk 转录组测的是一份样本里所有细胞的平均表达,单细胞测序测的是每个细胞各自的表达谱。平均值会抹掉细胞类型的构成差异,把"细胞比例变了"误读成"基因调控变了"。理解这一点,后面所有质控与归一化的设计动机才说得通。
假设你拿到一个肿瘤组织的 bulk 转录组数据,看到 EGFR 这个基因的表达量是中等偏高。顺理成章的推断是:"这份组织的细胞调高了 EGFR"。但把同一份组织做单细胞测序再拆开看,真相可能是:占组织三成的肿瘤上皮细胞把 EGFR 表达拉到了极高水平,而剩下七成的免疫基质细胞里这个基因几乎测不到读段——所谓"中等",只是高低两群混合后的算术平均。如果药物设计以"中等表达"为依据,剂量很可能压不到真正表达 EGFR 的那群细胞上;如果疗效评估用 bulk 表达量下降来判断,也可能只是肿瘤细胞占比被免疫浸润稀释了,细胞本身的调控根本没变。
这就是单细胞测序要解决的问题:bulk 把一个样本压缩成一个向量,单细胞把一个样本还原成一个总体。分析的基本单元从"样本"变成了"细胞",于是细胞类型构成、稀有细胞群、细胞状态过渡这些 bulk 视角下原则上看不见的东西,都变成了可以直接测量的对象。
把差别落到数据结构上会更具体。bulk RNA-seq 的表达矩阵,行是基因,列是样本,一个十对样本的实验就是一张两万乘十的表。单细胞 RNA-seq 的矩阵,行是细胞,列是基因——十万个细胞就是一张十万乘两万的表,而且矩阵里大多数格子是零:一个细胞通常只表达全部基因中的一部分,加上测序深度有限,单个细胞里能检出两三千个基因就算正常,这只占人类两万多个基因的一成多。零占多数的矩阵叫稀疏矩阵,存储和分析都要用专门的稀疏格式,这也是 Scanpy 用稀疏矩阵做底层的直接原因。
平均还有一个更隐蔽的坑:组成混淆。两个对照组相比,如果基因 A 的 bulk 表达升高了,可能是每个细胞都把 A 调高了一点,也可能只是表达 A 的那群细胞比例增加了。这两种解释在 bulk 数据里无法区分,在单细胞数据里一眼可辨——前者是每个细胞内的表达量变化,后者是细胞图谱里某一群的比例变化。做疾病对照分析时,先看细胞构成有没有动,再看具体细胞类型内的表达变化,这个顺序值得养成习惯。
不跑真实数据也能体会这件事。用一段十几行的 Python,构造两群表达模式完全不同的"细胞",分别看它们的平均和分布:
import numpy as np rng = np.random.default_rng(42) # 两群细胞各 500 个:T 细胞样(基因 A 高)与单核细胞样(基因 B 高) t_cell = rng.poisson(6, 500) # 基因 A 在 T 细胞里的计数 mono = rng.poisson(6, 500) # 基因 B 在单核细胞里的计数 bulk_a = t_cell.sum() / 1000 # 混成一份样本后,基因 A 的"平均" print(t_cell.mean(), mono.mean(), bulk_a) # 输出类似:6.05 6.11 3.02
分开看,两群细胞各自的信号清晰可辨;混在一起,每个基因的表达都被稀释掉将近一半,而且你完全不知道稀释掉了多少——因为组成比例本身就是未知的。真实组织比这复杂得多:外周血里有记忆与初始 T 细胞、NK 细胞、单核细胞等十几种主要类型,肿瘤组织里细胞状态的连续谱更甚。平均能用,但只在你已经知道构成不变的前提下才可靠,而"构成变没变"恰恰是很多生物学问题本身。

把期望值校准同样重要。单细胞测序不是万能镜,至少三件事它原生回答不了。第一,空间结构:解离过程把细胞从组织里拽了出来,谁挨着谁的信息永久丢失——这就是第五章空间转录组存在的理由。第二,实时动态:测一个细胞等于杀一个细胞,你看到的"过渡态"是从不同细胞身上拼出来的推断,不是对同一个细胞的跟踪录像——活细胞成像与谱系示踪才是动态问题的正解。第三,蛋白修饰与代谢状态:转录组只是生命活动的一层投影,磷酸化、糖基化、代谢通量这些直接决定细胞行为的层面,要么用多组学补测(CITE-seq 测蛋白丰度),要么另找技术。
还有一个常被忽略的维度:成本与样本量。单细胞单个样本的价格仍是 bulk 的十倍量级,临床研究里几十上百个患者的队列用纯单细胞跑全谱是不现实的——所以主流设计是"小队列单细胞画图谱找标志,大队列 bulk 或目标面板验证",两种数据配合而不是替代。理解这门技术的适用边界,比记住任何参数都重要。
流式细胞术用抗体同时测每个细胞表面几十个蛋白 marker,速度快、通量大、便宜,是细胞分类的老牌技术。单细胞测序测的是全转录组(两万个基因),信息维度高几个数量级,但慢且贵。两者是互补关系:流式适合用已知 marker 数大量细胞的比例,单细胞适合发现未知的细胞类型与状态——先单细胞发现新标志,再流式验证大队列,是常见的工作流。近年 CITE-seq 类技术把几百个蛋白 marker 塞进了单细胞流程,两条技术路线正在靠近。
算,而且这是大量研究的实际起点——公共数据库里积累的图谱数据完全够回答很多问题。但要清楚二手数据的局限:上游实验协议、质控标准、测序深度都是别人定的,你不掌握原始 fastq 就无法重新判定细胞,注释体系也可能与你的问题不匹配。拿公开矩阵练手是绝佳的学习路径(本册的练习数据就是公开数据集),但任何要发表的结论,都建议至少复核一遍关键环节的原始质量控制指标。
把"为什么单细胞"想通之后,下一个问题是:测序仪吐出来的 reads,凭什么能还原成"每个细胞每个基因测到多少条"?这就要请出两个关键发明——UMI 与细胞条码,它们正是下一节的主角。