ArchR官网教程学习笔记1:Getting Started with ArchR

前面的学习笔记里,对于scATAC-seq的分析,使用的是signac R包进行的。前几天在一次偶然的机会里,有幸和一个专门做生信的老外聊了聊(纽约某校的PI),从他那里听说ArchR是一个非常强大且值得学习的软件。那么既然专家都这么说了,那必须赶快学起来。我知道网上有关于ArchR的系列教程已经有人写过了,但还是决定自己跟着英文教程过一遍,加深印象~

ArchR是一个用于分析单细胞染色质可接近性数据(scATAC-seq)的功能齐全的R包套件。它能够用于处理数十万个单细胞,无需很大的内存或强大的电脑配置,与商业平台如10x Genomics Chromium系统可实现的实验规模保持同步。

这个官网(here)是一个完整的用户使用手册,是今年5月才更新过的。作者通过所能想到的所有例子来解释如何使用ArchR。还包括了一些关于scATAC -seq分析过程中重点的文档,例如降维和聚类。所有的章节都将使用相同造血细胞数据集Granja* et al. Nature Biotechnology 2019。每一章都将建立在前面的基础上,所以理想情况下你应该从头开始并按顺序执行所有的分析。需要说明的是,这个教程是在本地运行ArchR。(非服务器)

(一)ArchR的安装

安装ArchR:

# install ArchR
# make sure you already installed devtools and BiocManager
devtools::install_github("GreenleafLab/ArchR", ref="master", repos = BiocManager::repositories())

然后再安装ArchR的依赖包:

# install all of the ArchR dependencies
library(ArchR)
ArchR::installExtraPackages()

如果安装有问题,请参考:https://github.com/GreenleafLab/ArchR

(二)ArchR使用的初次了解

这一章将介绍如何将数据导入到ArchR里,并讲解如何创建ArrowFiles,这个是ArchR分析的基本单位。

(1)ATAC-seq的简要介绍

任何ATAC-seq实验最基本的组成部分都是一个“片段”。在ATAC-seq中,一个片段指的是由两次换位事件产生的可测序的DNA分子。该片段的每一端都使用paired-end进行测序。根据Tn5的插入偏移调整片段开始和结束的单碱基位置。就像已经报道的文献说的一样,Tn5转座酶以一种同源二聚体与DNA结合,在两个Tn5分子之间有9bp的DNA。因此,每个Tn5同源二聚体结合事件都会产生两个插入,间隔9bp。因此,“可接近”位点的实际中心点在Tn5二聚体的正中心,而不是每个Tn5插入的位置。考虑到这点,我们对每个Tn5插入应用一个偏移量,将正链插入事件调整+4 bp,将负链插入事件调整-5 bp。这与ATAC-seq最初描述时提出的定义是一致的。因此,在ArchR中,“fragments”指的是一组对象:包含染色体、偏移调整的单碱基染色体起始位置、偏移调整的单碱基染色体结束位置以及每个唯一细胞barcode ID对应的测序片段。类似地,“insertions”指的是可接近位点最中心的偏移调整后的单碱基位置。

(2)为什么要选择ArchR?

目前有很多的scATAC-seq分析软件可供使用,那么为什么选择ArchR呢?最主要的是ArchR提供了很多其他软件没有的功能:

此外,ArchR比其他可用工具更快,占用的内存更少,这是由于对数据结构和并行化方法进行了大量优化,而这些方法构成了ArchR软件的基础。当分析超过70,000个细胞时,其他工具需要高性能计算环境,需要内存超过128 GB 。

ArchR最初基于unix的笔记本电脑被设计出来的。对于中等大小的实验(少于100,000个细胞),ArchR的速度足够快,执行分析并可视化结果,使其能够以更深入和更具生物学意义的方式与数据交互。当然,对于较高的细胞数或喜欢使用服务器的用户,ArchR提供了导出可在服务器上生成后下载和使用的plot和projects。

目前,ArchR还没有在Windows上优化。它可以工作,但是ArchR中的并行化还没有在Windows中启用,所以上面提到的性能还无法转换。

(3)什么是Arrow file / ArchRProject?

