单细胞表观基因组分析方法¶
一句话说明¶
单细胞表观基因组就是给每个细胞单独拍一张"基因开关状态"的照片——传统方法是一群细胞混在一起拍合影(看不清个体差异),单细胞技术让我们看到每个细胞独特的表观遗传状态。
核心知识点¶
要点1:为什么需要单细胞表观基因组¶
- Bulk 表观基因组 = 成千上万个细胞的平均值,掩盖了细胞异质性
- 同一组织中不同细胞类型的表观遗传状态完全不同
- 肿瘤中存在表观遗传异质性,影响治疗耐药
- 白话类比:全班平均分是 80 分,但里面有考 100 分的和考 60 分的,平均值掩盖了真相
要点2:主要单细胞表观基因组技术¶
| 技术 | 检测内容 | 通量 | 代表平台 |
|---|---|---|---|
| scATAC-seq | 染色质可及性 | 高(万级细胞) | 10x Genomics |
| scCUT&Tag | 组蛋白修饰 | 中等 | bench protocol |
| scBS-seq | DNA 甲基化 | 低(百级) | scRRBS, scWGBS |
| scNOME-seq | 可及性+甲基化 | 低 | bench protocol |
| 多组学 | ATAC+RNA 等组合 | 高 | 10x Multiome |
要点3:scATAC-seq 分析流程¶
- 预处理:去接头、比对、去重、去黑名单
- 特征矩阵构建:将基因组分成固定大小的 bin(如 5kb),统计每个 bin 在每个细胞中的 reads 数
- 降维:TF-IDF 标准化 → LSI(潜在语义索引)降维
- 聚类:在 LSI 空间中聚类,识别不同细胞类型
- Peak calling:对每个 cluster 分别 call peaks
- 基因活性评分:用基因体+启动子区域的可及性估计基因活性
- 标注:参考 scRNA-seq 数据进行细胞类型标注
要点4:关键挑战¶
- 数据稀疏:每个细胞只有 ~1000-10000 个片段(bulk 有百万级)
- 二值化特征:大部分位点是 0 或 1(有或没有信号)
- 批次效应:不同实验、不同平台的信号差异大
- 整合分析:如何与 scRNA-seq 等其他组学整合
实战代码¶
# ===== R: scATAC-seq 分析(使用 Signac + Seurat) =====
library(Signac) # 专门处理 scATAC-seq 的 R 包
library(Seurat) # 单细胞分析主力框架
library(GenomicRanges)
# 1. 读取 10x Genomics scATAC-seq 数据
# 需要三个文件:fragments.tsv.gz、peaks.bed、metadata
counts <- Read10X_h5("filtered_peak_bc_matrix.h5")
metadata <- read.csv("singlecell.csv", row.names = 1)
# 创建 ChromatinAssay 对象
chrom_assay <- CreateChromatinAssay(
counts = counts,
sep = c(":", "-"), # peak 名称分隔符
fragments = "fragments.tsv.gz", # 片段文件
min.cells = 10, # 至少 10 个细胞有信号
min.features = 200) # 每个细胞至少 200 个 peaks
# 创建 Seurat 对象
pbmc <- CreateSeuratObject(
counts = chrom_assay,
assay = "peaks",
meta.data = metadata)
# 2. 质控
# 计算 QC 指标
pbmc$pct_reads_in_peaks <- pbmc$peak_region_fragments /
pbmc$passed_filters * 100 # peaks 内 reads 比例
pbmc$blacklist_ratio <- pbmc$blacklist_region_fragments /
pbmc$peak_region_fragments # 黑名单区域比例
# 过滤低质量细胞
pbmc <- subset(pbmc,
peak_region_fragments > 3000 & # 至少 3000 fragments
peak_region_fragments < 20000 & # 不超过 20000(排除多细胞)
pct_reads_in_peaks > 15 & # peaks 内比例 > 15%
blacklist_ratio < 0.05 & # 黑名单比例 < 5%
nucleosome_signal < 4 & # 核小体信号合理
TSS.enrichment > 3) # TSS 富集 > 3
# 3. 标准化 + 降维
# TF-IDF 标准化(Term Frequency - Inverse Document Frequency)
pbmc <- RunTFIDF(pbmc)
# 选择高变特征
pbmc <- FindTopFeatures(pbmc, min.cutoff = "q0")
# LSI 降维(Latent Semantic Indexing)
pbmc <- RunSVD(pbmc)
# 注意:第一个 LSI 分量通常与测序深度相关,需检查并排除
# 4. UMAP 可视化 + 聚类
pbmc <- RunUMAP(pbmc, reduction = "lsi", dims = 2:30) # 跳过第1维
pbmc <- FindNeighbors(pbmc, reduction = "lsi", dims = 2:30)
pbmc <- FindClusters(pbmc, resolution = 0.5,
algorithm = 3) # SLM 算法
# 5. 计算基因活性评分(Gene Activity Score)
# 用基因体 + 上游 2kb 启动子区域的可及性估计表达
gene_activities <- GeneActivity(pbmc)
pbmc[["RNA"]] <- CreateAssayObject(counts = gene_activities)
pbmc <- NormalizeData(pbmc, assay = "RNA",
normalization.method = "LogNormalize",
scale.factor = median(pbmc$nCount_RNA))
# 6. 可视化标记基因
DefaultAssay(pbmc) <- "RNA"
# 用已知标记基因辅助标注细胞类型
FeaturePlot(pbmc,
features = c("MS4A1", # B 细胞
"CD3D", # T 细胞
"CD14", # 单核细胞
"FCGR3A"), # NK 细胞
max.cutoff = "q95")
面试常问点¶
★ scATAC-seq 和 scRNA-seq 的分析有什么本质区别?¶
参考答案:三个核心区别——第一,数据更稀疏,每个细胞只有几千个片段 vs RNA-seq 的几千到几万个 UMI;第二,特征是近二值的(0/1),不像 RNA 有连续计数;第三,降维方法不同,scATAC 用 TF-IDF + LSI(类似文本分析),scRNA 用 PCA。因为数据特性不同,不能直接套用 scRNA-seq 的分析方法。
★ 10x Multiome 同时测 ATAC+RNA 有什么优势?¶
参考答案:最大优势是同一个细胞同时获得两层信息,不需要做跨模态的数据整合。这样可以直接在每个细胞水平研究染色质开放性和基因表达的因果关系,比如某个增强子打开了,它调控的基因是否真的表达了。分别测 scATAC 和 scRNA 再整合,虽然也能做,但整合过程会引入误差。
速查卡片¶
| 问题 | 一句话答案 |
|---|---|
| 最常用的单细胞表观技术 | scATAC-seq |
| scATAC 的降维方法 | TF-IDF + LSI(不是 PCA) |
| 核心 R 包 | Signac + Seurat |
| QC 关键指标 | TSS enrichment、peaks 内比例、片段数 |
| 数据稀疏性 | 每细胞 ~1000-10000 片段 |
| 同时测 ATAC+RNA 的平台 | 10x Multiome |
| 基因活性评分 | 用基因体+启动子可及性估计 |
| 单细胞甲基化技术 | scBS-seq / scRRBS |