Cicero:一个单细胞染色质可及性实验可视化R包

本文可在http://xuzhougeng.top/免费阅读原文

Cicero是一个单细胞染色质可及性实验可视化R包。Cicero的主要功能就是使用单细胞染色质可及性数据通过分析共开放去预测基因组上顺式调节作用(cis-regulatory interactions),例如增强子和启动子。Cicero能够利用染色质开放性进行单细胞聚类,排序和差异可及性分析。关于Cicero的算法原理,参考他们发表的文章.

简介

Cicero的主要目标是使用单细胞染色质可及性数据去预测基因组上那些在细胞核中存在物理邻近的区域。这能够用于鉴定潜在的增强子-启动子对,对基因组顺式作用有一个总体了解。

由于单细胞数据的稀疏性,细胞必须根据相似度进行聚合,才能够对数据中的多种技术因素进行可靠纠正。

最终,Cicero给出了"Cicero 共开放"得分,分数在-1和1之间,用于评估用于给定距离中每个可及peak对之间的共开放性,分数越高,越可能是共开放。

此外,Monocle3的框架让Cicero能对单细胞ATAC-seq实验完成Monocle3上的聚类,拟时间等分析。

Cicero主要提供了两种核心分析:

  • 构建和分析顺式调控网络.
  • 常规单细胞染色质可及性分析:

Cicero安装和加载

Cicero运行在R语言分析环境中。尽管能够从Bioconductor安装,但是推荐从GitHub上安装。

install.packages("BiocManager")
BiocManager::install(c("Gviz", "GenomicRanges", "rtracklayer"))
install.packages("devtools")
devtools::install_github("cole-trapnell-lab/cicero-release", ref = "monocle3")

加载Cicero

library(cicero)

数据加载

Cicero以cell_data_set(CDS)对象存放数据,该对象继承自Bioconductor的SingleCellExperiment对象。我们可以用下面三个函数来操纵数据

  • fData: 获取feature的元信息, 这里的featureI指的是peak
  • pData: 获取cell/sample的元信息
  • assay: 获取cell-by-peak的count矩阵

除了CDS外,还需要基因坐标信息和基因注释信息。

关于坐标信息,以mouse.mm9.genome为例,它是一个数据框,只有两列,一列是染色体编号,另一列对应的长度

data("mouse.mm9.genome")

基因组注释信息可以用rtracklayer::readGFF加载

temp <- tempfile()
download.file("ftp://ftp.ensembl.org/pub/release-65/gtf/mus_musculus/Mus_musculus.NCBIM37.65.gtf.gz", temp)
gene_anno <- rtracklayer::readGFF(temp)
unlink(temp)

Bioconductor也有现成的TxDb,可以从中提取注释信息。

简单稀疏矩阵格式

以一个测试数据集介绍如何加载简单稀疏矩阵格式

temp <- textConnection(readLines(gzcon(url("http://staff.washington.edu/hpliner/data/kidney_data.txt.gz"))))
cicero_data <- read.table(temp)

这里的简单稀疏矩阵格式指的是数据以三列进行存放,第一列是peak位置信息,第二列是样本信息,第三列则是样本中有多少fragment和该peak重叠。

chr1_4756552_4757256    GAATTCGTACCAGGCGCATTGGTAGTCGGGCTCTGA    1

对于这种格式,Cicero提供了一个函数make_atac_cds, 用于构建一个有效的cell_data_set对象,用于下游分析,输入既可以是一个数据框,也可以是一个文件路径。

input_cds <- make_atac_cds(cicero_data, binarize = TRUE)

10X scATAC-seq 数据

如果数据已经经过10X scATAC-seq处理,那么结果中的filtered_peak_bc_matrix里就有我们需要的信息

加载cell-by-peak count矩阵,

# read in matrix data using the Matrix package
indata <- Matrix::readMM("filtered_peak_bc_matrix/matrix.mtx") 
# binarize the matrix
indata@x[indata@x > 0] <- 1

加载cell元数据

# format cell info
cellinfo <- read.table("filtered_peak_bc_matrix/barcodes.tsv")
row.names(cellinfo) <- cellinfo$V1
names(cellinfo) <- "cells"

加载peak元数据

# format peak info
peakinfo <- read.table("filtered_peak_bc_matrix/peaks.bed")
names(peakinfo) <- c("chr", "bp1", "bp2")
peakinfo$site_name <- paste(peakinfo$chr, peakinfo$bp1, peakinfo$bp2, sep="_")
row.names(peakinfo) <- peakinfo$site_name

为cell-by-peak的count矩阵增加行名(peak元数据)和列名(cell元数据)

row.names(indata) <- row.names(peakinfo)
colnames(indata) <- row.names(cellinfo)

然后用new_cell_data_set根据peak元数据,cell元数据构建出一个cell_data_set对象

# make CDS
input_cds <-  suppressWarnings(new_cell_data_set(indata,
    cell_metadata = cellinfo,
    gene_metadata = peakinfo))

之后用detect_genes统计,对于每个基因在多少细胞中的表达量超过了给定阈值。

input_cds <- monocle3::detect_genes(input_cds)

过滤没有细胞开放的peak

input_cds <- input_cds[Matrix::rowSums(exprs(input_cds)) != 0,] 

构建顺式作用网络

运行Cicero

构建Cicero CDS对象

因为单细胞染色质开放数据特别稀疏,为了能够比较准确的估计共开放得分,需要将一些比较相近的细胞进行聚合,得到一个相对比较致密的count数据。Cicero使用KNN算法构建细胞的相互重叠集。而细胞之间距离关系则是根据降维后坐标信息。降维方法有很多种,这里以UMAP为例

input_cds <- detect_genes(input_cds)
input_cds <- estimate_size_factors(input_cds)
# PCA或LSI线性降维
input_cds <- preprocess_cds(input_cds, method = "LSI")
# UMAP非线性降维
input_cds <- reduce_dimension(input_cds, reduction_method = 'UMAP', 
                              preprocess_method = "LSI")

此时用reducedDimNames(input_cds)就会发现它多了LSI和UMAP两个信息,我们可以用reducedDims来提取UMAP坐标信息。

umap_coords <- reducedDims(input_cds)$UMAP

make_cicero_cds函数就需要其中UMAP坐标信息。

注1: 假如你已经有了UMAP的坐标信息,那么就不需要运行preprocess_cdsreduce_dimension, 直接提供UMAP坐标信息给make_cicero_cds就可以了。

注2: umap_coords的行名需要和pData得到表格中的行名一样, 即all(row.names(umap_coords) == row.names(pData(input_cds)))结果为TRUE。

cicero_cds <- make_cicero_cds(input_cds, reduced_coordinates = umap_coords)

此时的cicero_cds是没有UMAP降维信息。

运行Cicero

Cicero包的主要功能就是预测基因组上位点之间的共开放. 有两种方式可以获取该信息

  • run_cicero: 一步到位。默认参数适用于人类和小鼠,但是其他物种,参考此处
  • 单独运行每个函数,这样子获取中间的信息。
#测试部分数据
data("mouse.mm9.genome")
sample_genome <- subset(mouse.mm9.genome, V1 == "chr2")
sample_genome$V2[1] <- 10000000
conns <- run_cicero(cicero_cds, sample_genome, sample_num = 2) 
nrow(conns) # 212302
## 全部数据, 时间真久
conns <- run_cicero(cicero_cds, mouse.mm9.genome, sample_num = 2)
nrows(conns) #59741738

其中conns存放的是peak之间共开放得分。

Cicero Connection可视化

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

推荐阅读更多精彩内容