在ArchR中,一个可分析项目的基本单元称为Arrow file。每个Arrow file存储与单个样本相关的所有数据(即元数据、可接近的片段和数据矩阵)。在创建期间和执行其他分析时,ArchR更新并编辑每个Arrow file,以包含额外的信息层。值得注意的是,对于ArchR来说,Arrow file实际上只是存储在磁盘上的外部文件的路径。更明确地说,Arrow file不是存储在内存中的R语言对象,而是存储在磁盘上的HDF5格式文件。因此,我们使用ArchRProject对象将这些Arrow file关联到一个单独的分析框架中,该框架可以在R中被快速访问。这个ArchRProject对象很小,并且存储在内存中。

某些操作可以直接在Arrow files上执行,而有些操作则需要在ArchRProject上执行,反过来再更新每个相关的Arrow files。因为Arrow files存储为一个大的hdf5格式文件,ArchR中的get-er函数通过与ArchRProject交互来获取数据,而add-er函数可以(i)直接向Arrow files添加数据,(ii)直接向ArchRProject添加数据,或者(iii)通过与ArchRProject交互向Arrow files添加数据。

(4)ArchR的输入文件格式

ArchR可以利用scATAC-seq数据的多种输入格式,最常见的格式是fragment文件和BAM文件。
fragment文件是tabix排序的文本文件,包含每个scATAC-seq片段和相应的细胞ID,每行一个片段。
BAM文件是二进制的tabix排序文件,包含每个scATAC-seq片段、原始序列、细胞barcode id和其他信息。

所使用的输入格式将取决于所使用的预处理流程使用的格式。例如,10x Genomics Cell Ranger软件返回fragment文件,而sci-ATAC-seq应用程序将使用BAM文件。ArchR使用“scanTabix”读取fragment文件,使用“scanBam”读取BAM文件。在此输入过程中,inputs被切分成chunk,每个input chunk 转换为压缩表格,包含每个片段的染色体,offset-adjusted(偏移调整的)染色体开始位置,offset-adjusted染色体末端的位置,和细胞barcode ID。这些被切分的片段存储在临时的HDF5-formatted文件里,保护内存使用量,同时保持快速访问每一个chunk。最后,所有与每个染色体相关联的chunks都被读取、组织和重写到一个名为“fragments”的单个HDF5组中的Arrow file中。这种预分块过程使ArchR能够高效地处理超大的输入文件,并降低内存使用率,从而实现并行处理。

(5)Getting Set Up

我们要做的第一件事是更改到我们想要的工作目录,设置我们想要使用的线程数量,并加载我们的基因和基因组注释。根据本地环境的配置,您可能需要修改addArchRThreads()中使用的线程数。默认情况下,ArchR使用了可用线程总数的一半,但你可以根据需要手动调整。如果你使用的是Windows,可用的线程将自动设置为1,因为ArchR中的并行处理是基于unix的操作系统构建的。

首先,调用ArchR包:

> library(ArchR)

接下来,我们为ArchR设置默认的线程数。在每次新的R程序中必须要做的事情。我们建议将线程设置为可用内核总数的1/2到3/4。ArchR中的内存使用通常会随着线程数量的增加而增加,因此允许ArchR使用更多线程也就意味着要使用更多的内存。

> addArchRThreads(threads = 16)  #比如我现在用的是windows,我想设置16线程,但是ArchR自动识别设备,并设置线程数为1
Detected windows OS, setting threads to 1.
Setting default number of Parallel threads to 1.

然后,我们设置基因组(用于注释)。如上所述,这也是你在每次新的R会话中必须要做的。当然,这个基因组版本必须与用于比对的基因组版本相匹配。对于本教程中使用的数据,我们将使用hg19基因组。

> addArchRGenome("hg19")
Setting default genome to Hg19.

ArchR需要基因和基因组注释来做一些事情,比如计算TSS富集分数、核苷酸含量和基因活性分数。因为我们的教程中的dataset使用已经与hg19参考基因组比对的scATAC-seq数据。但是,ArchR支持“hg19”、“hg38”、“mm9”和“mm10”,你可以使用createGeneAnnotation()createGenomeAnnotation()函数创建自己的基因组和基因注释。

