第二章 SPARK方法背景:经典空间可变基因检测方法回顾,SPARK的提出动机与核心创新点
好,咱们接着聊。上一章我大致讲了空间转录组学到底在干什么,你可能会想:“数据拿到手了,然后呢?怎么从中找到那些真正有空间表达模式的基因?”
没错,这就是咱们这一章的核心——空间可变基因(SVG)检测。
说白了,就是要在成千上万个基因里,揪出那些表达量不是随机分布、而是跟着空间位置走的那一批。它们才可能是决定组织区域功能的关键。
一、经典SVG检测方法回顾
在SPARK出现之前,大家是怎么干这活的呢?我记得我最早接触这类数据时,其实就两种主流思路:
- 趋势检验(Trend-based):假设基因表达沿着某个空间轴(比如从皮层表层到深层)线性上升或下降。
- 方差检验(Variance-based):检查基因在不同空间位置上的表达波动是否显著大于随机噪声。
举个例子,你可能会看到这种经典方法对比表:
| 方法类别 | 核心原理 | 典型代表 | 我遇到的坑 |
|---|---|---|---|
| 趋势检验 | 回归表达量 vs 空间坐标 | 线性模型+ANOVA | 只能捡出单调变化的基因,很多空间热点发现不了 |
| 方差检验 | 按空间区域分组再比较方差 | Levene检验、Bartlett检验 | 分组边界是人为定的,不同切法结果差异很大 |
| 空间自相关检验 | 计算空间邻域内的表达相关性 | Moran's I、Geary's C | Moran's I我用了好几次才发现它对稀疏导出的离群点极度敏感 |
这里重点提一下 Moran's I。它是空间统计学的老牌指标,基本思路是:
如果某个基因在高表达区域附近还是高表达,或者在低表达区域附近还是低表达,那它就具有正空间自相关,也就是我们说的“空间聚集性”。
但经典Moran's I有一个很大的局限性:它假设空间关系是线性且平稳的。你在真实组织切片里试试看?
嗯,很多基因的表达模式根本不是线性——你可能看到一个基因在某个特定区域形成一个小“热点”,周围一圈迅速衰减。这种模式,传统Moran's I基本检测不出来。
# 举个经典的Moran's I计算片段(R语言伪代码)
# 千万别直接跑这段,我只是示意
# 构建空间权重矩阵 W
W <- build_adjacency_matrix(coordinates, k_neighbors=6)
# 计算全局Moran's I
I <- (n / sum(W)) * ( t(z) %*% W %*% z ) / ( t(z) %*% z )
二、旧方法的痛点在哪里?
我做过大概五六个空间转录组项目,对经典方法的感受就一句话:用起来很顺手,但结果经常翻车。
翻车集中在三个地方:
- 数据稀疏性问题:空间转录组数据本质上是非常稀疏的——很多spot只捕获到几千甚至几百个UMI。经典模型假设数据服从正态分布,这根本对不上。
- 无法处理多样本整合:当你同时分析多张切片时,传统的检验方法只能一张一张跑,然后手动比P值。这种做法容易引入批次效应,而且没法做联合推断。
- 忽略局部空间结构:很多基因的表达模式是“局部的”——比如只在某个细胞带里高表达,范围只有几十微米。传统Moran's I全局指标很容易忽略这种细微特征。
我曾经在分析小鼠脑皮层数据时,用Moran's I跑出来一个基因的P值接近1,怎么调参数都不显著。后来用SPARK一试,才发现它在某个薄层有极其显著的局部热点。那个基因后来被证明跟该层的突触形成有关。所以,选对方法真的很关键。
三、SPARK的提出动机
2019年,复旦大学的团队(我猜你们可能也听说过这个工作)在Nature Communications上发表了SPARK。它的动机非常直接——上面那些问题能不能一次解决?
你想想看,一个理想的SVG检测方法应该做到:
- 不需要假设表达数据服从正态分布。
- 能够自适应地捕捉局部和全局的空间模式。
- 可以并行处理成千上万个基因,不需要每张切片都手工调参。
- 统计推断要稳健,对离群点和稀疏表达不敏感。
这才是SPARK登上舞台的背景。它不是凭空想出来的,而是被“逼”出来的——经典方法已经严重跟不上空间转录组数据的高通量、高稀疏度特性。
四、SPARK核心创新点
SPARK到底「新」在哪?我把它拆成三个核心创新,你记住这三点就抓住了精髓:
| 创新点 | 经典方法的问题 | SPARK的解决办法 |
|---|---|---|
| 1. 基于广义线性模型(GLM) | 假设数据正态,不适用于稀疏计数 | 直接对原始计数建模,使用泊松或负二项分布 |
| 2. 多核高斯过程 | 只用一个线性空间核,错过复杂模式 | 引入多组高斯过程核(线性、指数、周期等)组合建模 |
| 3. 置换检验+SCA校正 | 近似P值误差大、多重比较控制弱 | 用空间秩置换生成零分布,SCA控制FDR |
我个人的习惯是:先跑一遍默认参数,然后用SPARK自带的诊断图去看哪些核被激活了。如果看到多个核系数都不为零,说明这个基因的空间模式很“复杂”——不是简单的一个椭圆热点能描述的。
这里有一个公式层面的对比,你可以直观感受一下SPARK和传统方法在建模思路上的区别:
# 传统Moran's I检验公式(简化)
I = (Z^T W Z) / (Z^T Z)
# 衡量的是Z在空间邻域W上的加权自相关
# SPARK基于GLM的建模思路(简化)
log(E[Y_i]) = β0 + sum( f_k(x_i, y_i) )
# f_k 是第k个高斯过程核函数(共K个)
# 然后通过统计检验H0: 所有空间核系数为零
看出来了吗?SPARK把空间模式这个问题从「一个相关性系数」扩展成了「一组基函数的组合」。这意味着它可以同时检测线性梯度、斑块状热点、周期性条纹——而传统方法一次只能试一种。
五、SPARK的不足和后续改进
不过我得说句公道话。SPARK也不是完美的——它计算量特别大,尤其在spot数量超过5000的时候。我当时跑一个万级spot的数据集,单是构建那套多核协方差矩阵就花了我快两个小时。
所以后来(2021年)他们又推出了SPARK-X——一个基于协方差快速近似的方法,速度提升了几十倍。这其实也符合一个优秀工具的演进逻辑:先做对,再做快。
这里要提醒一点:SPARK-X虽然快,但它牺牲了对复杂空间模式的刻画能力。如果你的研究目标是发现那些非常细微的局部基因热点,我依然建议你用原始SPARK——哪怕多等一会儿,结果的精细度是完全不一样的。
六、本章知识结构图
下面这张SVG图可以帮你理清本章的核心脉络:经典方法的局限如何直接引出SPARK的创新思路。
这一章咱们把经典方法的问题和SPARK的动机说清楚了。下一个章节,我会带你深入SPARK的数学原理和算法流程——包括那套核心的多核高斯过程组合是怎么构建的,以及置换检验的零分布是如何精确逼近的。准备好了吗?