4. 数据预处理与批次效应可视化

批次效应控制的第一步不是建模,而是让数据“可比”。如果不同批次之间的样本在测序深度、文库大小、缺失模式或整体分布上存在系统性差异,那么后续无论用 ComBat、limma 还是 RUV,都可能把技术偏差误当成生物学信号。本节围绕三个预处理动作——归一化、标准化、缺失值处理——以及三类降维诊断图——PCA、t-SNE、UMAP——说明如何把原始矩阵整理成可分析、可诊断、可复现的输入。

一、归一化:先消除“量”的差异

归一化的目标是消除样本间因测序深度、总计数或文库大小不同造成的整体尺度差异,而不是消除基因间的生物学差异。以 RNA-seq 计数矩阵为例,样本 A 总计数 2 000 万,样本 B 总计数 4 000 万,同一基因在 A 中计数 100、B 中计数 200,直接比较会误判为 B 上调。常用做法包括 CPM、TPM、FPKM 和 DESeq2 的 median-of-ratios。CPM 计算简单:

CPM_ij = (count_ij / total_count_i) × 1e6
# 示例:样本 A 总计数 20,000,000,基因 g 计数 100
# CPM = 100 / 20,000,000 × 1e6 = 5.0

CPM 适合初步查看,但不适合差异表达分析,因为它没有考虑基因长度和组成偏差。DESeq2 的 size factor 通过中位数比值估计,对高表达基因的组成变化更稳健。若数据已经过 TPM 或 FPKM 归一化,再送入以计数为输入的模型,会破坏其方差假设,因此必须确认输入类型与模型要求一致。

二、标准化:让样本间分布形状可比

归一化解决“总量”问题,标准化解决“分布形状”问题。常见方法有 Z-score 标准化和分位数标准化。Z-score 对每个基因在所有样本上做中心化和缩放:

z_ij = (x_ij - mean_i) / sd_i
# 示例:基因 g 在 6 个样本中表达为 2,4,4,4,5,9
# mean = 4.67, sd ≈ 2.34
# 样本 1 的 z = (2 - 4.67) / 2.34 ≈ -1.14

Z-score 后每个基因均值为 0、标准差为 1,适合 PCA 和聚类,但会放大低表达基因的噪声。分位数标准化则强制所有样本的分位数分布一致,适合芯片数据或需要跨样本对齐分布的场景。选择依据是:若关注样本间整体分布差异,用分位数标准化;若关注基因间相对变化,用 Z-score。

三、缺失值处理:先判断机制,再决定策略

缺失值不是“填上就行”。首先要区分完全随机缺失、随机缺失和非随机缺失。质谱数据中低丰度蛋白的缺失常属于非随机缺失,直接填 0 会引入假阴性。处理策略包括:删除缺失率超过 30% 的特征;对缺失率低的特征用 KNN 或 missForest 填补;对非随机缺失,可保留缺失指示变量,让模型学习“缺失”本身的信息。示例判断规则:

  • 缺失率 > 30%:删除该特征,并记录删除原因。
  • 缺失率 5%~30%:用 KNN(k=5)或中位数填补,并做敏感性分析。
  • 缺失率 < 5%:可直接删除缺失样本,或均值填补。
  • 已知为非随机缺失:保留缺失指示列,不强行填补。
注意:填补会改变方差结构。若后续做 PCA,填补后的数据可能让批次间距离被压缩,因此建议在填补前后各做一次降维诊断,比较样本分布是否发生明显偏移。

四、降维可视化诊断:PCA、t-SNE、UMAP 的分工

预处理是否有效,不能只看数值,要看样本在低维空间中的分布。PCA 是线性方法,保留全局方差结构,适合判断批次是否为主要变异来源。若 PCA 第一主成分将样本按批次分开,说明批次效应显著;若按生物学分组分开,则说明信号保留良好。t-SNE 和 UMAP 是非线性方法,擅长展示局部邻域结构,适合观察样本是否形成连续梯度或离散簇,但不能直接解释簇间距离。

实际操作中,建议按以下顺序诊断:先对归一化后的数据做 PCA,查看 PC1/PC2 的方差贡献率和样本分布;若批次与 PC1 高度相关,再检查是否需要 ComBat 或 limma removeBatchEffect;校正后再做一次 PCA,确认批次分离减弱而生物学分组仍可分辨。t-SNE 和 UMAP 用于补充观察局部结构,参数需固定并记录:t-SNE 的 perplexity 可设为 5~50,UMAP 的 n_neighbors 可设为 5~50、min_dist 设为 0.1~0.5。不同参数会改变图形,因此必须报告参数。

数据预处理与批次效应降维诊断流程 原始表达矩阵 基因 × 样本 含批次标签 归一化 CPM / TPM / size factor 消除测序深度差异 标准化 Z-score / 分位数 对齐样本分布形状 缺失值处理 删除 / KNN / 指示变量 先判断缺失机制 预处理后矩阵(可分析输入) 样本 × 特征,批次标签保留 PCA(线性) 看全局方差结构 PC1 是否按批次分离 方差贡献率 > 30% 需关注 蓝=批次1,橙=批次2 t-SNE(非线性) 看局部邻域结构 perplexity 5~50 簇间距离不可直接解释 绿=批次1,紫=批次2 UMAP(非线性) 看连续梯度与离散簇 n_neighbors 5~50 min_dist 0.1~0.5 粉=批次1,青=批次2 若批次仍分离 → 校正后重做 PCA 验证

图中展示了从原始矩阵到降维诊断的完整链路:归一化、标准化、缺失值处理三步并行作用于数据,输出预处理后矩阵,再分别进入 PCA、t-SNE、UMAP 三种诊断视角。PCA 用于判断批次是否主导全局方差,t-SNE 和 UMAP 用于观察局部结构是否被批次撕裂。若校正后 PCA 中批次仍明显分离,说明校正不足;若生物学分组消失,说明校正过度。实际项目中,建议把每次诊断的 PC1/PC2 方差贡献率、样本分组标签和降维参数一并记录,形成可追溯的质控日志。

一个可复用的判断顺序:先看 PCA 的 PC1 是否与批次高度相关;再看校正后 PCA 中批次是否混合、生物学分组是否保留;最后用 t-SNE/UMAP 检查局部结构是否出现异常断裂或过度聚集。三步都通过,才认为预处理与批次校正达到可分析状态。