通过addArchRGenome()函数向ArchR提供信息。这个函数告诉ArchR,对于当前会话中的所有分析,它应该使用与已定义的ArchRGenome相关的genomeAnnotationgeneAnnotation。每个支持的基因组由以下内容组成:BSgenome对象(定义了基因组坐标和每个染色体的序列),一个GRanges对象(包含一组“黑名单”区域),一个TxDb对象(定义了所有基因的位置和结构),和一个OrgDb对象(提供了一个中央基因标识符,包含这个标识符之间和其他类型的标识符的mapping)。

在ArchR中,hg19基因组的预编版本使用BSgenome.Hsapiens.UCSChg19 TxDb.Hsapiens.UCSC.hg19knownGene org.Hs.eg,以及使用ArchR::mergeGR()合并的黑名单(来自hg19 v2 blacklist regions和来自mitochondrial regions that show high mappability to the hg19 nuclear genome)。

(6)创建ArchRGenome

如上所述,ArchRGenome由基因组注释和基因注释组成。

要创建自定义基因组注释,我们使用createGenomeAnnotation()。为此,你将需要以下信息:

1.一个BSgenome对象,它包含一个基因组的序列信息
(例如BSgenome.Hsapiens.UCSC.hg38)。
2.一个GRanges基因组范围对象,包含一组黑名单区域,将用于过滤不需要的区域。这不是必需的,但建议这样做。有关如何创建黑名单的信息,请参阅publication on the ENCODE blacklists。

这里,教程展示了如何从Drosophila melanogaster创建一个自定义基因组注释,有需要的童鞋可以自行按照教程构建,这里我就不翻译了~因为我只使用小鼠和人类基因组。官网代码见:here

(7)创建Arrow Files

再次提醒~这个教程使用的数据来自文章Granja* et al. Nature Biotechnology 2019里的造血细胞数据集。包括骨髓单核细胞(BMMC),外周血单核细胞(PBMC)和CD34+造血干细胞和祖细胞(CD34 BMMC)。

一旦我们有了fragment文件,给createArrowFiles()提供文件的路径。在创建过程中,
创建期间,一些基本的元数据和矩阵被添加到每个Arrow file中,包括“TileMatrix”(包含在全基因组500bp bins的insertion counts),和“GeneScoreMatrix”(基于邻近基因启动子的insetion counts推断的基因表达量)。

示例数据使用getTutorialData()下载:

> inputFiles <- getTutorialData("Hematopoiesis")
> inputFiles
                                      scATAC_BMMC_R1 
     "HemeFragments/scATAC_BMMC_R1.fragments.tsv.gz" 
                                 scATAC_CD34_BMMC_R1 
"HemeFragments/scATAC_CD34_BMMC_R1.fragments.tsv.gz" 
                                      scATAC_PBMC_R1 
     "HemeFragments/scATAC_PBMC_R1.fragments.tsv.gz"

现在我们开始创建Arrow Files,大概要花10-15分钟。对于每一个样品来说:

1.从input文件里读取可接近性 fragments
2.计算每个细胞的质量控制信息(如TSS富集分数和核小体信息)
3.根据质量控制参数过滤细胞
4.创建基因组范围内的TileMatrix(500bp的bin)
5.创建GeneScoreMatrix

> ArrowFiles <- createArrowFiles(
  inputFiles = inputFiles,
  sampleNames = names(inputFiles),
  filterTSS = 4, #Don't set this too high because you can always increase later
  filterFrags = 1000, 
  addTileMat = TRUE,
  addGeneScoreMat = TRUE
)
#运行时会弹出很多东西:
#从弹出信息的前两行可以看出,上面的代码里有两个参数的名字已经更改了,但是也可以运行
filterFrags is no longer a valid input. Please use minFrags! Setting filterFrags value to minFrags!
filterTSS is no longer a valid input. Please use minTSS! Setting filterTSS value to minTSS!
Using GeneAnnotation set by addArchRGenome(Hg19)!
Using GeneAnnotation set by addArchRGenome(Hg19)!
ArchR logging to : ArchRLogs\ArchR-createArrows-3364659e77d1-Date-2020-11-17_Time-22-13-26.log
If there is an issue, please report to github with logFile!
2020-11-17 22:13:27 : Batch Execution w/ safelapply!, 0 mins elapsed.
Attempting to index HemeFragments/scATAC_BMMC_R1.fragments.tsv.gz as tabix..
2020-11-17 22:13:37 : (scATAC_BMMC_R1 : 1 of 3) Reading In Fragments from inputFiles (readMethod = tabix), 0.171 mins elapsed.
2020-11-17 22:13:37 : (scATAC_BMMC_R1 : 1 of 3) Tabix Bed To Temporary File, 0.174 mins elapsed.
......
2020-11-17 22:36:24 : (scATAC_PBMC_R1 : 3 of 3) Adding GeneScoreMatrix!, 22.962 mins elapsed.
2020-11-17 22:37:43 : (scATAC_PBMC_R1 : 3 of 3) Finished Creating Arrow File, 24.271 mins elapsed.
ArchR logging successful to : ArchRLogs\ArchR-createArrows-3364659e77d1-Date-2020-11-17_Time-22-13-26.log

