1. RNA-seq 基础回顾:从测序到表达矩阵

各位好,我是这门课的主讲。做 RNA-seq 分析也踩了不少坑,今天咱们从头捋一遍基础。别小看这章,很多人拿到表达矩阵就直接扔进模型,结果跑出来的特征毫无生物学意义——说白了,你连数据怎么来的都不清楚,怎么敢相信模型学到的规律?

核心一句话:表达矩阵不是天然存在的,它是测序→比对→定量这三步层层加工出来的产物。每一步的选择都会直接影响你最终给机器学习的特征。

1.1 测序原理——十来分钟搞懂

RNA-seq 的第一步是把细胞里的 RNA 打断成小片段,然后上机测序。现在主流平台还是 Illumina 的边合成边测序(SBS)。我记得刚入行时对“测序深度”这个概念特别模糊,后来亲手跑了两次文库才明白——其实就是测序仪到底读了多少条片段。

测序读长一般有两种:

  • 单端(SE):只读片段的一端,成本低,但没法区分重复片段。我做过一个项目,用 SE 数据做异构体定量,结果偏差大到离谱——后来换成 PE 才救回来。
  • 双端(PE):两端一起读,能获得插入片段长度信息,定量更准。我建议做差异表达或机器学习任务时,优先用 PE100 或 PE150。

产出数据就是一堆 FASTQ 文件:里面记录了每条 read 的碱基序列和质量分数。为什么强调这个?因为后面所有的比对、定量,甚至特征矩阵的质量,都依赖于这一步的测序质量。

我的经验:拿到 FASTQ 后第一件事一定是跑 FastQC,看看碱基质量、GC 含量、接头污染。跳过这一步,后面可能白干。

1.2 比对与定量——两条路,选对很重要

有了 reads,下一步就是确定它们来自哪些基因。这个过程叫“比对”或者“伪比对”,取决于你选哪个工具。

传统方法是先用 STAR 或 HISAT2 把 reads 比对到参考基因组上,然后通过 HTSeq-count 或 featureCounts 统计每个基因覆盖到的 reads 数。这个方法准确,但慢。我曾在 200 个样本上跑 STAR,单线程跑了整整一周。

后来出现了“伪比对”工具,比如 Salmon 和 kallisto。它们不把 reads 完全对齐到基因组,而是直接比对到转录本序列上,再通过概率模型估算丰度。速度快得吓人,而且精度并不差。我现在的新项目基本都直接上 Salmon。

千万别混淆:比对到基因组和伪比对到转录本,输出的矩阵单位完全不同——前者是 counts,后者可以直接输出 TPM。后面做模型特征时,一定要搞清楚你手里的矩阵类型。

1.3 表达矩阵三大金刚——Counts / FPKM / TPM

不管用哪种方法,最终都会得到一个基因×样本的矩阵。但矩阵里的数值含义可以完全不同。我见过有人拿 FPKM 矩阵直接做 PCA,结果聚类全乱——因为 FPKM 在不同样本间不可比。

矩阵类型 含义 适用场景 注意点
Raw Counts 每个基因测到的 reads 数量(整数) 差异表达分析(DESeq2 / edgeR) 受测序深度和基因长度影响,不可跨样本比较
FPKM / RPKM 每千碱基每百万比对片段数(浮点数) 基因内相对表达比较 样本间比较时会有偏差(因为总 reads 数不同)
TPM 每百万转录本数(浮点数) 跨样本/跨基因比较,机器学习特征 需要先知道转录本长度;最推荐用于模型输入

为什么我推荐 TPM?因为它先归一化基因长度再归一化文库大小,数值在样本间可直接对比。如果你要训练一个跨样本的分类器,TPM 是最安全的起点。

避坑指南:千万不要把 Raw Counts 直接扔进线性模型!counts 是离散的,且方差随均值变化,需要先做方差稳定变换(如 rlog)或者转 log2(TPM+1)。我曾经用 counts 做线性回归,结果 RMSE 爆炸——后来才发现变量分布严重右偏。

1.4 从 FASTQ 到矩阵的完整流程

下面这张流程图帮你理清脉络。建议保存下来,每次跑分析前过一遍——我自己的文件夹里就贴着这张图,防止自己漏掉某个关键步骤。

RNA-seq 测序数据处理流程 原始 FASTQ 质控(FastQC + Trimmomatic) 伪比对(Salmon / kallisto) 比对(STAR / HISAT2) 定量(featureCounts / HTSeq) 表达矩阵
(Counts / FPKM / TPM) 说明:箭头指向可选路径,通常左侧为质控后比对-定量路线,右侧为直接伪比对定量路线。 中间路径(比对+定量)可用在需要基因组位置的场景,如新转录本发现。

1.5 实际工作中怎么选?给你三个判断标准

  1. 看问题类型:如果是差异表达基因筛选,用 Raw Counts + DESeq2;如果是给机器学习建特征,用 log2(TPM+1) 最稳妥。
  2. 看样本量:几十个样本以内,STAR+featureCounts 还能忍;成百上千时,Salmon 是唯一选择——我跑过 500 个肿瘤样本,Salmon 半天搞定,STAR 要一周。
  3. 看后续分析:如果要做融合基因或可变剪接,必须用比对到基因组的路线(STAR);如果只是表达量建模,伪比对足够。

小技巧:不管你选择哪条路线,最终拿到表达矩阵后,务必检查一下行名和列名是否一致。我曾经因为样本命名不规范,合并矩阵时搞混了肺癌和正常样本,结果模型学到的其实是命名规律而不是生物学信号——有点尴尬。