跳转到内容

TPM、FPKM、CPM 与有效长度

快速概览

RNA-seq 表达量归一化是消除测序深度和基因长度偏差、实现跨样本可比性的关键步骤。本节对比 CPM、FPKM、TPM 的归一化逻辑,并引入有效长度的概念。

  • 掌握 counts 到 CPM/FPKM/TPM 的公式转换与数学本质
  • 理解为什么 TPM 在跨样本比较中具有更好的统计性质
  • 掌握有效长度(Effective Length) 的定义及其对定量的修正作用
  • 辨析归一化数据与原始计数在差异表达分析中的不同角色
所属板块 分析方向与案例

把基础对象与算法方法重新放回真实分析任务与工作流。

阅读目标 帮助建立阅读上下文

先判断这页与你当前问题的关系,再决定是否深入展开。

建议前置 先建立相关基础对象与方法直觉

建议先建立相关基础对象与方法直觉,再进入本页。

CPM、FPKM 和 TPM 是 RNA-seq 数据中最常用的三种表达量归一化指标。它们的作用是将原始 Read 计数(Raw Counts)转化为可以跨样本、跨基因进行比较的标准化数值。

这三者的核心目标是一致的:消除测序深度(Sequencing Depth)和基因/转录本长度(Gene/Transcript Length)对计数造成的系统性偏差。但它们在归一化的顺序和数学性质上存在关键差异,导致适用场景不同。

原始计数(Raw Counts)受到两个主要系统偏差的影响,如果不加校正就直接比较,会得出错误的结论:

  1. 测序深度偏差:假设样本 A 测了 3000 万 Reads,样本 B 测了 5000 万 Reads,那么同一个基因在样本 B 中的 Counts 天然就会偏高。如果直接比较 Counts,差异会反映测序量而非真实表达水平。
  2. 基因长度偏差:假设基因 X 长度为 2000 bp,基因 Y 长度为 500 bp,在相同的转录本数量下,基因 X 会产生约 4 倍于基因 Y 的 Reads。如果直接比较 Counts,长基因会系统性地显得”表达量更高”。

归一化的任务就是设计一个数学变换,使得变换后的数值尽可能反映转录本的真实分子数量转录本在总 RNA 池中的相对比例

  • 原始计数矩阵:行代表基因/转录本,列代表样本,值为落在该基因/转录本上的 Reads 数量。
  • 基因/转录本长度信息:通常为有效长度(Effective Length),由定量工具(如 Salmon、Kallisto)估计。
  • 可选:GC 含量、文库组成偏差等额外校正因子(如 DESeq2 的 size factors)。
  • CPM 矩阵:仅校正测序深度的归一化值。
  • FPKM/RPKM 矩阵:同时校正测序深度和基因长度的归一化值。
  • TPM 矩阵:现代推荐的同时校正深度和长度的归一化值,具有更好的跨样本可比性。

CPM 是最简单的归一化方法,仅校正测序深度:

CPMi=cij=1Ncj×106\text{CPM}_i = \frac{c_i}{\sum_{j=1}^{N} c_j} \times 10^6

其中 cic_i 是基因 ii 的原始计数,j=1Ncj\sum_{j=1}^{N} c_j 是样本的总 Reads 数(文库大小, Library Size),NN 是基因总数。

  • 优点:计算简单,直觉清晰。适用于同一个样本内不同基因之间的粗略比较。
  • 缺点:没有校正基因长度,因此不能直接比较不同基因的表达量。例如,一个 CPM 为 100 的短基因和一个 CPM 为 100 的长基因,其真实转录本分子数可能相差数倍。

RPKM (Reads Per Kilobase per Million) 用于单端测序,FPKM (Fragments Per Kilobase per Million) 用于双端测序。两者的数学结构相同:

FPKMi=ciL~i/103×j=1Ncj/106=ci×109L~i×j=1Ncj\text{FPKM}_i = \frac{c_i}{\tilde{L}_i / 10^3 \times \sum_{j=1}^{N} c_j / 10^6} = \frac{c_i \times 10^9}{\tilde{L}_i \times \sum_{j=1}^{N} c_j}

其中 L~i\tilde{L}_i 是基因 ii 的有效长度(单位为 bp),cic_i 是原始计数。

FPKM 的归一化逻辑是”先按长度校正,再按深度校正”:

  1. 长度校正:将计数除以基因长度(以 kb 为单位),得到”每 kb 的 Read 密度”。
  2. 深度校正:再除以总 Reads 数(以百万为单位),得到”每百万 Reads 中每 kb 的 Read 数”。
