4. 数据标准化与质量控制归纳总结

数据标准化与质量控制,说白了就是给单细胞数据「洗澡加体检」。你可能遇到过这种情况:跑完QC一看,有的样本细胞数少得可怜,有的线粒体占比飙到30%以上——这样的数据直接往下分析,结果基本靠猜。我这些年做过的肿瘤样本项目里,至少有一半的批次问题其实是QC阶段没做好埋下的雷。

⚠ 警惕「标准化前后不分」

标准化必须在过滤低质量细胞之后做,顺序不要搞反。先标准化再过滤,会把死细胞的信号也放大,导致后续聚类偏移。我见过有人把顺序弄反,跑了三天才意识到问题,白白浪费计算资源。

4.1 为什么要做标准化?

单细胞测序的本质是捕获每个细胞里的mRNA分子。但不同细胞的捕获效率、测序深度都不一样。比如同样的基因,在细胞A里测到100 counts,细胞B里测到200 counts,这不代表B的表达量就是A的两倍——很可能是B被捕获了更多分子。

标准化的目的,就是消除这种技术误差,让基因表达水平可比。嗯,说白了就是给每个细胞一个「公平的起跑线」。

4.2 常用标准化方法对比

方法原理适用场景我的经验
LogNormalize (Seurat默认)每个细胞counts除以总counts,乘以scale.factor,再log1p常规10x数据,样本间测序深度差异不大最稳的方法,新手优先选
SCTransform负二项回归,一步完成标准化+方差稳定+高变基因选择数据量大、想做下游整合时速度慢但效果干净,我常在大项目里用它
scran (size factor)基于细胞池的size factor估算,类似bulk RNA-seq低捕获效率或UMI数据对稀疏数据友好,但计算稍复杂
NormCounts (scvi-tools)深度模型估计潜变量后矫正有多个批次、需要去批次效应时配合scVI效果很好,但需要GPU

我的个人习惯:如果只是做初步探索,用LogNormalize + ScaleData就够了;如果要做批次整合,我会在标准化之后立刻跑SCTransform,因为它的方差稳定特性对后续Harmony/CCA非常友好。

4.3 质量控制指标与阈值

质量控制不是硬套一个固定阈值就完事了。你想想看,肿瘤样本里本来就有大量凋亡细胞、免疫细胞浸润,还有组织碎片——这些都会拉低QC指标。我建议分两步走:

  1. 全局粗筛:去掉极低质量(nFeature<200)和极高线粒体(percent.mt>25%)的细胞。
  2. 样本级精细微调:看每个样本的分布直方图,取尖峰外的异常值。

几个核心指标如下:

指标含义常用阈值范围注意点
nCount_RNA每个细胞的总UMI数500–50000肿瘤样本可能高达100k,不要一刀切
nFeature_RNA每个细胞检测到的基因数200–5000低于200通常是空液滴或死细胞
percent.mt线粒体基因占比0–20%肿瘤组织可放宽到25%
percent.ribo核糖体基因占比0–5%过高可能代表技术假象
doublet_score双细胞预测分数按DoubletFinder等工具阈值10x数据通常有1–8% doublets

💡 我曾经犯过的错:有一个结直肠癌样本,我直接用全局阈值过滤掉了大部分细胞,后来发现那些所谓的「低质量细胞」其实是T细胞和B细胞(nFeature只有300-400)。从那以后我养成了习惯——每次过滤前先看细胞类型标签(如果有的话),再决定阈值。

4.4 标准化与QC的标准流程(Seurat为例)

# 第一步:创建Seurat对象,只过滤死细胞/空液滴
pbmc <- CreateSeuratObject(counts = raw_counts, 
                           project = "tumor_sample",
                           min.cells = 3,   # 至少在3个细胞中表达
                           min.features = 200)

# 第二步:QC指标计算
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")
pbmc[["percent.ribo"]] <- PercentageFeatureSet(pbmc, pattern = "^RP[SL]")

# 第三步:可视化分布
VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)

# 第四步:根据分布图设定阈值——这里我用的是样本特定的阈值
pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & 
                       nFeature_RNA < 5000 &
                       percent.mt < 20)

# 第五步:标准化
pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize", scale.factor = 10000)

# 第六步:识别高变基因(为PCA准备)
pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)

# 第七步:缩放(ScaleData)——标准化后的最后一步
all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)

注意:ScaleData会回归掉细胞周期、线粒体等协变量。如果你要在PCA之前做批次整合(如Harmony),通常不需要在ScaleData里再回归batch,因为整合步骤会处理。

4.5 知识图谱:标准化与质量控制总结

下面这张图是我做项目时常用的参考流程,你可以把它当作一个checklist:

数据标准化与质量控制流程总图 原始counts矩阵 过滤低质量细胞 LogNormalize / SCTransform FindVariableFeatures ScaleData (回归协变量) PCA降维 + 整合前复查 质控关键指标 • nCount_RNA 范围 • nFeature_RNA 范围 • percent.mt 阈值 • doublet_score 阈值 • 样本特异性分布 常用标准化方法 • LogNormalize(快速) • SCTransform(稳健) • scran size factor • scVI深度模型

总结强调:标准化与质量控制是单细胞分析最容易被忽视但至关重要的环节。我的经验是:在正式分析之前,至少花30%的时间调整QC参数和标准化策略。肿瘤样本尤其要重视——因为组织异质性高,很多看起来「低质量」的细胞其实是有生物学意义的细胞亚群。

4.6 常见问题与避坑

  • 过滤太凶:导致稀有细胞群丢失。多样本整合时,每个样本的过滤标准尽量一致,但可以保留5%的波动。
  • 标准化方法混用:不要在同一个项目中对部分样本用LogNormalize,对另一部分用SCTransform,除非你明确知道自己在做什么(比如用Seurat v4的整合流程可能同时使用两种)。
  • 忽视了doublet:10x数据中doublets占比通常1-8%,但在肿瘤样本中可能更高。我推荐用DoubletFinder或scrublet单独过滤,不要只靠nCount阈值。
  • 盲目重复ScaleData:如果你后面要用Harmony,通常不需要在ScaleData里回归batch,否则会过度矫正。我试过回归batch后整合效果反而变差。

好了,这一章的内容就这些。质量控制做好了,后面的降维聚类才能站得住脚。希望这些经验能帮你少走弯路。