4. ComBat 的数学原理(一):模型设定

说白了,ComBat 的数学原理并不复杂。它的核心就是一个线性混合模型。我在刚接触这个工具时,总觉得要理解它得啃一堆统计学教材。后来发现,你只要抓住它假设了什么、拆解了什么,就能明白它为什么能校正批次效应。

这一章,我们先不讲怎么算,先讲模型是怎么设定的。

4.1 为什么要假定正态分布?

你可能会问:基因表达数据凭什么一定要服从正态分布?

嗯,这里要注意。ComBat 不是要求原始数据是正态分布,而是假定在校正后、在给定条件下,表达量的残差服从正态分布。这其实是线性混合模型的常规操作。

  • 空间转录组的基因表达值是连续型数值(UMI 计数或 log-normalized 值)。
  • 线性模型天然假设误差项服从正态分布(高斯分布)。
  • ComBat 用最大似然估计(MLE)来求解参数,而 MLE 在高斯假设下计算最方便。

我曾经遇到过一个项目,用户直接用原始 UMI 计数值跑 ComBat,结果校正效果很差。后来我让他先做 log 归一化,让数据分布更接近正态,效果立刻就对了。所以,预处理阶段一定要让数据“看起来”像正态分布。

我的经验:归一化后的基因表达值,如果直方图偏态严重,可以先做 log2(x+1) 变换。不要让数据带着厚尾巴硬跑 ComBat。

4.2 模型公式拆解

ComBat 的模型设定长这样:

Y_{ijg} = α_g + X_i β_g + γ_{ig} + δ_{ig} ε_{ijg}

这个公式,说白了,就是把观察到的基因表达值 Y 拆成了几部分。我们来一个一个看:

符号 含义 类型
Y_{ijg} 第 i 批次、第 j 样本、第 g 基因的表达值 观测值
α_g 基因 g 在所有批次中的总体均值 固定效应
X_i β_g 生物学协变量(如细胞类型、处理条件)的影响 固定效应
γ_{ig} 批次 i 对基因 g 的加性偏差(Additive Batch Effect) 随机效应
δ_{ig} 批次 i 对基因 g 的乘性偏差(Multiplicative Batch Effect) 随机效应
ε_{ijg} 随机误差,服从 N(0, σ²_g) 误差项

我个人习惯把这个公式记作:Y = 基准均值 + 生物学变异 + 批次加性偏移 + 批次乘性缩放 * 随机噪声。

你想想看,如果没有批次效应,模型会退化成简单的线性回归:

Y_{ijg} = α_g + X_i β_g + ε_{ijg}

ComBat 就是多引入了两个项来吸收批次带来的偏差和方差变化。

4.3 加性效应 vs 乘性效应

这里我想重点讲一下 γ 和 δ 的区别。

  • γ(加性效应):某个批次的基因表达整体偏高或偏低。比如批次 A 的测序深度不够,所有基因的表达量都偏低了一个常数。这就是加性偏差。
  • δ(乘性效应):某个批次的基因表达波动更大或更小。比如批次 B 的技术噪声更大,导致基因表达的方差整体被放大了。这就是乘性偏差。

我在项目中遇到过这样的情况:两个批次的数据均值一致,但合并后方差突然变大,聚类效果很糟糕。这就是典型的 δ 问题。ComBat 能同时处理这两个问题,这也是它比简单的均值中心化(只处理 γ)更好用的原因。

避坑指南:我曾经只用了 ComBat 的默认参数(只估计 γ),忽略了 δ 的调整。结果虽然均值对齐了,但方差差异依然存在,导致下游分析假阳性率偏高。一定要确认你的场景是否需要调整 δ(即 par.prior=FALSE 的情况)。

4.4 随机效应的假定

ComBat 把批次效应 γ_{ig} 和 δ_{ig} 当作随机效应,而不是固定效应。这意味着模型假设:

  • 每个批次的 γ 是从同一个分布中随机抽取的。典型假设是 γ_{ig} ~ N(γ_g, τ²_g)。
  • δ_{ig} 通常从逆伽马分布中抽取,保证方差为正。

为什么会这样?因为批次是随机因素——你重复做一次实验,批次效应是随机出现的,不是刻意设计的。用随机效应来处理,可以更自然地推广到新批次的数据。

我记得在空间转录组项目中,我们经常有 3-5 个切片批次。如果把批次当作固定效应去拟合,参数会爆炸。用随机效应,模型更简洁,泛化能力也更强。

4.5 模型的可识别性

任何线性混合模型都面临一个基本问题:我们怎么确保拆出来的项是合理的,不会互相混淆?

举个例子,如果批次效应和生物学效应高度相关,模型就可能分不清哪部分是批次、哪部分是生物学真实差异。

ComBat 的解决方案是:

  1. 先用固定效应部分(α + Xβ)拟合生物学变异。
  2. 再从残差中估计批次效应 (γ, δ)。
  3. 最后用最大似然迭代优化所有参数。

这样的两步策略,在一定程度上缓解了可识别性问题。但并不是万能的。如果某一生物学变量(比如疾病组)恰好全部在同一个批次中,那模型会很难分离。这就是所谓的 confounded batch design。

核心要点:ComBat 的模型假定生物学变异和批次效应是可分离的。如果你的实验设计把条件与批次完全混在一起(如 Batch 1 = 对照组,Batch 2 = 处理组),ComBat 会混淆,甚至可能移除真实的生物学信号。

4.6 本章小结:模型设定的骨架

来,我们梳理一下 ComBat 模型设定的核心骨架。这些就是你理解后面推导过程的基石。

  • 基因表达 = 生物学信号 + 批次噪声
  • 批次噪声拆为加性偏移和乘性缩放
  • 假设残差符合正态分布
  • 批次效应视为随机效应
  • 生物学协变量可以是连续的或分类的

好吧,模型已经搭好了。下面是这一章的框架图,你可以直观地看到各个部分之间的关系。

ComBat 模型设定框架 Y = 观测表达值 = α + Xβ (生物学信号) γ (加性偏移) δ (乘性缩放) ε ~ N(0, σ²) 关键假设:生物学效应与批次效应可分离 加性偏移影响均值,乘性缩放影响方差,误差项服从正态分布

这张图把模型设定的四个部分串了起来:观测值 Y 被拆解成生物学信号、加性批次偏移、乘性批次缩放和随机误差。记住,γ 和 δ 是随机效应,ε 是误差项。α + Xβ 是固定效应部分。

模型设定到这里就讲完了。后面我们会基于这个设定,推导 ComBat 是怎么估计这些参数的,以及怎么把批次效应从数据中去掉。