一 安装
1.1 装包
SCENIC
的workflow主要依赖三个R包的支持:
1、
GENIE3
:用于共表达网络的计算(也可以用
GRNBoost2
替代)
2、
RcisTarget
:转录因子结合motif的计算
3、
AUCell
:识别单细胞测序数据中的激活基因集(gene-network)
#安装是个永恒的难题,我在window中BiocManager==1.30.16,R==4.0.6以及本篇的sessionInfo环境下安装是没有问题的
#在Linux中如果你对conda比较熟悉那么也很好安装
if (!requireNamespace("BiocManager", quietly = TRUE))install.packages("BiocManager")
BiocManager::version()
#当你的bioconductor版本大于4.0时
if(!require(SCENIC))BiocManager::install(c("AUCell", "RcisTarget"),ask = F,update = F);BiocManager::install(c("GENIE3"),ask = F,update = F)#这三个包显然是必须安装的
### 可选的包:
#AUCell依赖包
if(!require(SCENIC))BiocManager::install(c("zoo", "mixtools", "rbokeh"),ask = F,update = F)
###t-SNEs计算依赖包:
if(!require(SCENIC))BiocManager::install(c("DT", "NMF", "ComplexHeatmap", "R2HTML", "Rtsne"),ask = F,update = F)
# #这几个包用于并行计算,很遗憾,Windows下并不支持,所以做大量数据计算时最好转战linux:
if(!require(SCENIC))BiocManager::install(c("doMC", "doRNG"),ask = F,update = F)
#可视化输出
# To export/visualize in http://scope.aertslab.org
if (!requireNamespace("devtools", quietly = TRUE))install.packages("devtools")
if(!require(SCopeLoomR))devtools::install_github("aertslab/SCopeLoomR", build_vignettes = TRUE)#SCopeLoomR用于获取测试数据
if (!requireNamespace("arrow", quietly = TRUE)) BiocManager::install('arrow')
#这个包不装上在runSCENIC_2_createRegulons那一步会报错,提示'dbs'不存在
library(SCENIC)#这就安装好了,试试能不能正常加载
if(!require(SCENIC))devtools::install_github("aertslab/SCENIC")
packageVersion("SCENIC")#这里我安装的是1.3.1
library(SCENIC)
#bioconductor版本小于4.0或你的R(3.6)的版本也比较老,你可能得试试下面的方法进行安装
devtools::install_github("aertslab/SCENIC@v1.1.2")
devtools::install_github("aertslab/AUCell")
devtools::install_github("aertslab/RcisTarget")
devtools::install_github("aertslab/GENIE3")
1.2 官方手册
vignetteFile <- file.path(system.file('doc', package='SCENIC'), "SCENIC_Running.Rmd")
file.copy(vignetteFile, "SCENIC_myRun.Rmd")
# or:
vignetteFile <- "https://raw.githubusercontent.com/aertslab/SCENIC/master/vignettes/SCENIC_Running.Rmd"
download.file(vignetteFile, "SCENIC_myRun.Rmd")
1.3 测试数据
1.3.1 从测试数据中提取表达矩阵与注释信息
输入数据的表达矩阵为
gene-summarized counts
,不同于其他进阶分析的是,输入的数据最好是
raw counts
或
normalized counts
。计算后的
TPM
或
FPKM/RPKM
之类也是允许的, 但是这些可能会导致人为的
共变量
引入,避免节外生枝,我还是推荐用raw count。但总的来说,
raw (logged) UMI counts
,
normalized UMI counts
, 和
TPM
都能产生值得信赖的效果 form
loom
loomPath <- system.file(package="SCENIC", "examples/mouseBrain_toy.loom")
library(SCopeLoomR)
loom <- open_loom(loomPath)#获取loom文件
exprMat <- get_dgem(loom)#取出表达信息
class(exprMat)
# [1] "matrix" "array"
exprMat[1:4,1:4]
cellInfo <- get_cell_annotation(loom)#获得注释信息
cellInfo[1:4,1:3]
close_loom(loom)
上面我们说了如何从
loom
中读取表达矩阵与注释信息,而Python版的SCENIC是推荐使用loom作为输入数据的,这里教大家如何利用表达矩阵和注释信息创建
loom
文件(to
loom
)
loom <- build_loom("data/mouseBrain.loom", dgem=exprMat)
loom <- SCENIC::add_cell_annotation(loom, cellInfo)
close_loom(loom)
seurat
对象也是类似的
library(Seurat)
singleCellMatrix <- Seurat::Read10X(data.dir="data/filtered_gene_bc_matrices/hg19/")
scRNAsub <- CreateSeuratObject(counts = singleCellMatrix, project = "pbmc3k", min.cells = 3, min.features = 200)
exprMat <- as.matrix(scRNAsub@assays$RNA@counts)
cellInfo <- as.data.frame(scRNAsub@meta.data)
从
AUCell
中读取注释信息
cellLabels <- paste(file.path(system.file('examples', package='AUCell')), "mouseBrain_cellLabels.tsv", sep="/")
cellLabels <- read.table(cellLabels, row.names=1, header=TRUE, sep="\t")
cellInfo <- as.data.frame(cellLabels)
colnames(cellInfo) <- "CellType"
saveRDS(cellInfo,'int/cellInfo.rds')
1.3.2 保存输入数据
saveRDS(cellInfo, file="int/cellInfo.Rds")
# Color to assign to the variables (same format as for NMF::aheatmap)
colVars <- list(CellType=c("microglia"="forestgreen",
"endothelial-mural"="darkorange",
"astrocytes_ependymal"="magenta4",
"oligodendrocytes"="hotpink",
"interneurons"="red3",
"pyramidal CA1"="skyblue",
"pyramidal SS"="darkblue"))
colVars$CellType <- colVars$CellType[intersect(names(colVars$CellType), cellInfo$CellType)]
saveRDS(colVars, file="int/colVars.Rds")
plot.new(); legend(0,1, fill=colVars$CellType, legend=names(colVars$CellType))#查看保存了哪些细胞类型
1.4
RcisTarget
数据库
1.4.1 文件获取
cisTarget databases
手动下载
#human:
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")
#mouse:
dbFiles <- c("https://resources.aertslab.org/cistarget/databases/mus_musculus/mm9/refseq_r45/mc9nr/gene_based/mm9-500bp-upstream-7species.mc9nr.feather",
"https://resources.aertslab.org/cistarget/databases/mus_musculus/mm9/refseq_r45/mc9nr/gene_based/mm9-tss-centered-10kb-7species.mc9nr.feather")
#fly:
dbFiles <- c("https://resources.aertslab.org/cistarget/databases/drosophila_melanogaster/dm6/flybase_r6.02/mc8nr/gene_based/dm6-5kb-upstream-full-tx-11species.mc8nr.feather")
dir.create("cisTarget_databases"); setwd("cisTarget_databases")
for(featherURL in dbFiles)
download.file(featherURL, destfile=basename(featherURL)) # saved in current dir
1.4.2
RcisTarget
数据库文件初始化
这一步相当于给上面下好的文件构建索引并设置一些默认参数
### Initialize settings
library(SCENIC)
scenicOptions <- initializeScenic(org="mgi",#mouse填'mgi', human填'hgnc',fly填'dmel')
dbDir="cisTarget_databases/mouse/mouse.mm9/", nCores=8)#这里可以设置并行计算
scenicOptions@inputDatasetInfo$cellInfo <- "int/cellInfo.Rds"
saveRDS(scenicOptions, file="int/scenicOptions.Rds")
二、
SCENIC
分析流程(精简版)
SCENIC
的分析流程封装的较好,运行完整个流程无非也十几行代码(但是会产生大量的过程及结果文件)。
下面这个
示例数据
真的算的很
快
,不过大家跑自己数据时可能会算上
好几天
。
loomPath <- system.file(package="SCENIC", "examples/mouseBrain_toy.loom")
library(SCopeLoomR)
loom <- open_loom(loomPath)#获取loom文件
exprMat <- get_dgem(loom)#取出表达信息
cellInfo <- get_cell_annotation(loom)#获得注释信息
2.1. 计算共表达网络
genesKept <- geneFiltering(exprMat, scenicOptions)
exprMat_filtered <- exprMat[genesKept, ]
runCorrelation(exprMat_filtered, scenicOptions)
exprMat_filtered_log <- log2(exprMat_filtered+1)
# 基因共表达网络计算
mymethod <- 'runGenie3' # 'grnboost2'
library(reticulate)
if(mymethod=='runGenie3'){
runGenie3(exprMat_filtered_log, scenicOptions)
}else{
arb.algo = import('arboreto.algo')
tf_names = getDbTfs(scenicOptions)
tf_names = Seurat::CaseMatch(
search = tf_names,
match = rownames(exprMat_filtered))
adj = arb.algo$grnboost2(
as.data.frame(t(as.matrix(exprMat_filtered))),
tf_names=tf_names, seed=2023L
colnames(adj) = c('TF','Target','weight')
saveRDS(adj,file=getIntName(scenicOptions,
'genie3ll'))
2.2. 构建并计算基因调控网络活性(GRN score)
exprMat_log <- log2(exprMat+1)
scenicOptions@settings$dbs <- scenicOptions@settings$dbs["10kb"] # Toy run settings
scenicOptions <- runSCENIC_1_coexNetwork2modules(scenicOptions)
scenicOptions <- runSCENIC_2_createRegulons(scenicOptions, coexMethod=c("top5perTarget")) # Toy run settings
scenicOptions <- runSCENIC_3_scoreCells(scenicOptions, exprMat_log)
# 通过交互的shiny app选择判定二元矩阵的阈值,这里Rmarkdown不便展示,大家可以自行尝试一下
# aucellApp <- plotTsne_AUCellApp(scenicOptions, exprMat_log)
# savedSelections <- shiny::runApp(aucellApp)
# newThresholds <- savedSelections$thresholds
# scenicOptions@fileNames$int["aucell_thresholds",1] <- "int/newThresholds.Rds"
# saveRDS(newThresholds, file=getIntName(scenicOptions, "aucell_thresholds"))
scenicOptions <- runSCENIC_4_aucell_binarize(scenicOptions)#将AUCell矩阵二元化
2.3. 一些下游的可视化与探索
tsneAUC(scenicOptions, aucType="AUC") #利用AUCell score运行tsne
# Export:
# saveRDS(cellInfo, file=getDatasetInfo(scenicOptions, "cellInfo")) # Temporary, to add to loom
if(!file.exists('output/scenic.loom')){export2loom(scenicOptions, exprMat)}
saveRDS(scenicOptions, file="int/scenicOptions.Rds")#保存结果
### Exploring output
# output下存放的scenic.loom文件可以用这个网站做交互式的可视化: http://scope.aertslab.org
# motif富集的相关信息在:
#output/Step2_MotifEnrichment_preview.html in
motifEnrichment_selfMotifs_wGenes <- loadInt(scenicOptions, "motifEnrichment_selfMotifs_wGenes")
tableSubset <- motifEnrichment_selfMotifs_wGenes[highlightedTFs=="Sox8"]#这样查看Sox8的信息
viewMotifs(tableSubset)
#查看motif和对应基因:
#output/Step2_regulonTargetsInfo.tsv
regulonTargetsInfo <- loadInt(scenicOptions, "regulonTargetsInfo")
tableSubset <- regulonTargetsInfo[TF=="Stat6" & highConfAnnot==TRUE]
viewMotifs(tableSubset)
#计算并展示每种细胞类型特异性的(celltype Cell-type specific regulators (RSS)),类似于拿RGN的活性来计算调控
regulonAUC <- loadInt(scenicOptions, "aucell_regulonAUC")
rss <- calcRSS(AUC=getAUC(regulonAUC), cellAnnotation=cellInfo[colnames(regulonAUC), "CellType"], )
rssPlot <- plotRSS(rss)
plotly::ggplotly(rssPlot$plot)
2.4 输出文件
除了我们上面可视化展示出的结果,SCENIC
运行时会自动在本地输出大量文件:
SCENIC(单细胞重组网络推断和聚类)是一种从单细胞RNA序列数据推断基因调控网络和细胞类型的计算方法。
该方法的描述和一些使用示例可在《。
当前在R(此存储库)和Python中有SCENIC的实现。 如果您不太喜欢使用R,我们建议您检查一下SCENIC(其中包含Nextflow工作流程)和Python / Jupyter笔记本,以轻松运行SCENIC (强烈建议您批量运行SCENIC或更大的数据集)。 然后,可以在R,Python或SCope(Web界面)中浏览任何实现的输出。
有关在R运行SCENIC的更多详细信息和安装说明,请参阅以下教程:
这些示例的输出位于: :
常见问题:
2021/03/26:
新教程可
2020/06/26:
该SCENICprotocol包括Nextflow工作流程,并pySCENIC笔记本现在正式发布。 有关详细信息
优美的风景
Scenic View是一个JavaFX应用程序,旨在使您可以轻松了解应用程序场景图的当前状态,并且还可以轻松地操作场景图的属性,而无需继续编辑代码。 这样一来,您就可以查找错误,并使像素完美无缺,而无需执行“编译-检查-编译”操作。
适用于Windows,Linux和MacOS的JDK 11的构建是由Azure Pipelines构建的。 这些构建的状态如下所示:
下载JDK 11
Linux
您还可以下载平台无关的发行版和 。
Java版本
Scenic View有针对JDK 8,JDK 9和JDK 11的版本:
JDK 8版本处于维护模式。 没有积极的开发正在进行中,并且代码存在于jdk8分支中。
不建议使用JDK 9版本,建议开发人员使用JDK 8版本或JDK 11版本。
JDK 11版本是积极开发的分支,并且代码存在于m
可扩展的SCENIC工作流程,用于单细胞基因调控网络分析
该存储库描述了如何对单细胞数据运行pySCENIC基因调控网络推断分析以及基本的“最佳实践”表达分析。 这包括:
独立的Jupyter笔记本电脑,用于交互式分析
Nextflow DSL1工作流程,它提供了一种半自动化且简化的方法来运行这些步骤
pySCENIC安装,使用和下游分析的详细信息
另请参阅《自然规约》中的相关出版物: : 。
有关此协议中步骤的高级实现,请参阅 ,这是pySCENIC的Nextflow DSL2实现,具有用于表达式分析的全面且可自定义的管道。 这包括其他pySCENIC功能(多次运行,集成的基于主题和基于轨迹的regulon修剪,织机文件生成)。
PBMC 10k数据集(10x基因组学)
完整的SCENIC分析,以及过滤,群集,可视化和SCope就绪的织机文件创建: |
Scenic 场景描述语言的编译器和场景生成器。 请参阅以获取安装说明,以及有关 Scenic 语言、其实现及其与各种模拟器的接口的教程和其他信息。
有关该语言及其一些应用的描述,请参阅,它扩展了我们的(注意:自以来,Scenic 的语法略有变化,并且添加了许多功能,例如支持动态场景;这些在预印本中进行了描述)。 Scenic 由 Daniel J. Fremont、Edward Kim、Tommaso Dreossi、Shromona Ghosh、Xianyu Yu、Alberto L. Sangiovanni-Vincentelli 和 Sanjit A. Seshia 设计和实施。
如果您在使用 Scenic 时遇到任何问题,请向提交问题或通过联系 Daniel。
存储库的组织方式如下:
src/scenic目录包含正确的包;
examples目录中有很多 Sce
scenic.new混合任务,它将为您生成一个入门应用程序。 这是设置新的Scenic项目的最简单方法。
Erlang / Elixir版本
请注意,它目前需要OTP 21和Elixir 1.7。 如果您在编译时遇到麻烦,请检查是否首先运行了这些版本。
安装先决条件
Scenic的设计竭尽全力将其依赖性最小化到最小。 即,它需要Erlang / Elixir和OpenGL。
将应用程序渲染到本地计算机(MacOS,Ubuntu等)的窗口中是由scenic_driver_glfw驱动程序完成的。 它使用GLFW和GLEW库连接到OpenGL。
以下说明假定您已经安装了Elixir / Erlang。 如果您需要安装Elixir / Erlang,请在。
在MacOS上安装
在MacOS上安装的最简单方法是使用Homebrew。 只需在终端中运行以下命令:
brew upda