743. 单细胞基因调控网络SCENIC+¶
一句话概述:整合单细胞RNA-seq和ATAC-seq数据,推断转录因子通过哪些增强子调控哪些靶基因——就像画出每个细胞里的"基因指挥链",知道谁下命令、通过什么渠道、指挥谁干活。
核心知识点速查表¶
| 概念 | 白话解释 | 关键工具 |
|---|---|---|
| SCENIC | 从scRNA-seq推断转录因子-靶基因调控网络 | pySCENIC |
| SCENIC+ | 整合scRNA-seq+scATAC-seq,加入增强子信息 | scenicplus |
| TF(转录因子) | 结合DNA调控基因表达的蛋白 | 调控网络核心 |
| Regulon | 一个TF+它调控的所有靶基因的集合 | AUCell评分 |
| eRegulon | 增强子驱动的调控网络(SCENIC+特有) | SCENIC+ |
| Motif | 转录因子结合DNA的特征序列模式 | cisTarget |
| AUCell | 评估每个细胞中regulon活性的方法 | SCENIC/SCENIC+ |
一、原理(白话版)¶
1.1 SCENIC vs SCENIC+¶
SCENIC(经典版):
scRNA-seq数据
→ 找基因共表达模块(GRNBoost2/GENIE3)
→ motif分析验证(cisTarget)
→ 确认regulon
→ 只知道:TF → 靶基因
SCENIC+(升级版):
scRNA-seq + scATAC-seq
→ 找候选增强子(开放染色质区域)
→ motif分析找TF结合位点
→ 关联增强子和靶基因
→ 知道:TF → 增强子(enhancer) → 靶基因
→ 更完整的调控图谱!
1.2 为什么需要SCENIC+?¶
| 问题 | SCENIC | SCENIC+ |
|---|---|---|
| 调控元件 | 只知道TF和靶基因 | 还知道通过哪个增强子 |
| 数据来源 | 只需scRNA-seq | 需要scRNA-seq+scATAC-seq |
| 结果精度 | 可能有假阳性 | 增强子证据增加可靠性 |
| 应用范围 | 基因调控推断 | 还能预测TF敲除效果 |
二、pySCENIC分析流程(经典版)¶
2.1 安装¶
# 安装pySCENIC
conda create -n scenic python=3.8 # 创建环境
conda activate scenic
pip install pyscenic # 安装pySCENIC
# 下载必需的数据库文件
# 1. TF列表
wget https://resources.aertslab.org/cistarget/tf_lists/allTFs_hg38.txt
# 2. motif排名数据库(约10GB)
wget https://resources.aertslab.org/cistarget/databases/homo_sapiens/hg38/refseq_r80/mc_v10_clust/gene_based/hg38_10kbp_up_10kbp_down_full_tx_v10_clust.genes_vs_motifs.rankings.feather
# 3. motif注释
wget https://resources.aertslab.org/cistarget/motif2tf/motifs-v10nr_clust-nr.hgnc-m0.001-o0.0.tbl
2.2 运行pySCENIC三步流程¶
# ===== pySCENIC标准流程 =====
import loompy as lp # 导入loom文件处理
import pandas as pd
import scanpy as sc
# ===== 第一步:GRN推断(找共表达模块)=====
# 用GRNBoost2算法找共表达的TF-基因对
# 命令行方式(推荐,更快):
"""
pyscenic grn \
expression.loom \ # 输入:表达矩阵(loom格式)
allTFs_hg38.txt \ # TF列表
-o adj.csv \ # 输出:TF-基因邻接矩阵
--num_workers 8 \ # 使用8个线程
--method grnboost2 # 使用GRNBoost2算法(比GENIE3快)
"""
# ===== 第二步:cisTarget motif富集(验证调控关系)=====
# 在共表达模块中,检查TF的结合motif是否真的富集在靶基因的启动子区
"""
pyscenic ctx \
adj.csv \ # 输入:第一步的邻接矩阵
hg38_rankings.feather \ # motif排名数据库
--annotations_fname motifs.tbl \ # motif注释文件
--expression_mtx_fname expression.loom \ # 表达矩阵
--output reg.csv \ # 输出:regulon文件
--mask_dropouts \ # 忽略dropout(零值)
--num_workers 8 # 线程数
"""
# ===== 第三步:AUCell评分(量化regulon活性)=====
# 对每个细胞计算每个regulon的活性得分
"""
pyscenic aucell \
expression.loom \ # 输入:表达矩阵
reg.csv \ # 输入:regulon文件
--output aucell.loom \ # 输出:含AUCell得分的loom文件
--num_workers 8 # 线程数
"""
2.3 结果分析¶
# ===== 分析SCENIC结果 =====
import scanpy as sc
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 加载AUCell结果
adata = sc.read_loom("aucell.loom") # 读取含AUCell得分的数据
# AUCell矩阵:行=细胞,列=regulon
# 值=该细胞中该regulon的活性得分
# 按细胞类型查看regulon活性
sc.tl.rank_genes_groups(
adata,
groupby="cell_type", # 按细胞类型分组
method="wilcoxon" # Wilcoxon秩和检验
)
# 查看每种细胞类型的特征regulon
sc.pl.rank_genes_groups(
adata,
n_genes=10, # 每组Top10
save="regulon_markers.png"
)
# 绘制regulon活性热图
# 选择最有差异的regulon
top_regulons = []
for group in adata.obs["cell_type"].unique():
result = sc.get.rank_genes_groups_df(adata, group=group)
top_regulons.extend(result.head(5)["names"].tolist())
top_regulons = list(set(top_regulons))
sc.pl.heatmap(
adata,
var_names=top_regulons, # 显示的regulon
groupby="cell_type", # 按细胞类型分组
standard_scale="var", # 标准化
cmap="RdYlBu_r",
save="regulon_heatmap.png"
)
三、SCENIC+分析流程¶
# ===== SCENIC+流程概述 =====
# SCENIC+需要同时有scRNA-seq和scATAC-seq数据
# 安装
# pip install scenicplus
# ===== 流程步骤 =====
"""
Step 1: 预处理
- scRNA-seq: Scanpy标准流程
- scATAC-seq: ArchR/Signac处理,找开放染色质peaks
Step 2: 候选增强子区域
- 从scATAC-seq的peaks中识别候选增强子
- 过滤启动子区域(TSS±2kb通常不算增强子)
Step 3: Motif富集
- 在候选增强子中搜索TF结合motif
- 使用cisTarget数据库
Step 4: 增强子-基因关联
- 计算增强子accessibility和邻近基因表达的相关性
- 相关性高 → 该增强子可能调控该基因
Step 5: 构建eRegulon
- TF → (通过motif结合)增强子 → (通过相关性)靶基因
- 这就是增强子驱动的调控网络(eRegulon)
Step 6: eRegulon活性评分
- 类似AUCell,为每个细胞评估eRegulon活性
"""
# 简化的SCENIC+运行代码
import scenicplus # 导入SCENIC+
# 具体实现因版本差异较大,建议参考官方教程
# https://scenicplus.readthedocs.io/
四、常见报错与解决¶
| 报错信息 | 原因 | 解决方案 |
|---|---|---|
GRNBoost2: memory error | 基因数太多 | 预过滤到3000-5000高变基因 |
cisTarget: no motifs found | 数据库版本不匹配 | 确认物种和基因组版本匹配 |
AUCell: all zeros | regulon太小或表达太低 | 过滤regulon(至少20个靶基因) |
loom file: corrupted | loom文件损坏 | 重新生成或用h5ad格式替代 |
pyscenic ctx: timeout | 数据库太大加载慢 | 增加内存或使用SSD |
SCENIC+: dimension mismatch | RNA和ATAC的细胞不匹配 | 确保使用相同的细胞barcode |
五、面试高频问题¶
Q1: SCENIC的三步流程是什么?¶
A: ①GRN推断:用GRNBoost2找TF和共表达基因;②cisTarget motif验证:在靶基因启动子区搜索TF结合motif,保留有motif支持的TF-基因对,形成regulon;③AUCell评分:用排名方法为每个细胞计算每个regulon的活性。
Q2: Regulon是什么?¶
A: 一个regulon = 一个转录因子 + 它直接调控的所有靶基因的集合。命名方式:TF名+(靶基因数),如"SOX2(+)(83g)"表示SOX2激活83个靶基因。
Q3: SCENIC+比SCENIC好在哪?¶
A: SCENIC只用转录组数据,只能推断TF→靶基因关系。SCENIC+加入ATAC-seq数据,可以知道TF通过哪个增强子调控靶基因(TF→增强子→靶基因),并且增强子的染色质开放性提供了额外的证据层。
六、速查表¶
# ===== SCENIC速查 =====
# 安装
pip install pyscenic
# 三步流程
pyscenic grn expression.loom TFs.txt -o adj.csv --method grnboost2
pyscenic ctx adj.csv rankings.feather --annotations motifs.tbl -o reg.csv
pyscenic aucell expression.loom reg.csv -o aucell.loom
# 必需数据库文件
# 1. TF列表: allTFs_hg38.txt
# 2. Rankings: hg38_rankings.feather (~10GB)
# 3. Motif注释: motifs.tbl
# 结果解读
# Regulon = TF + 靶基因集合
# AUCell score = 每个细胞中regulon的活性(0-1)
# 高AUCell → 该TF在该细胞中活跃
# SCENIC+ 额外需要
# scATAC-seq数据(peak矩阵)
# 输出:eRegulon = TF → 增强子 → 靶基因