为什么动手做单细胞:从群体平均到个体差异


文档摘要

1.1 为什么动手做单细胞:从群体平均到个体差异 本节摘要:bulk 转录组测的是一份样本里所有细胞的平均表达,单细胞测序测的是每个细胞各自的表达谱。平均值会抹掉细胞类型的构成差异,把"细胞比例变了"误读成"基因调控变了"。理解这一点,后面所有质控与归一化的设计动机才说得通。 先从一个反例说起 假设你拿到一个肿瘤组织的 bulk 转录组数据,看到 EGFR 这个基因的表达量是中等偏高。顺理成章的推断是:"这份组织的细胞调高了 EGFR"。但把同一份组织做单细胞测序再拆开看,真相可能是:占组织三成的肿瘤上皮细胞把 EGFR 表达拉到了极高水平,而剩下七成的免疫基质细胞里这个基因几乎测不到读段——所谓"中等",只是高低两群混合后的算术平均。

1.1 为什么动手做单细胞:从群体平均到个体差异

本节摘要: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 细胞、单核细胞等十几种主要类型,肿瘤组织里细胞状态的连续谱更甚。平均能用,但只在你已经知道构成不变的前提下才可靠,而"构成变没变"恰恰是很多生物学问题本身。

图:bulk 平均与单细胞分辨的对比

图:bulk 平均与单细胞分辨的对比

哪些问题单细胞也回答不了

把期望值校准同样重要。单细胞测序不是万能镜,至少三件事它原生回答不了。第一,空间结构:解离过程把细胞从组织里拽了出来,谁挨着谁的信息永久丢失——这就是第五章空间转录组存在的理由。第二,实时动态:测一个细胞等于杀一个细胞,你看到的"过渡态"是从不同细胞身上拼出来的推断,不是对同一个细胞的跟踪录像——活细胞成像与谱系示踪才是动态问题的正解。第三,蛋白修饰与代谢状态:转录组只是生命活动的一层投影,磷酸化、糖基化、代谢通量这些直接决定细胞行为的层面,要么用多组学补测(CITE-seq 测蛋白丰度),要么另找技术。

还有一个常被忽略的维度:成本与样本量。单细胞单个样本的价格仍是 bulk 的十倍量级,临床研究里几十上百个患者的队列用纯单细胞跑全谱是不现实的——所以主流设计是"小队列单细胞画图谱找标志,大队列 bulk 或目标面板验证",两种数据配合而不是替代。理解这门技术的适用边界,比记住任何参数都重要。

常见疑问三则

单细胞测序和流式细胞术是什么关系

流式细胞术用抗体同时测每个细胞表面几十个蛋白 marker,速度快、通量大、便宜,是细胞分类的老牌技术。单细胞测序测的是全转录组(两万个基因),信息维度高几个数量级,但慢且贵。两者是互补关系:流式适合用已知 marker 数大量细胞的比例,单细胞适合发现未知的细胞类型与状态——先单细胞发现新标志,再流式验证大队列,是常见的工作流。近年 CITE-seq 类技术把几百个蛋白 marker 塞进了单细胞流程,两条技术路线正在靠近。

直接拿别人发表的矩阵算不算做单细胞分析

算,而且这是大量研究的实际起点——公共数据库里积累的图谱数据完全够回答很多问题。但要清楚二手数据的局限:上游实验协议、质控标准、测序深度都是别人定的,你不掌握原始 fastq 就无法重新判定细胞,注释体系也可能与你的问题不匹配。拿公开矩阵练手是绝佳的学习路径(本册的练习数据就是公开数据集),但任何要发表的结论,都建议至少复核一遍关键环节的原始质量控制指标。

本节要点回顾

  • 平均值会丢信息:bulk 表达是细胞类型表达与细胞构成加权后的混合结果,权重(构成)变化会被误读为表达调控变化。
  • 组成混淆是对照分析的头号陷阱:病例与对照组的细胞比例天然不同,先查构成再谈调控。
  • 单细胞矩阵高维且稀疏:十万细胞乘两万基因、以零为主,这决定了后面所有计算都要围绕稀疏矩阵与降维展开。
  • 检出基因数有物理上限:单细胞通常只能检出两三千个基因,这不是错误而是技术特性,第三章的归一化与高变基因选择都建立在这个事实之上。
  • 分析单元变了:从"样本×基因"变成"细胞×基因",统计推断的单位随之改变,差异表达要用专门的策略(第四章展开)。

把"为什么单细胞"想通之后,下一个问题是:测序仪吐出来的 reads,凭什么能还原成"每个细胞每个基因测到多少条"?这就要请出两个关键发明——UMI 与细胞条码,它们正是下一节的主角。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U