第一课:单细胞测序简介——从细胞悬液到表达矩阵
各位好,我是老张。在单细胞数据分析这行摸爬滚打了快十年,今天咱们聊聊质控指标的设计。
很多人觉得质控就是设几个阈值,把不合格的细胞过滤掉就完事了。其实不然。我见过太多人因为不了解数据是怎么来的,导致阈值设得毫无道理。你想想看,连数据产生过程都不清楚,怎么定质控标准?
所以这第一课,咱们先把基础打牢。重点讲透三件事:scRNA-seq的技术原理、实验流程的完整链路、从细胞悬液到表达矩阵的数据流。说白了,就是搞清楚你手里那份表达矩阵,到底是怎么折腾出来的。
1.1 为什么需要做单细胞测序
我最早是做传统RNA-seq的,那时候一次实验下来拿到的是成千上万细胞的平均表达量,就是所谓的“bulk”信号。结果嘛,平均完,稀有的细胞亚群直接消失在了噪声里。
举个例子,肿瘤微环境里的某些免疫细胞,可能只占整个样品的1%。用bulk RNA-seq测,根本看不到它们的影子。而单细胞测序可以一个细胞一个细胞地看,这事就好办了。
所以,单细胞测序的核心能力就两个:分辨率和异质性解析。
| 维 度 | Bulk RNA-seq | scRNA-seq |
|---|---|---|
| 检测对象 | 组织/细胞群体 | 单个细胞 |
| 表达值 | 总体平均值 | 单个细胞表达谱 |
| 数据维度 | 1个样本1个值 | 1个样本N个细胞 × M个基因 |
| 适用场景 | 差异表达、通路分析 | 细胞分群、稀有细胞鉴定、发育轨迹 |
1.2 scRNA-seq的技术原理
主流平台怎么区分细胞?靠的是 barcode 。每个细胞捕获时,会被分配一段独特的DNA序列作为标签,就像给每个人发一个身份证号。之后所有来自这个细胞的转录本,都带这个标签。
但还有一个更关键的概念——UMI (Unique Molecular Identifier)。UMI是一段随机序列,用来标记每一条mRNA分子。为什么需要这玩意?因为PCR扩增会引入偏差,同一条mRNA分子扩增后会产生大量拷贝,但通过UMI我们可以准确知道:原来它们都来自同一条分子。
核心要点:Barcode标记细胞,UMI标记分子。两者结合,才能从测序数据精确还原每个细胞的基因表达量。
1.3 典型实验流程
我习惯把整个实验流程分四个大阶段来讲,这样好记。
阶段一:单细胞悬液制备
这一步最容易被忽视,但实际出问题最多的就是它。我曾经碰到过一个项目,做了三次都拿不到合格的数据,后来发现是组织解离过度,细胞都碎了,基质里全是游离的RNA。
- 组织剪碎 + 酶消化(胶原酶、胰蛋白酶等)
- 过滤去除细胞团块和碎片
- 细胞计数和活性检测(一般要求活性 > 80%)
阶段二:细胞捕获与建库
以最流行的10x Genomics平台为例,用的是油包水液滴技术。细胞悬液和带有barcode、UMI的凝胶微珠被包裹进液滴里,在液滴内完成细胞裂解、mRNA捕获和逆转录。
- 微流控芯片生成GEMs(凝胶微珠乳浊液)
- 液滴内mRNA与微珠上的捕获序列结合
- 逆转录生成cDNA,带上barcode和UMI
- 打破油滴,收集cDNA进行PCR扩增
- 酶切打断,加上Illumina测序接头
阶段三:高通量测序
建好的文库上机测序。一般双端测序:Read 1 读barcode和UMI,Read 2 读cDNA片段序列。
10x 测序读段结构示例:
Read 1: 26bp(10x Barcode + UMI)+ 1bp 间隔
Read 2: 98bp(cDNA insert)
Index: 8bp(样本标签)
阶段四:数据预处理
测序仪出来的原始数据是BCL格式,需要转换成FASTQ。然后跑标准的处理流程进行比对、定量、生成表达矩阵。
我的建议:如果你用10x数据,建议直接上Cell Ranger。它把所有步骤打包好了,你只需要提供FASTQ文件和参考基因组。新手先用官方pipeline跑通数据再说。
1.4 数据产生过程:从FASTQ到表达矩阵
这是整节课的硬核部分。我看过不少人的分析代码,发现他们直接跳过这一步,上来就用原始矩阵做质控。嗯,这里要注意,很多管线里的默认参数不一定适合你的数据。
标准的流程分为四步:
- barcode处理:从Read 1中提取barcode序列,校正barcode(允许1~2个碱基错配),分配每个读段到对应细胞。
- UMI处理:从Read 1中提取UMI序列,记录每个转录本的分子身份。
- 比对:Read 2与参考转录组比对,确定基因来源。
- 定量:对每个细胞中的每个基因,统计检测到几个不同的UMI,生成计数矩阵。
如果你用10x的 Cell Ranger,一条命令就能跑完:
cellranger count --id=Sample1 \
--transcriptome=/path/to/ref/refdata-gex-GRCh38-2020-A \
--fastqs=/path/to/fastqs \
--sample=Sample1 \
--localcores=8 \
--localmem=64
跑完后,找到 outs/filtered_feature_bc_matrix 目录,里面有三个文件:
matrix.mtx:表达矩阵(坐标格式)barcodes.tsv:细胞barcode列表(每一行一个细胞ID)features.tsv:基因注释(每一行一个基因ID和名字)
避坑提示:Cell Ranger默认有两个矩阵:raw_feature_bc_matrix 和 filtered_feature_bc_matrix。前者包含所有捕获到的barcode,后者仅保留它认为是细胞的那些。我建议你质控时尽量用raw矩阵从头处理,不要把别人的过滤标准当作真理。我曾经在两次分析中用了filtered矩阵,结果有些真实细胞被误杀了。
1.5 最终产品:表达矩阵长什么样
说白了,你最后拿到的东西就是一张表格。行是基因(大约20,000~30,000个),列是细胞(几千到几万个不等),每个格子表示某个基因在某个细胞中检测到的UMI数量。
举个例子,一个简单的小矩阵:
Cell_001 Cell_002 Cell_003
GAPDH 142 89 203
ACTB 231 156 312
MALAT1 1089 825 1432
TP53 0 2 0
CD3E 0 45 1
注意看,大部分基因为0。一个典型的单细胞样本里,90%以上的格子都是0。这就是所谓的dropout事件,技术原因也好,生物学原因也好,拿到数据后你会面对一个极其稀疏的矩阵。
关键认识:单细胞表达矩阵的稀疏性、零膨胀特性,决定了后续质控指标的设计不能简单套用bulk RNA-seq的方法。这就是为什么我们要专门讲基因数和UMI阈值的设定。
好了,第一课到这里。你理解了数据是怎么产生的,下一课我们就能开始动手看看怎么评估每个细胞的质量了。记住一句话:质控不是随便设一个阈值,而是理解数据生成过程后,做出的合理选择。