现在我们看一下ArrowFiles对象,确认一下它确实是一个Arrow file路径的向量:

> ArrowFiles
[1] "scATAC_BMMC_R1.arrow"      "scATAC_CD34_BMMC_R1.arrow" "scATAC_PBMC_R1.arrow"
(8)每个细胞的质量控制

scATAC-seq数据的严格质量控制是很重要的,首先就是要去掉低质量细胞。在ArchR里,考虑下面三个因素:

1.唯一核fragments的数量(没有比对到线粒体上的DNA)
2.信噪比。低信噪比通常是死细胞或者快死了的细胞,细胞会含有去染色质化的DNA,使得Tn5在基因组上随便切。
3.fragment大小的分布,由于核小体的周期性,我们希望fragment在147bp左右消失。

第一个指标是唯一的核fragments,这很简单:只有很少的可用的fragments的细胞不能提供足够的数据来进行有用的分析,因此应该被排除在外。

第二个度量标准,信噪比,被计算为TSS富集分数。传统的ATAC-seq分析使用这个TSS富集分数作为确定signal-to-background的标准工作流的一部分。我们和其他人发现TSS富集在大部分ATAC-seq和scac -seq测试的细胞类型中具有代表性。TSS富集评分指标的idea是,与其他基因组区域相比,由于与启动子结合的大型蛋白复合物,ATAC-seq数据在基因TSS区域普遍富集。通过观察以这些TSS区域为中心的每个bp的可接近性,我们可以看到相对于侧翼区域(在两个方向上1900-2000 bp远端)的局部富集。峰的富集(以TSS为中心)与侧翼区域的比值代表TSS富集分数。

传统上,对每个ATAC-seq样本计算每个碱基对的可接近性,然后使用此profile确定TSS富集分数。在scATAC-seq中,按细胞执行此操作相对较慢,且计算成本较高。为了精确地评估每个细胞的TSS富集评分,我们计算以每个单碱基TSS位置为中心的50 bp区域内的平均可接近性,并将其除以TSS侧翼位置的平均可接近性(+/- 1900 - 2000 bp)。这个近似值(R > 0.99)与原始方法高度相关,并且数值在量级上非常接近。

第三个度量标准,fragment大小分布,通常不那么重要,但是手工检查总是好的。由于DNA包裹核小体的方式,我们期望在我们的数据里看到fragment大小分布的周期性。出现这些“峰”和“谷”是因为片段必须跨越0,1,2个核小体(Tn5不能切断紧紧包裹在核小体周围的DNA)。

默认情况下,在ArchR中,通过过滤细胞被识别为TSS富集分数大于4和超过1000个唯一核片段的细胞。需要注意的是,TSS富集分数的实际数值取决于所使用的TSSs集。ArchR中的默认值是为人类数据设计的,在运行createArrowFiles()时更改默认阈值是非常重要的。

在运行完上面的代码后,你的当前工作文件夹里会多出一个文件夹,叫QualityControl。包含每个样品的两个相关的图,第一个点图显示的是log10(unique nuclear fragments) vs TSS富集分数,并显示阈值;第二个图是fragment大小分布图:

你有几个dataset,就有几个子文件夹

比如我们打开第一个BMMC的结果来看:

现在我们已经准备整理这些Arrow files,后面将展示如何创建一个ArchRProject。

你可能感兴趣的:(ArchR官网教程学习笔记1:Getting Started with ArchR)