空间转录组学与批次效应概述
做空间转录组分析,咱们得先搞清楚手里拿的是什么数据,以及最大的坑在哪里。我个人习惯把理解数据特点放在第一步——这就像修车,不知道发动机长啥样,上来就拧螺丝,大概率要出事。
空间转录组数据长什么样?
说白了,空间转录组就是在传统转录组的基础上,加了个“位置信息”。传统RNA-seq告诉你每个样本里基因表达量是多少,但空间组学告诉你:这个基因在组织哪个区域、哪个细胞层里高表达。
数据本身是两个层次的组合:
- 基因表达矩阵:行是基因,列是捕获点(spot)或细胞。跟普通单细胞数据类似,稀疏矩阵,零膨胀严重。
- 空间坐标:每个spot都有一个(x, y)坐标,或者更精确的组织学坐标。这是空间组学独有的东西。
举个例子,10x Visium的数据结构大致这样:
# 表达矩阵(稀疏格式)
spot_1 spot_2 spot_3
GENE_A 12 0 5
GENE_B 0 8 1
# 空间坐标
spot_1 x=120 y=340
spot_2 x=150 y=300
spot_3 x=100 y=380
我再强调一点:空间转录组数据往往有空间自相关性。相邻的spot,基因表达谱更相似。这是跟普通单细胞数据最大的区别,也是后面做校正时要特别保护的东西。
批次效应——到底是个什么东西?
批次效应,就是你在不同时间、不同实验条件、不同操作人员下跑出来的数据,会带上“实验标签”而非“生物学标签”。
打个比方:你今天做的RNA提取和下周做的同一批组织,表达量大概率不一样。这不是生物差异,是技术差异。
在我参与的多个空间组学项目中,遇到过几种典型情况:
- 不同切片:同一组织块,不同切片深度,批次效应明显
- 不同捕获芯片:同一组织,用不同lot的芯片,捕获效率不同
- 不同测序批次:建库时间不同,测序深度不一致
- 不同平台:Visium vs. Slide-seq vs. MERFISH,那差异更大
为什么会这样?你想想看,每个步骤都有变量:组织处理时间、反转录效率、扩增循环数、测序仪状态...随便哪个小变化,都能在你的数据里留下“指纹”。
在空间数据中,批次效应怎么表现?
这里有个重点:空间数据的批次效应,比普通单细胞数据更麻烦。原因很简单——多了一个空间维度。
我归纳了几种常见的表现方式:
| 表现类型 | 具体现象 | 影响程度 |
|---|---|---|
| 全局偏移 | 整个批次的表达量整体偏高或偏低 | 中 |
| 空间噪声 | 空间模式(如层状结构)被噪声淹没 | 高 |
| 结构扭曲 | 批次间的空间结构无法对齐或相互矛盾 | 极高 |
| 聚类偏差 | 相同组织区域被划到不同聚类中 | 高 |
你可能会问:怎么判断数据里有没有批次效应?我一般用两种方法快速验一下:
- t-SNE/UMAP可视化:按批次上色,如果批次分群明显,那基本中招了
- 空间表达模式对比:选几个已知的组织标记基因,看空间分布是否在不同批次间一致
举个简单的代码示例,检测批次效应:
# R语言伪代码示例
library(Seurat)
# 合并两个批次的数据
merged_data <- merge(batch1, batch2)
# 标准化后做PCA
merged_data <- NormalizeData(merged_data) %>%
FindVariableFeatures() %>%
ScaleData() %>%
RunPCA()
# 按批次着色看PCA
DimPlot(merged_data, group.by = "batch", reduction = "pca")
如果看到PCA图上两个批次明显堆在两个角落,那就要认真处理了。
本章核心逻辑:一张图说明白
下面这张图,是我做项目时自己画的一张思维框架。它把本章的核心概念串了起来,我个人觉得挺有用:
好了,这一章我们把基本概念和痛点理清了。你记住三点就好:空间数据有位置信息、批次效应无处不在、空间校正比普通单细胞校正更复杂。后面所有方法,都围绕着怎么解决这三个问题展开。