单细胞RNA-ATAC多组学测序数据分析教程¶
概述¶
单细胞RNA-ATAC多组学测序(scMultiome)技术能够同时从同一单个细胞中捕获基因表达(RNA)和染色质开放性(ATAC)信息,为研究基因调控机制提供了前所未有的分辨率。本教程系统介绍如何在R环境中对scMultiome数据进行完整分析,涵盖从单模态分析到双模态整合,再到基因调控网络重建的全流程。
本教程使用的示例数据来源于论文《Fate and state transitions during human blood vessel organoid development》(发表于Cell期刊)。该数据集包含人类血管类器官发育过程中的单细胞多组学数据,适合用于演示scMultiome分析的标准流程。
注意:如果您更倾向于使用Python进行scMultiome数据分析,请参考我们准备的Python教程。
核心知识点¶
1. 分析流程概览¶
scMultiome数据分析包含三个主要层次:
| 分析层次 | 数据模态 | 主要目标 |
|---|---|---|
| 单模态分析 | RNA或ATAC单独 | 分别表征转录组和染色质景观 |
| 双模态整合分析 | RNA+ATAC联合 | 揭示基因表达与染色质开放性的关联 |
| 基因调控网络重建 | RNA+ATAC整合 | 推断转录因子-靶基因调控关系 |
2. 单模态分析(Mono-modal Analysis)¶
2.1 RNA模态分析¶
- 数据预处理:使用
Seurat或Signac包进行质量控制、标准化和降维 - 关键步骤:
- 过滤低质量细胞(线粒体比例、基因数)
- 使用SCTransform或LogNormalize进行标准化
- PCA降维 + UMAP可视化
- 聚类分析(Louvain/Leiden算法)
- 差异表达基因鉴定
2.2 ATAC模态分析¶
- 数据预处理:使用
Signac包处理峰值矩阵 - 关键步骤:
- 基于片段文件构建峰值矩阵
- 使用TF-IDF标准化
- 使用LSI(潜在语义索引)降维
- UMAP可视化与聚类
- 差异可及性区域(DARs)鉴定
3. 双模态整合分析(Bi-modal Integrative Analysis)¶
3.1 整合策略¶
- 加权最近邻(WNN)方法:Seurat v4+提供的标准整合方法
- 多模态嵌入:通过联合降维同时利用RNA和ATAC信息
- 细胞状态对齐:确保两种模态的聚类结果一致
3.2 整合分析产出¶
- 联合聚类:基于WNN的细胞类型注释
- 顺式调控关系:基因表达与邻近染色质开放性的相关性
- 调控元件注释:识别细胞类型特异的增强子-启动子连接
4. 基因调控网络重建(Gene Regulatory Network Reconstruction)¶
4.1 Pando框架¶
Pando是一个专门用于从scMultiome数据推断基因调控网络的R包,其核心逻辑是:
- 识别候选调控区域:基于ATAC数据中的开放染色质区域
- 转录因子结合位点预测:使用motif数据库(如JASPAR)
- 构建调控模型:将基因表达与TF表达×染色质开放性进行回归
- 网络推断:筛选显著调控关系
4.2 网络分析产出¶
- 转录因子-靶基因调控关系:有向边表示调控作用
- 调控模块:共调控的基因集合
- 细胞类型特异性调控:不同细胞状态下的活跃调控程序
代码实操¶
环境准备与数据加载¶
# 加载必要的R包
library(Seurat) # 单细胞分析核心包
library(Signac) # 单细胞ATAC分析包
library(EnsDb.Hsapiens.v86) # 人类基因组注释
library(BSgenome.Hsapiens.UCSC.hg38) # 人类参考基因组
library(Pando) # 基因调控网络重建包
# 设置工作目录
setwd("path/to/your/data")
# 读取10x Genomics输出的多组学数据
# 注意:数据包含三个文件:过滤后的特征条形码矩阵、片段文件和峰值文件
input_dir <- "path/to/10x_output"
counts <- Read10X_h5(file.path(input_dir, "filtered_feature_bc_matrix.h5"))
fragments <- file.path(input_dir, "atac_fragments.tsv.gz")
peaks <- file.path(input_dir, "atac_peaks.bed")
# 创建Seurat对象
# 注释:RNA和ATAC数据分别存储在Assay中
seurat_obj <- CreateSeuratObject(
counts = counts$`Gene Expression`,
assay = "RNA",
project = "scMultiome"
)
# 添加ATAC数据
gr_peaks <- StringToGRanges(peaks, sep = c(":", "-"))
seurat_obj[["ATAC"]] <- CreateChromatinAssay(
counts = counts$Peaks,
sep = c(":", "-"),
fragments = fragments,
genome = "hg38"
)
# 添加基因注释信息
annotations <- GetGRangesFromEnsDb(ensdb = EnsDb.Hsapiens.v86)
seqlevelsStyle(annotations) <- "UCSC"
Annotation(seurat_obj[["ATAC"]]) <- annotations
单模态分析:RNA部分¶
# RNA数据预处理
# 注释:使用SCTransform进行标准化,比LogNormalize效果更好
seurat_obj <- SCTransform(seurat_obj, assay = "RNA", verbose = FALSE)
# 降维与聚类
seurat_obj <- RunPCA(seurat_obj, assay = "SCT", verbose = FALSE)
seurat_obj <- FindNeighbors(seurat_obj, reduction = "pca", dims = 1:30)
seurat_obj <- FindClusters(seurat_obj, resolution = 0.5)
seurat_obj <- RunUMAP(seurat_obj, reduction = "pca", dims = 1:30)
# 可视化RNA聚类结果
DimPlot(seurat_obj, group.by = "seurat_clusters", label = TRUE) +
ggtitle("RNA-based Clustering")
# 鉴定差异表达基因
# 注释:比较每个cluster与其他所有cluster
rna_markers <- FindAllMarkers(seurat_obj, assay = "SCT", only.pos = TRUE)
head(rna_markers)
单模态分析:ATAC部分¶
# ATAC数据预处理
# 注释:使用TF-IDF标准化,适合稀疏的ATAC数据
seurat_obj <- RunTFIDF(seurat_obj, assay = "ATAC")
# 使用LSI降维
seurat_obj <- FindTopFeatures(seurat_obj, assay = "ATAC", min.cutoff = "q0")
seurat_obj <- RunSVD(seurat_obj, assay = "ATAC")
# 去除与测序深度相关的成分(通常为第1个成分)
seurat_obj <- RunUMAP(seurat_obj, reduction = "lsi", dims = 2:30)
# 可视化ATAC聚类结果
DimPlot(seurat_obj, group.by = "seurat_clusters", label = TRUE) +
ggtitle("ATAC-based Clustering")
# 鉴定差异可及性区域
# 注释:使用Logistic回归或Wilcoxon检验
da_peaks <- FindAllMarkers(
seurat_obj,
assay = "ATAC",
only.pos = TRUE,
test.use = "LR",
latent.vars = "nCount_ATAC"
)
双模态整合分析¶
# 计算加权最近邻(WNN)
# 注释:WNN自动为每个细胞分配RNA和ATAC的权重
seurat_obj <- FindMultiModalNeighbors(
seurat_obj,
reduction.list = list("pca", "lsi"),
dims.list = list(1:30, 2:30),
modality.weight.name = "RNA.weight"
)
# 基于WNN进行聚类和UMAP
seurat_obj <- FindClusters(seurat_obj, graph.name = "wsnn", resolution = 0.5)
seurat_obj <- RunUMAP(seurat_obj, nn.name = "weighted.nn", reduction.name = "wnn.umap")
# 可视化整合结果
DimPlot(seurat_obj, reduction = "wnn.umap", group.by = "seurat_clusters", label = TRUE) +
ggtitle("WNN-based Clustering")
# 比较不同模态的聚类一致性
# 注释:计算调整兰德指数(ARI)
library(mclust)
ari_rna <- adjustedRandIndex(
seurat_obj$seurat_clusters,
seurat_obj$wsnn_clusters
)
cat("RNA vs WNN ARI:", ari_rna)
基因调控网络重建(Pando)¶
# 准备Pando分析所需数据
# 注释:Pando需要基因表达矩阵和染色质开放性矩阵
seurat_obj <- initiate_grn(
seurat_obj,
rna_assay = "SCT",
atac_assay = "ATAC",
genome = "hg38"
)
# 扫描转录因子结合位点
# 注释:使用JASPAR数据库中的motif
seurat_obj <- find_motifs(
seurat_obj,
pfm = motifs,
genome = BSgenome.Hsapiens.UCSC.hg38
)
# 构建调控模型
# 注释:使用负二项回归拟合基因表达
seurat_obj <- infer_grn(
seurat_obj,
peak_to_gene_method = "signac",
method = "glm",
family = "negative.binomial"
)
# 提取显著调控关系
# 注释:筛选p值小于0.05的调控对
grn_network <- Network(seurat_obj)
significant_edges <- grn_network[grn_network$pval < 0.05, ]
head(significant_edges)
# 可视化特定转录因子的调控网络
# 注释:例如查看转录因子SOX9的靶基因
plot_network(seurat_obj, tf = "SOX9")
常见问题¶
Q1: RNA和ATAC的聚类结果不一致怎么办?¶
原因分析:两种模态捕获的生物学信息不同,RNA反映基因表达状态,ATAC反映染色质状态,某些细胞可能在转录组上相似但染色质状态不同。
解决方案: - 使用WNN整合方法自动平衡两种模态的贡献 - 检查数据质量,排除低质量细胞 - 尝试不同的降维参数(如PCA维度数)
Q2: Pando运行速度慢或内存不足?¶
优化建议: - 减少分析的基因数量(仅保留高变基因) - 降低峰值数量(合并邻近峰值) - 使用future包启用并行计算 - 考虑使用glmnet方法替代glm以提高效率
Q3: ATAC数据中峰值检测质量差?¶
常见原因: - 测序深度不足 - 细胞数量少 - 峰值检测参数不合适
改进方法: - 增加测序深度(建议每个细胞至少5000个片段) - 使用MACS2或Genrich重新检测峰值 - 调整min.cutoff参数过滤低质量峰值
Q4: 如何验证推断的基因调控网络?¶
验证策略: - 与已知的ChIP-seq数据比较 - 使用CRISPR扰动实验验证 - 检查调控关系在不同细胞类型中的一致性 - 计算网络模块的生物学富集
速查表¶
常用函数速查¶
| 功能 | 函数 | 所属包 |
|---|---|---|
| 创建Seurat对象 | CreateSeuratObject() | Seurat |
| 创建ATAC Assay | CreateChromatinAssay() | Signac |
| RNA标准化 | SCTransform() | Seurat |
| ATAC标准化 | RunTFIDF() | Signac |
| RNA降维 | RunPCA() | Seurat |
| ATAC降维 | RunSVD() | Signac |
| 多模态整合 | FindMultiModalNeighbors() | Seurat |
| 差异表达分析 | FindAllMarkers() | Seurat |
| 差异可及性分析 | FindAllMarkers() | Signac |
| 启动GRN分析 | initiate_grn() | Pando |
| 扫描motif | find_motifs() | Pando |
| 推断调控网络 | infer_grn() | Pando |
| 可视化网络 | plot_network() | Pando |
参数推荐值¶
| 参数 | 推荐值 | 说明 |
|---|---|---|
| PCA维度 | 1:30 | RNA降维 |
| LSI维度 | 2:30 | ATAC降维(去除第1维) |
| 聚类分辨率 | 0.5-1.0 | 根据细胞数量调整 |
| 最小基因数 | 200 | RNA质量控制 |
| 最大线粒体比例 | 20% | RNA质量控制 |
| 最小ATAC片段数 | 1000 | ATAC质量控制 |
| Pando p值阈值 | 0.05 | 调控关系显著性 |
资源链接¶
- Seurat官方文档:https://satijalab.org/seurat/
- Signac官方文档:https://stuartlab.org/signac/
- Pando GitHub仓库:https://github.com/quadbio/Pando
- 示例数据论文:https://www.cell.com/cell/fulltext/S0092-8674(25)00387-3
- Python版本教程:https://github.com/quadbio/scMultiome_analysis_python_vignette
联系我们:如有任何问题,请联系 Dr. Zhisong He (zhisong.he@bsse.ethz.ch) 或 Prof. Barbara Treutlein (barbara.treutlein@bsse.ethz.ch)。