空间转录组分析¶
1. 一句话说明¶
空间转录组(Spatial Transcriptomics)在保留组织空间位置信息的前提下测量基因表达——不只知道基因表达了多少,还知道在组织的哪个位置表达。白话:如果单细胞测序是"拆掉房子后数每块砖的颜色",空间转录组就是"不拆房子直接看每个位置用的什么砖"。
2. 什么是空间转录组学¶
2.1 核心思想¶
传统 RNA-seq(bulk 或单细胞)都需要把组织打散:细胞从原来的位置上被分离下来,你知道了每个细胞的基因表达,但丢失了一个关键信息——这个细胞原来在组织的哪个位置。
空间转录组解决的就是这个问题:
传统 scRNA-seq:
组织 → 消化打散 → 单个细胞 → 测序
结果:知道每个细胞表达了什么基因
丢失:细胞原来在组织里的位置
白话:把拼图打散后数每块拼图的颜色,但不知道原来拼在哪里
空间转录组:
组织切片 → 原位捕获/检测 → 带坐标的表达量
结果:知道每个位置表达了什么基因
保留:空间坐标信息
白话:直接看拼好的拼图,每个位置的颜色和图案都清清楚楚
2.2 白话类比¶
想象你是一个城市规划师:
- Bulk RNA-seq:把全城居民混在一起统计——"这个城市平均收入 5 万"
- scRNA-seq:给每个居民发问卷——"知道了每个人的收入,但不知道他住哪个区"
- 空间转录组:在城市地图上标注——"CBD 区域居民平均收入 10 万,郊区 3 万,学区房附近 7 万"
这个"位置信息"为什么重要?因为生物学中很多功能依赖于空间结构: - 肿瘤边缘和核心的基因表达完全不同 - 免疫细胞在肿瘤周围形成"包围圈"还是被排斥在外,决定了免疫治疗是否有效 - 大脑不同区域有不同功能,基因表达有严格的空间模式
3. 空间转录组 vs 单细胞 RNA-seq¶
| 对比维度 | scRNA-seq | 空间转录组 |
|---|---|---|
| 空间信息 | 丢失(组织被打散) | 保留(原位检测) |
| 分辨率 | 单细胞级别 | 因平台而异(spot 级 ~ 亚细胞级) |
| 通量 | 可检测数万细胞 | 取决于组织切片面积 |
| 检测基因数 | 全转录组(约 2 万基因) | 平台差异大(几百 ~ 全转录组) |
| 组织形态 | 丢失 | 可结合 H&E 染色图像 |
| 细胞类型鉴定 | 直接聚类标注 | 常需反卷积(deconvolution)辅助 |
| 成本 | 相对较低 | 较高(尤其 MERFISH 等) |
| 典型场景 | 细胞图谱构建、轨迹分析 | 组织微环境、空间基因表达模式 |
白话总结:scRNA-seq 和空间转录组是互补关系,不是替代关系。最强的研究设计是"scRNA-seq + 空间转录组"联合分析——先用 scRNA-seq 建立细胞类型参考,再用空间转录组把这些细胞类型"映射"回组织上。
4. 主流技术平台对比¶
4.1 四大主流平台¶
| 特征 | 10x Visium | Stereo-seq | MERFISH | Slide-seq |
|---|---|---|---|---|
| 开发者 | 10x Genomics | 华大智造(BGI) | 庄小威实验室/Vizgen | Macosko 实验室 |
| 原理 | 基于条形码的 mRNA 捕获 | DNA 纳米球阵列空间条形码 | 基于成像的荧光原位杂交 | 基于 DNA 条形码微珠阵列 |
| 空间分辨率 | 55 μm(spot)/ 2 μm(HD) | 500 nm(纳米级) | 亚细胞级(~100 nm) | 10 μm |
| 检测基因数 | 全转录组 | 全转录组 | 预设 panel(100-1000 基因) | 全转录组 |
| 覆盖面积 | 6.5×6.5 mm(标准)/ 更大(HD) | 可达 cm² 级别 | 较小(mm² 级) | 约 3 mm 直径 |
| 配套软件 | Space Ranger(v4.1) | SAW(STOmics) | MERSCOPE 分析平台 | 自定义流程 |
| 优势 | 成熟生态、易上手、文献多 | 超高分辨率、大面积、国产 | 单分子灵敏度、亚细胞分辨 | 高分辨率、全转录组 |
| 劣势 | 标准版分辨率较低(55 μm) | 数据量极大,分析门槛高 | 基因数有限、成本高 | 灵敏度偏低 |
| 适用场景 | 大多数空间转录组研究入门首选 | 大面积组织高分辨率成图 | 需要亚细胞精度的机制研究 | 全转录组高分辨率探索 |
4.2 技术原理白话版¶
基于捕获的方法(Visium / Stereo-seq / Slide-seq):
组织切片放在带"分子邮编"的载玻片上
→ 每个位置有独特的 DNA 条形码(就像邮编)
→ mRNA 从细胞里释放出来,被对应位置的条形码捕获
→ 测序后根据条形码知道每条 mRNA 来自哪个位置
白话:在地板上铺满带编号的胶纸,撒下来的彩珠粘在哪张纸上就记录那个编号
基于成像的方法(MERFISH):
用荧光探针直接在组织切片上标记目标 mRNA
→ 多轮杂交 + 拍照,用编码方案识别不同基因
→ 直接在图像上定位每条 mRNA 分子的坐标
白话:用不同颜色的荧光笔在组织上直接给不同基因画标记,拍照后就知道哪里有什么
4.3 Visium 与 Visium HD¶
10x Genomics 的 Visium 是目前使用最广泛的平台:
- Visium(标准版):每个 spot 直径 55 μm,spot 间距 100 μm,每个 spot 覆盖约 1-10 个细胞。因为分辨率不够单细胞级别,需要通过"反卷积"来推断每个 spot 里有哪些细胞类型。
- Visium HD:分辨率提升到 2 μm bins,可连续覆盖,接近单细胞分辨率。2023年底推出,数据量更大,分析流程也在迭代中。
5. 分析流程¶
5.1 标准分析管线¶
原始数据(FASTQ + 组织图像)
│
▼
┌──────────────────────────────────┐
│ Step 1: Space Ranger(10x 官方工具)│ ← 比对、定量、spot 定位
│ spaceranger count │
│ 输入: FASTQ + 组织图像 + 参考基因组│
│ 输出: filtered_feature_bc_matrix │
│ + spatial/ 文件夹 │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ Step 2: 加载数据到 Python/R │ ← Scanpy/Squidpy 读取
│ scanpy.read_visium() │
│ 生成 AnnData 对象 │
│ .obs = spot 元信息 │
│ .obsm['spatial'] = 空间坐标 │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ Step 3: 质控与预处理 │ ← 同 scRNA-seq 流程
│ 过滤低质量 spot │
│ 归一化 + log 转换 │
│ 高变基因筛选 │
│ PCA 降维 │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ Step 4: 空间可视化 │ ← Squidpy 核心功能
│ 在组织图像上叠加基因表达热图 │
│ sq.pl.spatial_scatter() │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ Step 5: 空间聚类 │ ← 考虑空间邻域
│ 构建空间邻接图 │
│ sq.gr.spatial_neighbors() │
│ Leiden/Louvain 聚类 │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ Step 6: 细胞类型反卷积 │ ← 推断 spot 内细胞组成
│ cell2location / RCTD / Tangram │
│ 需要 scRNA-seq 参考数据 │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ Step 7: 空间变异基因(SVG) │ ← 发现空间特异基因
│ sq.gr.spatial_autocorr() │
│ Moran's I / Geary's C 统计量 │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ Step 8: 细胞通讯分析 │ ← 空间配体-受体互作
│ CellChat / COMMOT / squidpy │
│ sq.gr.ligrec() │
└──────────────────────────────────┘
5.2 每步核心概念白话解释¶
| 步骤 | 做什么 | 白话 |
|---|---|---|
| Space Ranger | 把原始测序数据对齐到参考基因组,生成表达矩阵 + 空间坐标 | 相当于把快递包裹拆开、清点货物、记录每个货物的收件地址 |
| 数据加载 | 读取 Space Ranger 输出,构建 AnnData 对象 | 把清点好的货物清单导入 Excel 表格 |
| 质控预处理 | 过滤低质量 spot,标准化数据 | 去掉空包裹和破损货物,统一计量单位 |
| 空间可视化 | 在组织切片图上展示基因表达 | 在城市地图上画热力图——哪里"热"表示基因高表达 |
| 空间聚类 | 根据表达谱 + 空间位置对 spot 分群 | 在地图上划分"商业区""居民区""工业区" |
| 反卷积 | 推断每个 spot(可能含多个细胞)里各细胞类型的比例 | 一个房间里有 3 个人说话,分辨出谁说了什么 |
| 空间变异基因 | 找出在空间上有显著分布模式的基因 | 找出"只在城市东边开的连锁店"——有明显地域偏好的基因 |
| 细胞通讯 | 分析相邻细胞/spot 之间的信号传递 | 看邻居之间的"聊天记录"——谁发了什么信号,谁接收了 |
6. 常用工具速览¶
6.1 Python 工具¶
| 工具 | 最新版本 | 功能 | 适用场景 |
|---|---|---|---|
| Squidpy | v1.8.1 | 空间统计、邻域分析、配体-受体、图像分析 | 空间转录组一站式分析(首推) |
| Scanpy | v1.12.1 | 数据加载、质控、降维、聚类 | 基础预处理(Squidpy 的底层) |
| SpatialData | v0.7.2 | 统一空间组学数据格式 | 多平台数据整合 |
| cell2location | v0.1.5 | 基于贝叶斯的细胞类型反卷积 | 从 spot 推断细胞类型组成(高精度) |
| Tangram | v1.0.4 | 将 scRNA-seq 数据映射到空间坐标 | scRNA-seq 与空间数据整合 |
| stLearn | v1.3.0 | 空间轨迹分析、空间聚类 | 空间发育轨迹推断 |
| COMMOT | - | 空间细胞通讯(基于最优传输) | 空间配体-受体互作分析 |
| AnnData | v0.12.11 | 数据存储格式 | 所有 scverse 生态的数据容器 |
6.2 R 工具¶
| 工具 | 最新版本 | 功能 | 适用场景 |
|---|---|---|---|
| Giotto | v4.0.0 | 综合空间分析框架(R) | R 用户的一站式空间分析 |
| Seurat (v5) | v5.x | 空间数据整合、多模态分析 | 已有 Seurat 单细胞流程的团队 |
| spacexr (RCTD) | 持续更新 | Robust Cell Type Decomposition | R 生态中最常用的反卷积方法 |
| STUtility | v1.x | Visium 数据可视化与处理 | 可视化和 3D 重建 |
| CellChat | v2.x | 细胞通讯推断(支持空间模式) | 配体-受体互作分析 |
6.3 上游工具¶
| 工具 | 最新版本 | 功能 |
|---|---|---|
| Space Ranger | v4.1 | 10x Visium 官方上游分析流程(比对 + 定量) |
| SAW | - | 华大 Stereo-seq 官方分析流程 |
| Loupe Browser | v8.x | 10x 官方可视化桌面工具 |
7. Python 代码示例:Squidpy 基础分析¶
7.1 安装¶
# 创建专用 conda 环境
conda create -n spatial python=3.10 -y # 创建名为 spatial 的环境
conda activate spatial # 激活环境
# 安装 squidpy(会自动安装 scanpy、anndata 等依赖)
pip install squidpy==1.8.1 # 安装 squidpy 最新稳定版
# 如果需要反卷积,额外安装 cell2location
pip install cell2location==0.1.5 # 安装 cell2location
7.2 加载 10x Visium 数据¶
import scanpy as sc # 导入 scanpy,用于基础单细胞/空间分析
import squidpy as sq # 导入 squidpy,用于空间特异性分析
import matplotlib.pyplot as plt # 导入绑图库
# --- 方式1:加载 Squidpy 内置示例数据(学习用) ---
# Squidpy 自带多个空间转录组示例数据集
adata = sq.datasets.visium_hne_adata() # 加载 Visium H&E 染色示例数据
# 返回的 adata 是 AnnData 对象,包含表达矩阵 + 空间坐标 + 组织图像
# --- 方式2:加载 Space Ranger 输出(实际项目用) ---
# adata = sc.read_visium(
# path="path/to/spaceranger/outs", # Space Ranger 输出目录
# count_file="filtered_feature_bc_matrix.h5", # 过滤后的表达矩阵
# )
# 查看数据结构
print(adata) # 打印 AnnData 基本信息
# AnnData object with n_obs × n_vars = 2688 × 18078
# obs: spot 级别元信息(cluster 等)
# var: 基因级别信息
# obsm: 包含 'spatial' 键 → 每个 spot 的 (x, y) 坐标
# uns: 包含 'spatial' 键 → 组织图像和缩放参数
print(adata.obsm['spatial'][:5]) # 查看前 5 个 spot 的空间坐标
7.3 质控与预处理¶
# --- 基础质控(与 scRNA-seq 类似) ---
sc.pp.calculate_qc_metrics(adata, inplace=True) # 计算质控指标
# 计算每个 spot 的总 counts 数、检测到的基因数等
# 过滤低质量 spot
sc.pp.filter_cells(adata, min_counts=500) # 过滤总 counts < 500 的 spot
sc.pp.filter_genes(adata, min_cells=10) # 过滤在少于 10 个 spot 中表达的基因
# --- 标准预处理流程 ---
sc.pp.normalize_total(adata, target_sum=1e4) # 归一化:每个 spot 总 counts 统一到 10000
sc.pp.log1p(adata) # log 转换:log(x+1),压缩数据范围
sc.pp.highly_variable_genes(adata, n_top_genes=2000) # 筛选前 2000 个高变基因
# 高变基因 = 在不同 spot 间表达差异最大的基因,携带最多生物学信息
# PCA 降维
sc.pp.pca(adata, n_comps=50) # 主成分分析,保留前 50 个主成分
# PCA 把 2000 维基因表达压缩到 50 维,保留主要信息
# 构建邻域图 + UMAP(用于可视化)
sc.pp.neighbors(adata, n_neighbors=15) # 构建 KNN 图(K=15)
sc.tl.umap(adata) # UMAP 降维到 2D 用于可视化
sc.tl.leiden(adata, resolution=0.5) # Leiden 聚类,resolution 控制聚类粗细
7.4 空间可视化¶
# --- 在组织图像上可视化聚类结果 ---
sq.pl.spatial_scatter(
adata,
color="leiden", # 用 leiden 聚类结果着色
shape=None, # 不显示 spot 边框
size=1.5, # spot 大小
img=True, # 叠加组织 H&E 图像作为背景
figsize=(8, 8), # 图片尺寸
)
plt.title("Leiden Clustering on Tissue") # 添加标题
plt.savefig("spatial_clusters.png", dpi=300, bbox_inches='tight') # 保存高清图
plt.show()
# --- 可视化特定基因的空间表达 ---
# 示例:查看某个 marker 基因在组织上的表达分布
sq.pl.spatial_scatter(
adata,
color=["EPCAM", "VIM", "PTPRC"], # 上皮/间质/免疫细胞 marker
shape=None,
size=1.5,
img=True,
cmap="Reds", # 使用红色色阶(白 → 红)
figsize=(18, 6),
ncols=3, # 三个基因并排显示
)
plt.savefig("spatial_markers.png", dpi=300, bbox_inches='tight')
plt.show()
7.5 构建空间邻域图¶
# --- 构建空间邻域关系 ---
# 这是 Squidpy 区别于普通 Scanpy 的核心:利用空间坐标构建邻域图
sq.gr.spatial_neighbors(
adata,
coord_type="generic", # 坐标类型,Visium 用 "generic" 或 "grid"
delaunay=True, # 使用 Delaunay 三角剖分构建邻域
# n_neighs=6, # 或指定每个 spot 的邻居数量
)
# 结果存储在 adata.obsp['spatial_connectivities'](邻接矩阵)
# 和 adata.obsp['spatial_distances'](距离矩阵)
print("空间邻接矩阵:", adata.obsp['spatial_connectivities'].shape)
# 白话:记录了哪些 spot 是"邻居"关系——后续分析都基于这个邻域图
7.6 空间变异基因分析¶
# --- 寻找空间变异基因(Spatially Variable Genes, SVG) ---
# 空间变异基因 = 在空间上有明显分布模式的基因(不是随机分布的)
sq.gr.spatial_autocorr(
adata,
mode="moran", # 使用 Moran's I 统计量
# mode="geary", # 或使用 Geary's C
n_perms=100, # 置换检验次数(用于计算 p 值)
n_jobs=4, # 并行线程数
)
# Moran's I 接近 +1 = 高度空间聚集(相似值扎堆)
# Moran's I 接近 0 = 随机分布
# Moran's I 接近 -1 = 空间分散(相似值远离)
# 查看结果(按 Moran's I 降序排列)
svg_results = adata.uns['moranI'].sort_values('I', ascending=False)
print(svg_results.head(10)) # 打印 top 10 空间变异基因
# 可视化 top 空间变异基因
top_svg = svg_results.index[:4].tolist() # 取 top 4 SVG
sq.pl.spatial_scatter(
adata,
color=top_svg,
shape=None, size=1.5, img=True,
cmap="viridis", # 使用 viridis 色阶
figsize=(16, 4), ncols=4,
)
plt.savefig("top_svgs.png", dpi=300, bbox_inches='tight')
plt.show()
7.7 配体-受体互作分析¶
# --- 空间配体-受体互作分析 ---
# 分析空间上相邻的 spot/细胞之间的信号通讯
sq.gr.ligrec(
adata,
cluster_key="leiden", # 基于 leiden 聚类结果
n_perms=100, # 置换检验次数
use_raw=False, # 使用预处理后的数据
)
# 结果存储在 adata.uns['leiden_ligrec']
# 包含每对配体-受体在每对 cluster 之间的统计显著性
# 可视化配体-受体互作结果
sq.pl.ligrec(
adata,
cluster_key="leiden",
source_groups=["0", "1"], # 信号发送方的 cluster
target_groups=["2", "3"], # 信号接收方的 cluster
pvalue_threshold=0.01, # 只显示 p < 0.01 的互作对
figsize=(10, 6),
)
plt.savefig("ligrec_dotplot.png", dpi=300, bbox_inches='tight')
plt.show()
7.8 邻域富集分析¶
# --- 邻域富集分析 ---
# 检验某两种细胞类型(cluster)是否在空间上倾向于相邻
sq.gr.nhood_enrichment(
adata,
cluster_key="leiden", # 基于 leiden 聚类
)
# 白话:检查不同 cluster 的 spot 是否"喜欢做邻居"
# z-score > 0 = 倾向于相邻(共定位)
# z-score < 0 = 倾向于远离(互斥)
# 可视化邻域富集热图
sq.pl.nhood_enrichment(
adata,
cluster_key="leiden",
figsize=(6, 6),
)
plt.title("Neighborhood Enrichment (z-score)") # 邻域富集 z 值热图
plt.savefig("nhood_enrichment.png", dpi=300, bbox_inches='tight')
plt.show()
8. 细胞类型反卷积¶
8.1 为什么需要反卷积¶
10x Visium 标准版的每个 spot(直径 55 μm)通常覆盖 1~10 个细胞。一个 spot 的表达谱是这些细胞的混合信号。反卷积(deconvolution)就是从这个混合信号中推断每个 spot 里各细胞类型的比例。
白话类比:
一杯混合果汁 → 推断里面有 40% 苹果汁 + 30% 橙汁 + 30% 葡萄汁
一个 spot 的表达谱 → 推断里面有 50% 上皮细胞 + 30% 免疫细胞 + 20% 成纤维细胞
需要"纯果汁样本"做参考 → 这就是 scRNA-seq 参考数据的作用
8.2 主流反卷积方法对比¶
| 方法 | 语言 | 原理 | 特点 |
|---|---|---|---|
| cell2location | Python | 贝叶斯层次模型 | 精度高,引用多,Nature Biotechnology 发表 |
| RCTD (spacexr) | R | 统计似然 + 平台效应校正 | 速度快,处理平台批次效应好 |
| Tangram | Python | 深度学习映射 | 可映射单细胞到空间坐标,多功能 |
| SPOTlight | R | NMF + 非负最小二乘 | 轻量级,适合初步探索 |
| stereoscope | Python | 概率模型 | 理论严谨,计算量偏大 |
9. 应用场景¶
9.1 肿瘤微环境(TME)¶
这是空间转录组最热门的应用方向:
- 肿瘤-免疫互作:识别免疫细胞在肿瘤周围的空间分布模式——是浸润到肿瘤核心("热肿瘤"),还是被排斥在边缘("冷肿瘤")
- 肿瘤异质性:同一肿瘤不同区域的基因表达差异,揭示肿瘤亚克隆结构
- 预后预测:免疫细胞与肿瘤细胞的空间距离可能预测免疫治疗响应
- 实际应用拓展:该 2 型糖尿病肠道菌群项目关注宿主-微生物互作,空间转录组可以揭示肠道不同区域的免疫微环境差异
9.2 发育生物学¶
- 器官发育图谱:绘制胚胎不同发育阶段各区域的基因表达空间模式
- 细胞命运决定:哪些空间信号决定了干细胞向不同方向分化
- 组织形态发生:基因表达的空间梯度如何指导组织形态形成
9.3 神经科学¶
- 大脑区域图谱:绘制脑区精细的基因表达空间地图(如 MERFISH 用于小鼠全脑图谱)
- 神经退行性疾病:阿尔茨海默病中 Aβ 斑块周围的细胞状态变化
- 神经回路功能:不同脑区的细胞类型组成和通讯模式
9.4 其他新兴方向¶
- 感染免疫:病原体在组织中的空间分布与局部免疫应答
- 纤维化研究:纤维化区域与正常区域的基因表达空间差异
- 器官移植:移植排斥反应中免疫细胞的空间浸润模式
10. 面试怎么答¶
Q1:什么是空间转录组学?和单细胞测序有什么区别?¶
参考答案:空间转录组学是在保留组织空间位置信息的前提下测量基因表达的技术。它和单细胞测序最大的区别是:单细胞测序需要把组织消化成单个细胞,丢失了空间位置信息;而空间转录组在组织切片上原位检测,保留了每个基因表达的坐标位置。两者是互补关系——单细胞提供高质量的细胞类型参考,空间转录组提供组织结构上下文。实际研究中经常联合使用,先用 scRNA-seq 建立细胞类型 atlas,再通过反卷积方法(如 cell2location)把细胞类型映射回空间位置。
Q2:10x Visium 的分辨率限制是什么?如何解决?¶
参考答案:Visium 标准版的 spot 直径是 55 μm,通常覆盖 1-10 个细胞,不是严格的单细胞分辨率。解决方案有三个层面:一是计算层面,使用反卷积算法(cell2location、RCTD)从混合表达谱中推断每个 spot 的细胞类型组成;二是实验层面,Visium HD 已将分辨率提升到 2 μm bins,接近单细胞级别;三是平台选择,如果需要亚细胞分辨率,可以考虑 MERFISH 或 Stereo-seq 等高分辨率平台。
Q3:什么是空间变异基因(SVG)?如何检测?¶
参考答案:空间变异基因是指在组织空间上呈现非随机分布模式的基因——比如只在肿瘤边缘高表达,或者在组织的特定区域聚集。检测方法主要使用空间自相关统计量:Moran's I(接近 +1 表示空间聚集,接近 0 表示随机)和 Geary's C。在 Squidpy 中用
sq.gr.spatial_autocorr()函数实现。SVG 的生物学意义在于发现具有空间特异性表达模式的基因,这些基因往往与组织的空间功能分区密切相关。
Q4:请描述一下空间转录组的标准分析流程。¶
参考答案:以 10x Visium 为例,流程分为上游和下游。上游用 Space Ranger 处理 FASTQ 和组织图像,完成比对、定量和 spot 定位。下游用 Scanpy/Squidpy:首先加载数据(
scanpy.read_visium()),进行质控和标准预处理(归一化、HVG、PCA);然后进入空间特异性分析——构建空间邻域图(sq.gr.spatial_neighbors())、空间可视化(在 H&E 图像上叠加表达)、空间聚类、空间变异基因检测(Moran's I);如果分辨率不够单细胞级别,还需要用 cell2location 等工具做反卷积;最后进行空间配体-受体互作分析。
Q5:反卷积(deconvolution)的原理是什么?¶
参考答案:反卷积的核心问题是:一个 spot 的表达谱是多个细胞类型表达谱的线性叠加,我们要从这个混合信号中推断各细胞类型的比例。需要两个输入:空间转录组数据(混合信号)和 scRNA-seq 参考数据("纯信号",即每种细胞类型的特征表达谱)。不同方法用不同数学框架求解:cell2location 用贝叶斯层次模型估计后验概率,RCTD 用加权最小二乘并校正平台效应,Tangram 用深度学习优化映射。选择时考虑:cell2location 精度最高但计算慢,RCTD 速度快且处理批次效应好,Tangram 功能最多样。
11. 常见报错与排查¶
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
KeyError: 'spatial' | AnnData 对象中缺少空间坐标 | 检查是否用 sc.read_visium() 正确加载,或手动设置 adata.obsm['spatial'] |
No spatial key found in adata.uns | 组织图像信息缺失 | 确保 Space Ranger 输出目录中有 spatial/ 文件夹 |
ValueError: could not broadcast | spot 数与坐标数不匹配 | 检查质控过滤后是否需要重新对齐坐标数据 |
sq.gr.spatial_neighbors() 报 connectivity 错误 | 坐标类型参数设置不对 | Visium 数据用 coord_type="grid",其他平台用 "generic" |
cell2location GPU 内存不足 | 数据量太大 | 减少基因数(取 HVG)或降低 N_cells_per_location 参数 |
Space Ranger 图像对齐失败 | 组织图像质量差或手动对齐有误 | 使用 Loupe Browser 手动调整对齐 fiducial markers |
12. 速查表¶
┌─────────────────────── 空间转录组分析速查 ───────────────────────┐
│ │
│ 技术平台选择: │
│ 全转录组 + 易上手 → 10x Visium │
│ 超高分辨率 + 大面积 → Stereo-seq │
│ 亚细胞级 + 基于成像 → MERFISH │
│ 全转录组 + 高分辨率 → Slide-seq / Visium HD │
│ │
│ 分析工具选择: │
│ Python 一站式 → Squidpy (v1.8.1) │
│ R 一站式 → Giotto (v4.0.0) │
│ 数据加载/预处理 → Scanpy (v1.12.1) │
│ 反卷积(Python) → cell2location (v0.1.5) │
│ 反卷积(R) → RCTD/spacexr │
│ scRNA-seq 映射 → Tangram (v1.0.4) │
│ 细胞通讯 → CellChat / sq.gr.ligrec() │
│ 统一数据格式 → SpatialData (v0.7.2) │
│ │
│ 核心函数速查(Squidpy): │
│ sc.read_visium() # 加载 Visium 数据 │
│ sq.gr.spatial_neighbors() # 构建空间邻域图 │
│ sq.pl.spatial_scatter() # 空间可视化 │
│ sq.gr.spatial_autocorr() # 空间变异基因(Moran's I) │
│ sq.gr.nhood_enrichment() # 邻域富集分析 │
│ sq.gr.ligrec() # 配体-受体互作 │
│ sq.gr.co_occurrence() # 共现分析 │
│ sq.im.process() # 组织图像处理 │
│ │
│ 关键统计量: │
│ Moran's I → 空间自相关(+1 聚集, 0 随机, -1 分散) │
│ Geary's C → 空间自相关(0 聚集, 1 随机, >1 分散) │
│ z-score → 邻域富集(>0 共定位, <0 互斥) │
│ │
│ 反卷积方法选择: │
│ 精度优先 → cell2location(贝叶斯,计算慢) │
│ 速度优先 → RCTD(统计方法,处理批次效应好) │
│ 多功能 → Tangram(深度学习,可做映射) │
│ │
│ 空间转录组三要素: │
│ 1. 基因表达矩阵(哪些基因表达了,表达了多少) │
│ 2. 空间坐标(每个 spot/cell 在组织上的 x, y 位置) │
│ 3. 组织图像(H&E 染色,提供形态学上下文) │
│ │
└────────────────────────────────────────────────────────────────┘
13. 延伸资源¶
13.1 必读论文¶
| 论文 | 年份 | 重要性 |
|---|---|---|
| Ståhl et al. Science — 首个空间转录组方法 | 2016 | 奠基之作 |
| Palla, Spitzer et al. Nature Methods — Squidpy | 2022 | 分析框架 |
| Kleshchevnikov et al. Nature Biotechnology — cell2location | 2022 | 反卷积标杆 |
| Cable et al. Nature Biotechnology — RCTD/spacexr | 2022 | 反卷积方法 |
| Chen et al. Cell — Stereo-seq | 2022 | 华大高分辨率技术 |
13.2 学习资源¶
- Squidpy 官方教程:https://squidpy.readthedocs.io/en/stable/ — Python 空间分析入门首选
- SpatialData 文档:https://spatialdata.scverse.org/ — 统一空间数据格式
- 10x Genomics Space Ranger 文档:https://www.10xgenomics.com/support/software/space-ranger — 上游分析
- Giotto 官方文档:https://drieslab.github.io/Giotto/ — R 生态空间分析
- scverse 生态:https://scverse.org/ — Scanpy/Squidpy/AnnData 等工具的统一社区
13.3 与知识库其他文档的关联¶
- 12_单细胞分析入门_Scanpy.md:空间转录组预处理与 scRNA-seq 流程高度重叠,先掌握 Scanpy 再学 Squidpy
- 18_多组学整合分析入门.md:空间转录组 + scRNA-seq 整合是典型的多组学分析
- 14_宏基因组binning与MAGs提取.md:宏基因组方向,面试可以串联"宏基因组看肠道菌群组成 → 空间转录组看宿主肠道组织的空间免疫应答"
最后提醒:空间转录组是 2024-2026 年最火的生信方向之一,面试提到这个技术能展示你对前沿的关注。但不需要深入每个细节,重点掌握"核心概念 + 分析流程 + 一两个工具的实操经验"即可。和该宏基因组项目串联起来讲(肠道组织空间异质性),会是很好的加分项。