1. 单细胞RNA测序数据标准化的必要性
单细胞RNA测序技术让我们能够以前所未有的分辨率观察细胞间的基因表达差异。但就像用不同倍数的显微镜观察样本时需要进行焦距调整一样,原始的单细胞数据也需要经过标准化处理才能进行可靠的比较。
想象你同时测量两个细胞:一个测序深度为10万条reads,另一个只有5万条reads。如果不做标准化,高表达基因在第一个细胞中的计数可能是第二个细胞的两倍——但这可能仅仅反映了测序深度的差异,而非真实的生物学差异。这就是为什么我们需要标准化:将不同测序深度的细胞放在同一尺度上比较。
在Seurat工具包中,传统使用的是LogNormalize方法。它的计算逻辑很简单:
- 将每个基因的计数除以细胞的总UMI数(类似于计算百分比)
- 乘以一个缩放因子(默认10000)
- 进行log(1+x)转换
r复制# 传统LogNormalize方法示例
pbmc <- NormalizeData(pbmc,
normalization.method = "LogNormalize",
scale.factor = 10000)
但这种方法存在明显局限:它假设所有基因受到测序深度的影响程度相同。实际上,高表达基因的计数波动往往比低表达基因更大。这就好比用同一把尺子测量大象和蚂蚁的体重变化——显然不够精确。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. SCTransform的核心原理
SCTransform方法的聪明之处在于它不再对所有基因"一视同仁",而是为每个基因量身定制标准化方案。它的核心思想可以概括为:用统计模型区分技术变异和生物变异。
具体实现分为三个关键步骤:
2.1 负二项式回归建模
SCTransform会为每个基因建立一个负二项式回归模型:
- 因变量:基因的表达计数
- 自变量:细胞的总UMI数(代表测序深度)
r复制# SCTransform基本用法
pbmc <- SCTransform(pbmc, vst.flavor = "v2")
这个模型能够捕捉到基因表达随测序深度的变化规律。有趣的是,它还会自动识别并处理"过离散"(overdispersion)现象——即基因表达的变异度超出泊松分布预期的情况
