- 什么是文库大小 (Library Size)?
在单细胞测序中,文库大小(也常被称为“测序深度”或 “Total Counts”)指的是在一个细胞中检测到的所有基因的总count值。如果我们使用的是UMI(Unique Molecular Identifiers,独特分子标识符),文库大小就是该细胞中所有UMI的总数。如果我们使用的是Read Counts(原始读数),它就是该细胞中所有Read的总数。(目前主流的scRNA-seq技术,如10x Genomics,都使用UMI,所以我们通常谈论的是UMI总数。) - 文库大小如何影响Count值?
文库大小本质上反映了我们对这个细胞“测序的努力程度”。高文库大小(High Library Size): 意味着这个细胞被测序得比较“深”。我们从这个细胞中捕获并测序到的分子(UMI)就越多。因此,该细胞中几乎所有基因的count值都会系统性地偏高。低文库大小(Low Library Size): 意味着这个细胞被测序得比较“浅”。我们捕获到的分子总数较少。因此,该细胞中所有基因的count值都会系统性地偏低。
一个关键的比喻:想象有两个一模一样的细胞(A和B),它们内部的基因表达水平(mRNA分子的真实比例)是完全相同的。对于细胞A,我们进行了深度测序(高文库大小),总共“抓取”了 20,000 个UMI。对于细胞B,我们只进行了浅度测序(低文库大小),总共只“抓取”了 5,000 个UMI。假设某个基因 GeneXGeneXGeneX 真实表达量占细胞总mRNA的1%。在细胞A中,我们观测到的 GeneXGeneXGeneX count值可能是:20,000×1%=20020,000 \times 1\% = 20020,000×1%=200在细胞B中,我们观测到的 GeneXGeneXGeneX count值可能是:5,000×1%=505,000 \times 1\% = 505,000×1%=50 - 为什么这是一个问题?问题在于,这种差异(200 vs 50)不是由生物学差异(Biological Variation)引起的,而是由测序深度(Technical Variation)引起的。如果我们不加处理,直接比较细胞A和细胞B:我们会错误地得出结论:“GeneXGeneXGeneX 在细胞A中的表达量是细胞B的4倍”。在进行细胞聚类时,高文库大小的细胞和低文库大小的细胞可能会因为这个技术偏差而被错误地聚集成不同的细胞群。
- 解决方案:归一化 (Normalization)为了消除文库大小带来的技术偏差,使细胞间的基因表达具有可比性,我们必须进行归一化(Normalization)。这是单细胞数据分析流程中最关键的步骤之一。最常用和最基础的归一化方法叫做**“LogNormalize”**(例如在Seurat包中默认使用):
步骤 1:计算相对丰度将每个细胞中每个基因的count值,除以该细胞的文库大小(总counts)。相对丰度=基因的count值细胞的文库大小 (Total Counts)\text{相对丰度} = \frac{\text{基因的count值}}{\text{细胞的文库大小 (Total Counts)}}相对丰度=细胞的文库大小 (Total Counts)基因的count值接上例:细胞A的 GeneXGeneXGeneX:200/20,000=0.01200 / 20,000 = 0.01200/20,000=0.01细胞B的 GeneXGeneXGeneX:50/5,000=0.0150 / 5,000 = 0.0150/5,000=0.01
步骤 2:乘以一个缩放因子 (Scale Factor)由于上一步得到的数值都非常小,不便于计算,我们通常会乘以一个固定的缩放因子(例如10,000)。这相当于“每万个counts中的表达量”(CP10k)。CP10k=相对丰度×10,000\text{CP10k} = \text{相对丰度} \times 10,000CP10k=相对丰度×10,000接上例:细胞A的 GeneXGeneXGeneX:0.01×10,000=1000.01 \times 10,000 = 1000.01×10,000=100细胞B的 GeneXGeneXGeneX:0.01×10,000=1000.01 \times 10,000 = 1000.01×10,000=100
步骤 3:对数转换 (Log-Transformation)单细胞数据中,基因表达的count值分布非常不均匀(高度偏态,少数基因count极高,大量基因为0或很低)。为了使数据分布更接近正态分布,以便进行后续的统计分析(如PCA、差异表达分析),我们会进行log转换。归一化后的值=log(1+CP10k)\text{归一化后的值} = \log(1 + \text{CP10k})归一化后的值=log(1+CP10k)(使用 log(1+x)\log(1+x)log(1+x) 而不是 log(x)\log(x)log(x) 是为了避免对0取对数而出错,这被称为 log1p。)接上例:细胞A和B的 GeneXGeneXGeneX 最终值:log(1+100)≈4.615\log(1 + 100) \approx 4.615log(1+100)≈4.615
总结:通过归一化,我们成功消除了文库大小(测序深度)的干扰,得到了细胞A和细胞B中 GeneXGeneXGeneX 相同的表达水平(4.615),这准确地反映了它们具有相同生物学状态的(假设)事实。
核心结论:文库大小是原始count值(Raw Counts)的主要驱动因素之一,它是一种必须通过归一化来校正的技术偏差。 在下游分析中(如聚类、差异表达分析),我们永远不应该直接使用原始的count值,而必须使用归一化后的数据。