跳转至

单细胞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模态分析

  • 数据预处理:使用SeuratSignac包进行质量控制、标准化和降维
  • 关键步骤
  • 过滤低质量细胞(线粒体比例、基因数)
  • 使用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包,其核心逻辑是:

  1. 识别候选调控区域:基于ATAC数据中的开放染色质区域
  2. 转录因子结合位点预测:使用motif数据库(如JASPAR)
  3. 构建调控模型:将基因表达与TF表达×染色质开放性进行回归
  4. 网络推断:筛选显著调控关系

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个片段) - 使用MACS2Genrich重新检测峰值 - 调整min.cutoff参数过滤低质量峰值

Q4: 如何验证推断的基因调控网络?

验证策略: - 与已知的ChIP-seq数据比较 - 使用CRISPR扰动实验验证 - 检查调控关系在不同细胞类型中的一致性 - 计算网络模块的生物学富集


速查表

常用函数速查

功能函数所属包
创建Seurat对象CreateSeuratObject()Seurat
创建ATAC AssayCreateChromatinAssay()Signac
RNA标准化SCTransform()Seurat
ATAC标准化RunTFIDF()Signac
RNA降维RunPCA()Seurat
ATAC降维RunSVD()Signac
多模态整合FindMultiModalNeighbors()Seurat
差异表达分析FindAllMarkers()Seurat
差异可及性分析FindAllMarkers()Signac
启动GRN分析initiate_grn()Pando
扫描motiffind_motifs()Pando
推断调控网络infer_grn()Pando
可视化网络plot_network()Pando

参数推荐值

参数推荐值说明
PCA维度1:30RNA降维
LSI维度2:30ATAC降维(去除第1维)
聚类分辨率0.5-1.0根据细胞数量调整
最小基因数200RNA质量控制
最大线粒体比例20%RNA质量控制
最小ATAC片段数1000ATAC质量控制
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)。