RPKM (Reads Per Kilobase per Million)
单端测序时代的标准归一化指标。公式:$RPKM = rac{Reads imes 10^9}{Length imes TotalReads}$。由 Mortazavi 等人在 2008 年提出。
FPKM (Fragments Per Kilobase per Million)
双端测序时代的对应指标。区别在于计数单位从"Reads"变为"Fragments"(一个 Fragment 可能对应一对 Reads)。公式结构与 RPKM 相同。
TPM (Transcripts Per Million)
现代推荐的归一化指标。核心改进:确保每个样本中所有基因的 TPM 总和恰好等于 $10^6$,使跨样本比较的比例关系更加一致。

TPM 的计算分为两步:

第一步:按长度归一化(计算 RPK)

RPKi=ciL~i/103\text{RPK}_i = \frac{c_i}{\tilde{L}_i / 10^3}

第二步:按深度归一化(缩放到 10610^6

TPMi=RPKij=1NRPKj×106\text{TPM}_i = \frac{\text{RPK}_i}{\sum_{j=1}^{N} \text{RPK}_j} \times 10^6

TPM 的关键性质:在任何样本中,i=1NTPMi=106\sum_{i=1}^{N} \text{TPM}_i = 10^6

两者的差异在于归一化的顺序

FPKMTPM
第一步除以长度除以长度
第二步除以总 Reads 数(一个固定的标量)除以所有基因 RPK 之和(一个与基因表达分布相关的量)

FPKM 的缺陷:不同样本的 FPKM 总和是不固定的。如果样本 A 中少数高表达基因占据了大量 Reads(即”文库组成偏差”),那么样本 A 的 FPKM 总和会不同于样本 B。这导致 FPKM 的比例关系在跨样本比较时会发生扭曲。

TPM 的优势:由于 TPM 总和恒为 10610^6,TPM 直接反映了转录本池中的相对比例。如果基因 X 在样本 A 中的 TPM 是 50,在样本 B 中是 100,那么可以直接说基因 X 在样本 B 中的相对丰度是样本 A 的 2 倍。这种比例关系的保真性是 FPKM 无法保证的。

从 FPKM 转换到 TPM:

TPMi=FPKMij=1NFPKMj×106\text{TPM}_i = \frac{\text{FPKM}_i}{\sum_{j=1}^{N} \text{FPKM}_j} \times 10^6

这个公式揭示了 TPM 的本质:对 FPKM 做了一次”再归一化”,使得所有基因的值加起来等于 10610^6。因此,TPM 和 FPKM 之间的相对关系在同一样本内是相同的——基因 X 的 TPM 是基因 Y 的 3 倍,那么基因 X 的 FPKM 也是基因 Y 的 3 倍。差异仅体现在跨样本比较时。

在上述公式中,长度 LiL_i 并非转录本的名义长度(Nominal Length),而是有效长度(Effective Length) L~i\tilde{L}_i

理想状态下,Read 可以落在转录本的任何位置。但现实中,受 Read 长度和文库构建的限制:

  • 转录本的 5’ 端和 3’ 端附近无法产生完整的 Read(因为 Read 长度可能超出边界)。
  • 文库构建过程中的片段化(Fragmentation)步骤会引入偏好性(如超声波打断的片段长度分布并非均匀)。

因此,能够有效产生 Reads 的区域短于转录本的全长。

L~i=Liμfrag+1\tilde{L}_i = L_i - \mu_{\text{frag}} + 1

其中 LiL_i 是转录本 ii 的名义长度,μfrag\mu_{\text{frag}} 是文库中片段(Fragment)的平均长度。减去 μfrag1\mu_{\text{frag}} - 1 是因为:如果片段的平均长度为 ll,那么转录本的前 l1l-1 个碱基和后 l1l-1 个碱基无法产生完整的片段。

Salmon 和 Kallisto 等现代工具并非使用固定的片段平均长度,而是通过期望最大化(EM)算法从数据中动态估计每个转录本的有效长度。这种方法能够捕捉不同转录本之间的片段化偏好差异,提供更精确的定量结果。

假设一个样本中有 3 个基因,测序总 Reads 数为 10710^7(1000 万),片段平均长度为 200 bp。

基因原始计数 cic_i名义长度 LiL_i (bp)有效长度 L~i\tilde{L}_i (bp)
Gene A50,0002,0001,801
Gene B10,0001,000801
Gene C1,000500301

CPMA=5000010000000×106=5000\text{CPM}_A = \frac{50000}{10000000} \times 10^6 = 5000 CPMB=1000010000000×106=1000\text{CPM}_B = \frac{10000}{10000000} \times 10^6 = 1000 CPMC=100010000000×106=100\text{CPM}_C = \frac{1000}{10000000} \times 10^6 = 100

注意:Gene A 的 CPM 是 Gene B 的 5 倍,但这部分反映了 Gene A 长度是 Gene B 的 2 倍。

FPKMA=50000×1091801×1072776.2\text{FPKM}_A = \frac{50000 \times 10^9}{1801 \times 10^7} \approx 2776.2 FPKMB=10000×109801×1071248.4\text{FPKM}_B = \frac{10000 \times 10^9}{801 \times 10^7} \approx 1248.4 FPKMC=1000×109301×107332.2\text{FPKM}_C = \frac{1000 \times 10^9}{301 \times 10^7} \approx 332.2

FPKM 总和:2776.2+1248.4+332.2=4356.82776.2 + 1248.4 + 332.2 = 4356.8(不等于任何固定值)。

第一步:RPK

RPKA=500001.80127762.4\text{RPK}_A = \frac{50000}{1.801} \approx 27762.4 RPKB=100000.80112484.4\text{RPK}_B = \frac{10000}{0.801} \approx 12484.4 RPKC=10000.3013322.3\text{RPK}_C = \frac{1000}{0.301} \approx 3322.3

RPK 总和:27762.4+12484.4+3322.3=43569.127762.4 + 12484.4 + 3322.3 = 43569.1

第二步:TPM

TPMA=27762.443569.1×106637209\text{TPM}_A = \frac{27762.4}{43569.1} \times 10^6 \approx 637209 TPMB=12484.443569.1×106286524\text{TPM}_B = \frac{12484.4}{43569.1} \times 10^6 \approx 286524 TPMC=3322.343569.1×10676267\text{TPM}_C = \frac{3322.3}{43569.1} \times 10^6 \approx 76267

TPM 总和验证:637209+286524+76267=1000000637209 + 286524 + 76267 = 1000000

  • 校正长度后,Gene A 与 Gene B 的表达量比例从 CPM 的 5:1 变为 TPM 的约 2.2:1,反映了 Gene A 比 Gene B 长约 2 倍的效应被消除。
  • TPM 可以直接用于跨样本比较:如果另一个样本中 Gene A 的 TPM 为 1274418,则可以直接推断该样本中 Gene A 的相对丰度约为本样本的 2 倍。
维度 CPM(每百万计数) TPM(每百万转录本)
归一化维度 仅校正测序深度 同时校正测序深度和基因长度
跨样本可比性 有限——受基因长度分布影响 好——总量恒为 $10^6$
适用场景 同一样本内基因间比较;差异表达原始输入 跨样本基因表达比较
统计性质 保持原始计数的离散分布 归一化比例值,丢失方差信息
DESeq2/edgeR 兼容 推荐——使用原始计数 不推荐——统计模型假设被破坏

所有三种归一化方法的时间复杂度均为 O(N)O(N)NN 为基因/转录本数量),计算开销可忽略不计。真正的计算瓶颈在于上游的 Reads 比对或伪比对步骤。

