单细胞ATAC数据的两种读取方式(上)

单细胞研究使我们能够了解细胞发育的分子过程和病理的发生机理。单细胞ATAC-seq(scATAC-seq)通过分析单细胞水平的染色质可及性来定义转录和表观遗传变化。本文将为大家介绍两种单细胞ATAC数据的读取方式。
首先,我们先来看一下进行分析的单细胞ATAC数据文件有哪些。以10x Single Cell ATAC数据为例,Cell Ranger ATAC的输出目录结构如下:

outs/
│  filtered_peak_bc_matrix.h5            过滤后hdf5格式的Peak矩阵
│  filtered_tf_bc_matrix.h5              过滤后hdf5格式的TF矩阵
│  fragments.tsv.gz                      fragment文件
│  fragments.tsv.gz.tbi                  fragment文件索引
│  peaks.bed                             Peak位置的bed文件
│  peak_annotation.tsv                   Peak对基因的注释文件
│  peak_motif_mapping.bed                Peak与Motif的关联文件
│  raw_peak_bc_matrix.h5                 原始hdf5格式的Peak矩阵
│  singlecell.csv                        每个barcode元信息的统计文件
│  summary.csv                           重要指标的统计文件
│  summary.html                          html格式分析报告
│  summary.json                          所有数据指标汇总的json文件
├─filtered_peak_bc_matrix                过滤后mex格式的Peak矩阵
│      barcodes.tsv
│      matrix.mtx
│      peaks.bed
├─filtered_tf_bc_matrix                  过滤后mex格式的TF矩阵
│      barcodes.tsv.gz
│      matrix.mtx.gz
│      motifs.tsv
└─raw_peak_bc_matrix                     原始mex格式的Peak矩阵
        barcodes.tsv
        matrix.mtx
        peaks.bed

在下游分析中用到的主要文件包括filtered_peak_bc_matrixfiltered_peak_bc_matrix.h5fragments.tsv.gzsinglecell.csv

下面我们就来介绍如何将上述文件导入单细胞ATAC分析软件中。
目前有两种常用的单细胞ATAC分析工具:ArchR和Signac,二者均为R包。我们首先来看如何使用ArchR读入单细胞ATAC数据。
ArchR是由斯坦福大学William J. Greenleaf实验室开发的进行单细胞ATAC数据分析的工具,但是由于实验室人员变动该软件目前已经停止更新和维护.
ArchR中分析的基本单元称为Arrow文件,每个Arrow文件存储与单个样本相关的所有数据。创建Arrow文件所需的输入文件为fragment文件。Fragment文件是tabix排序的文本文件,包含每个scATAC-seq fragment和相应的barcode,每行一个fragment。
在使用ArchR时,我们要做的第一件事是更改工作目录、设置使用的线程数和加载基因组和基因组注释。

library(ArchR)

addArchRThreads(threads = 16)
addArchRGenome("hg38")   ###hg19, hg38, mm10
setwd('/path/to/outdir/')

然后,将待读入的fragment文件路径写为一个向量,可同时读入多个fragment文件。以样本名为向量的每个元素命名。

inputFiles <- c('/path/to/sample1/fragments.tsv.gz', '/path/to/sample2/fragments.tsv.gz')
names(inputFiles) <- c('sample1', 'sample2')

使用createArrowFiles函数进行数据读取。

ArrowFiles <- createArrowFiles(
  inputFiles = inputFiles,
  sampleNames = names(inputFiles),
  filterTSS = 4, 
  filterFrags = 1000, 
  addTileMat = TRUE,
  addGeneScoreMat = TRUE
)

这一步大概耗时10-15分钟,其中,对每一个样本的操作为:

  1. 从输入文件中读取开放fragment;
  2. 计算每个细胞的质控信息(即TSS富集分数和核小体信息);
  3. 根据质控参数过滤细胞;
  4. 使用500 bp bin创建全基因组TileMatrix;
  5. 使用调用addArchRGenome()时定义的geneAnnotation创建GeneScoreMatrix。

运行完成后,会在输出目录下生成sample1.arrow和sample2.arrow两个文件,而ArrowFiles对象实际只是Arrow文件路径的字符向量。

ArrowFiles

[1] "sample1.arrow" "sample2.arrow"

与此同时,在输出目录下还生成一个名为QualityControl的目录,其中保存了每个样本的2个质控图片:TSS富集分数图和fragment分布图。


细心的朋友可能会发现,通过读入fragment文件得到的矩阵细胞数与html报告中的细胞数并不一致,这是因为fragments.tsv.gz相当于fragment的原始文件,包含每个cell barcode的fragment信息,而报告中的细胞数是通过骤降图截取后得出的预估细胞数。如果我们想要获取与报告中细胞数一致的矩阵,则可以按照如下方法进行处理。
ArchR中的getValidBarcodes()函数可以读取singlecell.csv文件并识别通过QC的细胞的barcode。但就如我们前面所说,ArchR已经停止更新维护,而Cell Ranger在升级至2.0后,singlecell.csv文件的格式发生了变化,导致目前的ArchR无法对v2.0以上版本的Cell Ranger产生的singlecell.csv进行提取有效barcode的处理。不过我们可以根据源码进行修改,完成这一操作。

getValidBarcodes <- function(csvFiles = NULL, sampleNames = NULL){
  if(length(sampleNames) != length(csvFiles)){
    stop("csvFiles and sampleNames must exist!")
  }

  if(!all(file.exists(csvFiles))){
    stop("Not All csvFiles exists!")
  }

  .suppressAll <- function(expr = NULL){
    suppressPackageStartupMessages(suppressMessages(suppressWarnings(expr)))
  }

  barcodeList <- lapply(seq_along(csvFiles), function(x){
    df <- .suppressAll(data.frame(readr::read_csv(csvFiles[x])))
    as.character(df[which(paste0(df$is__cell_barcode) == "1"),]$barcode)   
    ###is__cell_barcode为singlecell.csv文件中指示细胞是否通过QC的列名
  }) %>% SimpleList
  names(barcodeList) <- sampleNames

  barcodeList
}

singleFiles <- c('/path/to/sample1/singlecell.csv', '/path/to/sample2/singlecell.csv') 
names(singleFiles) <- c('sample1', 'sample2')
validBC <- getValidBarcodes(singleFiles, sampleNames=names(singleFiles))
ArrowFiles <- createArrowFiles(
  inputFiles = inputFiles,                             
  sampleNames = names(inputFiles),                                     
  addTileMat = TRUE,
  addGeneScoreMat = TRUE,
  validBarcodes = validBC
)

这样,我们就使用getValidBarcodesvalidBarcodes参数结合,完成了对特定barcode的fragment的提取。
通过以上方式产生的Arrow文件就可以使用ArchR继续进行后续的处理和分析啦。

参考资料:
https://www.10xgenomics.com/datasets/10k-human-pbmcs-atac-v2-chromium-x-2-standard
https://www.archrproject.com/bookdown/index.html
https://github.com/GreenleafLab/ArchR

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容