3. 组学数据预处理与标准化工程
多组学药物重定位分析的第一步,不是建模,而是把来自转录组、蛋白质组、代谢组等不同平台的原始测量值,转换成彼此可比、可联合分析的数值空间。不同平台产生的数据在量纲、动态范围、缺失机制和批次效应上差异极大:RNA-seq 的原始 read count 受基因长度和测序深度双重影响,质谱蛋白质组的 LFQ 强度跨越 5~6 个数量级,代谢组峰强度则同时受离子化效率和上样量波动影响。如果直接把这些数值拼接进同一个特征矩阵,后续的相似性度量、网络推断和重定位打分都会被量纲主导,得到看似显著却不可复现的结论。本节围绕归一化、对数转换、缺失值插补、离群样本检测四个核心环节,给出可落地的处理逻辑与自动化脚本设计思路。
一、归一化:先消除技术性尺度差异
转录组层面最常用的是 TPM 与 FPKM。两者都先按基因长度归一化,再按测序深度归一化,区别在于归一化的顺序:FPKM 先除以基因长度(kb)再除以总测序深度(百万 reads),TPM 则先除以基因长度得到 rate,再除以所有 rate 之和并乘以 10⁶。这一顺序差异导致同一基因在两种度量下的数值不同,但 TPM 的每个样本总和恒为 10⁶,样本间可比性更好,因此跨样本比较优先使用 TPM。示例:某基因 count 为 2000,长度 2 kb,样本总 count 为 4×10⁷,则 FPKM ≈ (2000/2)/(40) = 25;若该样本所有基因 rate 之和为 8×10⁵,则 TPM ≈ (1000/8×10⁵)×10⁶ = 1250。数值不同,但排序关系一致。
蛋白质组 LFQ 强度通常先做 log2 转换,再按样本中位数或总强度归一化,以校正上样量和离子化效率差异。代谢组峰强度则常用中位数归一化、概率商归一化(PQN)或内标归一化。PQN 的核心是:先计算每个代谢物在所有样本中的中位数作为参考谱,再对每个样本求其与参考谱的比值中位数作为校正因子,最后用该因子除原始强度。相比简单中位数归一化,PQN 对样本中大量不变代谢物更稳健。
二、对数转换:压缩动态范围、稳定方差
对数转换不是可选项,而是多数组学数据的默认前置步骤。log2 转换能把乘性误差转为加性误差,使高丰度特征不再主导距离计算,同时让近似对数正态的分布更接近对称。转录组 TPM 通常做 log2(TPM+1),加 1 是为了避免零值取对数无定义;蛋白质组 LFQ 强度一般直接 log2,因为质谱强度本身已是正值且很少为零;代谢组峰强度在归一化后同样建议 log2 或 log10。需要注意:对数转换应在归一化之后、插补之前进行,否则插补值会被量纲扭曲。
三、缺失值插补:区分机制再选方法
缺失值处理的关键是先判断缺失机制。转录组中的零值多为真实低表达或未检出,属于“生物学零”;蛋白质组和代谢组中的缺失则常分为两类:完全随机缺失(MCAR)和低丰度导致的随机缺失(MNAR)。对 MNAR,简单用均值或中位数插补会系统性高估低丰度特征,推荐使用下限插补,例如用该特征最小观测值的 1/5 或全局最小值的 0.2 倍填充。对 MCAR,可用 KNN 或随机森林插补,利用特征间相关性恢复缺失值。实践中建议:缺失率 > 50% 的特征直接剔除;缺失率 20%~50% 的特征用下限插补并标记;缺失率 < 20% 的特征用 KNN 插补。所有插补决策必须记录在日志中,便于复现。
四、离群样本检测:多指标交叉判断
离群样本会严重拉偏后续的差异分析和网络推断。建议同时观察三类指标:一是样本间相关性热图,若某样本与其余样本的 Pearson 相关系数中位数低于 0.8,需警惕;二是 PCA 或 UMAP 投影,若某样本远离同类样本簇超过 3 倍四分位距,视为候选离群;三是层次聚类树,若某样本在很早就单独分叉,也提示异常。三类指标中至少两类同时报警,才判定为离群并考虑剔除。剔除前应回溯原始数据,确认是否为批次、降解或标注错误,而非真实生物学变异。
五、标准化流程自动化脚本设计
把上述步骤固化为脚本,是保证多组学重定位分析可复现的关键。脚本应遵循“配置驱动 + 分步执行 + 日志留痕”的原则。下面给出一个 Python 脚本骨架,使用 YAML 配置文件描述每个组学的处理参数,主流程按组学类型分派到对应处理函数。
# config.yaml
transcriptome:
input: "data/rna_counts.csv"
normalize: "tpm"
gene_length_col: "length"
log: "log2_tpm_plus1"
missing:
drop_threshold: 0.5
impute: "knn"
knn_k: 10
proteome:
input: "data/protein_lfq.csv"
normalize: "median"
log: "log2"
missing:
drop_threshold: 0.5
impute: "min_factor"
min_factor: 0.2
metabolome:
input: "data/metab_peak.csv"
normalize: "pqn"
log: "log2"
missing:
drop_threshold: 0.5
impute: "knn"
knn_k: 5
outlier:
corr_threshold: 0.8
pca_mad: 3
min_votes: 2
主脚本读取配置后,依次执行:加载矩阵 → 按组学类型归一化 → 对数转换 → 缺失率过滤与插补 → 合并为统一特征矩阵 → 离群样本检测 → 输出标准化矩阵与日志。每一步都写入 preprocess.log,记录样本数、特征数、缺失率、插补方法、离群判定结果。这样,当后续重定位结果出现异常时,可以快速定位是归一化参数、插补策略还是样本剔除导致的。
random_state=42),并对 KNN 插补和随机森林插补保留插补前后分布对比图,便于人工复核。完成上述流程后,得到的标准化矩阵应满足:各样本整体分布对齐、特征动态范围压缩、缺失值有明确处理记录、离群样本有判定依据。这份矩阵才是后续差异分析、共表达网络和药物重定位打分的可靠输入。工程上,建议把该脚本封装为可配置的 CLI 工具,支持 --config 指定配置文件、--dry-run 仅检查数据质量、--report 输出 HTML 质量报告,使预处理环节从一次性代码升级为可复用、可审计的标准化组件。