前提影响程度说明
文库大小估计准确CPM/FPKM/TPM 都依赖总 Reads 数。如果文库中含有大量 rRNA 污染,总 Reads 数被高估,所有归一化值会被系统性低估。
有效长度估计合理中-高对于短转录本(< 500 bp),有效长度与名义长度的差异可能超过 30%,严重影响定量准确性。
RNA 组成相对均一TPM 假设”大多数基因不发生变化”。如果实验条件导致全局转录组重编程(如大量基因被沉默,少数基因被极度激活),TPM 的跨样本可比性也会受到影响。
无 3’ 偏好某些 RNA-seq 文库构建方案(如带有 oligo-dT 引物的方案)会引入 3’ 端偏好,导致转录本 5’ 端的覆盖度远低于 3’ 端,此时有效长度的均匀假设不再成立。
工具输出格式说明
SalmonTPM + 有效计数使用基于 EM 的在线学习算法,输出 TPM 和 NumReads(有效计数)。推荐使用 --gcBias--seqBias 选项校正 GC 含量和序列偏好。
KallistoTPM + 估计计数基于 k-mer 伪比对和 EM 算法,速度极快。输出 TPM 和 estimated counts。
RSEMFPKM + TPM + 预期计数支持 alignment-based 和 alignment-free 模式,输出多种归一化指标。
featureCounts / HTSeq-count原始计数仅输出基因级别的原始计数,不进行长度归一化。需要下游工具(如 tximport)进一步处理。
CufflinksFPKM早期工具,输出 FPKM。已基本被 Salmon/Kallisto + tximport 工作流取代。

现代 RNA-seq 定量的推荐工作流为:

Salmon/Kallisto(转录本级定量)tximportDESeq2(差异分析)\text{Salmon/Kallisto(转录本级定量)} \xrightarrow{\text{tximport}} \text{DESeq2(差异分析)}

其中 tximport 负责将转录本级的 TPM 和有效计数聚合为基因级的长度校正计数,DESeq2 使用原始计数性质的数据进行统计建模。TPM 仅用于可视化和样本间趋势比较。