4. 走进 Combat 的数学内核:位置、尺度与贝叶斯魔法
好,我们开始啃硬骨头了。ComBat 的核心,说白了就三件事:找到批次间的差异、量化这个差异、然后把它消除掉。数学上,它把批次效应拆成了两个部分:一个是“整体偏移”,就是位置参数;另一个是“波动幅度”,就是尺度参数。
我个人习惯把这套流程想象成调音师的工作。一台钢琴(你的数据),在不同音乐厅(不同批次)里,音准和共鸣都不一样。调音师得先听出每个厅的“偏移”和“混响”,再统一调回标准。ComBat 做的就是这个活儿。
4.1 位置参数(μ)与尺度参数(δ):批次效应的两个维度
在 ComBat 的数学世界里,我们把每个特征(比如一个蛋白质的表达强度)拆开来建模。它的经典模型长这样:
Y_{ijg} = α_g + Xβ_g + γ_{ig} + δ_{ig}ε_{ijg}
我来一个个拆解给你看:
- Y_{ijg}: 第 i 个批次、第 j 个样本、第 g 个特征的原始表达值。这就是你拿到的原始数据。
- α_g: 特征 g 的全局基线水平。相当于钢琴的中音 C 的基准频率。
- Xβ_g: 生物学协变量的影响矩阵。比如疾病组 vs 对照组,这部分差异是我们要保留的,不能给“校掉”了。
- γ_{ig}: 批次 i 对特征 g 的 位置偏移 (location shift)。这就是我前面说的“音准偏差”。
- δ_{ig}: 批次 i 对特征 g 的 尺度缩放 (scale adjustment)。这是“混响大小”。
- ε_{ijg}: 随机误差项。通常假设它服从标准正态分布 N(0, σ_g²)。
你看,γ 负责把数据整体拉高或拉低,δ 负责把数据的离散程度放大或缩小。校准的目标就是:估计出 γ 和 δ,然后把它们从原始数据中“剥离”出去。
校正后的数据 Z_{ijg} = (Y_{ijg} - α_g - Xβ_g - γ*_{ig}) / δ*_{ig}
这里的 γ* 和 δ* 就是我们估计出来的批次效应参数。除一下 δ,别忘了。
4.2 为什么用经验贝叶斯?
你可能要问了:“这么简单,直接拿每个批次的均值和方差算 γ 和 δ 不就行了?” 嗯,我一开始也是这么想的。
但现实很骨感。质谱数据有个特点:特征多(成千上万个蛋白/肽段),批次少(通常只有两三个批次)。你直接用每个批次的数据去估算某个特征的 δ,会发现方差极大,估计极其不稳定。尤其是一些表达量低的特征,信噪比本来就差,估计出的 δ 可能直接炸掉,导致校正后数据出现极端值。
这就是 ComBat 的高明之处——它引入了经验贝叶斯 (Empirical Bayes, EB) 框架。
说白了,EB 就是“借用力量”(borrowing strength)。在估算某一个特征的 γ 和 δ 时,它会偷看其他成千上万个特征的信息,利用全局规律来约束单个特征的估计值,让结果更稳健。我遇到过一些项目,不用 EB 直接做位置-尺度校正,结果校正后的 PCA 图上,批次效应反而变得更乱了。这坑我踩过,所以印象很深。
经验贝叶斯的流程可以抽象为下图,我习惯把它看作一个“闭环反馈”系统:
4.3 先验分布怎么设定?——数学家的“押注”
好,现在到了 EB 框架最关键的一步:先验分布。ComBat 的作者为 γ 和 δ² 选择了 共轭先验。你可能会问,为什么选共轭的?说白了,就是方便计算后验分布,能用数学公式直接算出来,不用跑 MCMC 模拟那么费劲。
具体设定如下:
| 参数 | 先验分布 | 超参数 | 直观理解 |
|---|---|---|---|
| 位置参数 γ | 正态分布 N(μ_γ, σ²_γ) | μ_γ, σ²_γ | 假设大多数批次间的整体偏移集中在某个均值附近,不会偏离太离谱。 |
| 尺度参数 δ² | 逆伽马分布 InvGamma(λ, θ) | λ (形状), θ (尺度) | 假设大多数特征的方差缩放因子 δ² 服从一个偏态分布,不会太大也不会太小。 |
这里有两个细节值得注意:
- 超参数的估计:μ_γ、σ²_γ、λ、θ 这些被叫做“超参数”,它们本身也是从数据里估算出来的。怎么估?就是用我们前面拿到的那一堆粗糙的矩估计值 (γ̂, δ̂) 去拟合。这就是“经验”贝叶斯这个名字的由来——先验不是拍脑门定的,是从经验数据里学出来的。
- 为什么用逆伽马:δ² 是方差,它只能是正数。正态分布不适合。逆伽马分布是定义在正数上的,而且它是伽马分布共轭于正态分布方差参数的先验。选它,数学上最干净,解析解最优美。嗯,这里要注意,ComBat 论文里假设的是 δ² 服从逆伽马,而不是 δ。我早期看代码时在这里卡了很久。
有了这些先验,ComBat 就能计算出每个特征 γ 和 δ² 的后验分布。然后取后验分布的期望或中位数,作为最终的 γ* 和 δ*。这个“收缩”过程,就是经验贝叶斯的核心魔法——它用全局信息支撑了个体估计,解决了批次少、特征多的统计难题。