第一次接触SCENIC流程时,我被它强大的功能震撼到了。这个工具能够从单细胞RNA测序数据中挖掘出基因调控网络,让我们看到不同细胞类型中哪些转录因子在"发号施令"。简单来说,它就像是个细胞内部的"监控系统",能捕捉到哪些基因调控开关被打开了。
SCENIC全称是Single-Cell rEgulatory Network Inference and Clustering,由比利时VIB研究所开发。它通过三个关键步骤完成分析:首先找出哪些基因倾向于一起表达(共表达网络),然后筛选出真正有调控关系的基因对(调控网络),最后计算每个细胞中这些调控网络的活跃程度。
我特别喜欢SCENIC的一点是,它不仅能告诉我们哪些转录因子重要,还能展示它们在哪些细胞群体中特别活跃。比如在神经元发育研究中,用SCENIC可以清楚地看到不同发育阶段起主导作用的转录因子有哪些变化。
安装SCENIC相关包确实是个技术活,我踩过不少坑。核心依赖包括GENIE3(用于构建共表达网络)、RcisTarget(分析转录因子结合位点)和AUCell(计算基因集活性)。建议先用BiocManager安装基础包:
r复制if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install(c("AUCell", "RcisTarget", "GENIE3"))
如果遇到版本冲突,可以尝试用conda创建独立环境。我在Linux服务器上测试过,用conda安装最稳定:
bash复制conda create -n scenic python=3.7 r-base=4.0
conda activate scenic
conda install -c bioconda r-rcistarget r-genie3 r-aucell
SCENIC支持多种输入格式,但最常用的是loom文件和Seurat对象。我通常先用Seurat做完基础分析,再提取表达矩阵:
r复制library(Seurat)
# 假设已有Seurat对象pbmc
exprMat <- as.matrix(pbmc@assays$RNA@counts)
cellInfo <- as.data.frame(pbmc@meta.data)
如果想用loom格式,SCopeLoomR包提供了转换工具。我建议保存两份数据,因为有些下游分析需要特定格式:
r复制library(SCopeLoomR)
loom <- build_loom("output/pbmc.loom", dgem=exprMat)
loom <- add_cell_annotation(loom, cellInfo)
close_loom(loom)
共表达网络是SCENIC分析的第一步,目的是找出哪些基因倾向于一起表达。GENIE3和GRNBoost2是两种常用算法,我实测下来GRNBoost2速度更快,但GENIE3结果更稳定。
r复制# 基因过滤
genesKept <- geneFiltering(exprMat, scenicOptions)
exprMat_filtered <- exprMat[genesKept, ]
# 使用GENIE3
runGenie3(exprMat_filtered, scenicOptions)
# 或者用GRNBoost2(需要Python环境)
library(reticulate)
arb.algo <- import('arboreto.algo')
adj <- arb.algo$grnboost2(
as.data.frame(t(exprMat_filtered)),
tf_names=getDbTfs(scenicOptions)
)
注意:大数据集建议在服务器运行,10万细胞可能需要8-16小时
得到共表达网络后,SCENIC会用RcisTarget数据库筛选真实的调控关系。这里需要下载物种特异的motif数据库:
r复制# 人类数据库示例
dbFiles <- c(
"https://resources.aertslab.org/cistarget/databases/homo_sapiens/hg19/refseq_r45/mc9nr/gene_based/hg19-500bp-upstream-7species.mc9nr.feather",
"https://resources.aertslab.org/cistarget/databases/homo_sapiens/hg19/refseq_r45/mc9nr/gene_based/hg19-tss-centered-10kb-7species.mc9nr.feather"
)
核心分析三步走:
r复制# 1. 将共表达网络转为调控模块
scenicOptions <- runSCENIC_1_coexNetwork2modules(scenicOptions)
# 2. 鉴定调控子(regulon)
scenicOptions <- runSCENIC_2_createRegulons(scenicOptions)
# 3. 计算细胞活性评分
scenicOptions <- runSCENIC_3_scoreCells(scenicOptions, exprMat)
SCENIC提供了多种可视化工具。我最常用的是t-SNE图叠加调控子活性:
r复制# 绘制调控子活性t-SNE图
tsneAUC(scenicOptions, aucType="AUC")
# 热图展示细胞类型特异性调控子
regulonAUC <- loadInt(scenicOptions, "aucell_regulonAUC")
rss <- calcRSS(AUC=getAUC(regulonAUC),
cellAnnotation=cellInfo$CellType)
plotRSS(rss)
在实际项目中,我发现这些技巧特别有用:
r复制# 示例:提取星形胶质细胞的特异调控子
astro_regulons <- rss$astrocytes[order(-rss$astrocytes$RSS),][1:5,]
SCENIC会生成大量结果文件,我建议重点关注:
output/Step2_regulonTargetsInfo.tsv:调控子与靶基因对应表output/aucell_regulonAUC.Rds:所有细胞的调控子活性矩阵output/scenic.loom:可用scope.aertslab.org在线可视化用这个命令可以生成HTML报告:
r复制SCENIC::export2html(scenicOptions)
在帮助实验室分析数据的过程中,我总结了这些常见错误:
处理大型数据集时,这些技巧能节省大量时间:
scenicOptions@settings$nCores <- 8SCENIC结果可以无缝对接多种单细胞分析流程:
r复制# 将AUCell分数加入Seurat对象
pbmc[["SCENIC"]] <- CreateAssayObject(data=regulonAUC)
最近我在尝试用SCENIC结果指导细胞通讯分析,发现活跃的转录因子往往也是重要的信号通路调控者。