1按地区计数信号

getCountsByRegion ()函数在感兴趣的区域内计数信号,并返回一个简单的向量。

库(BRGenomics)数据(“PROseq”)数据(“txs_dm6_chr4”)
counts_txs <- getCountsByRegions(PROseq, txs_dm6_chr4) counts_txs[1:5] ## [1] 1 59 13 126 263 length(txs_dm6_chr4) == length(counts_txs) ## [1] TRUE

关键的是,默认假设输入是“基对分辨率”。如果输入数据是运行长度压缩(如标准bigWig或覆盖文件),则设置expand_ranges = TRUE

2按位置和区域计数信号

getCountsByPositions ()函数将在感兴趣的每个区域的每个位置上计数信号。默认情况下,返回一个矩阵,每个区域有一行,每个位置有一列。

#获取每个转录本的前100个碱基txs_pr <- promoter (txs_dm6_chr4,0,100) #获取每个启动子区域内每个碱基的信号countmatrix_pr <- getCountsByPositions(PROseq, txs_pr)
class(countmatrix_pr) ## [1] "matrix" "array" nrow(countmatrix_pr) == length(txs_pr) ## [1] TRUE ncol(countmatrix_pr) == width(txs_pr[1]) ## [1] TRUE

再次强调,一定要知道您的数据是否是“基对分辨率”,或者范围是否被压缩并且应该使用expand_ranges论点。

默认情况下,每个“位置”(每一列)都是一个基数,但也可以在箱中进行计数:

#在每个启动子区域的10个bp bin中获取信号countmatrix_pr_bin <- getCountsByPositions(PROseq, txs_pr, binsize = 10) countmatrix_pr_bin[1:5,]
# # [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] # # [1] 0 0 0 0 0 0 0 0 0 0 # # 7 [2] 2 1 1 0 0 0 3 2 0 # # [3] 0 0 1 0 0 0 1 0 0 0 # # [4] 0 0 0 0 0 0 0 0 0 0 # # [5] 0 0 0 0 0 0 0 0 0 0
all(rowsum (countmatrix_pr_bin) == rowsum (countmatrix_pr)) ## [1] TRUE

默认情况下,如果输入区域大小不同,则返回错误:

getCountsByPositions (PROseq txs_dm6_chr4)
## .get_cbp_mw(hits, dataset. mw)中的错误。gr,地区。gr, binsize, FUN, smw,:区域。Gr包含多个宽度的范围,但是simplify.multi.width被设置为'error'。你的意思是调用getCountsByRegions吗?

这是为了避免意外使用getCountsByPositions ()代替getCountsByRegions ().但是,对于用户确实打算使用多宽度区域的罕见情况,可以使用simplify.multi.widths参数,其中包含几个有用的选项,用于如何执行此操作(有关详细信息,请参阅文档)。

2.1例子:基因上的信号图

我们可以用getCountsByPositions ()获取单个基因的信号谱。让我们来看看TSS附近信号最高的基因:

idx <- where .max(rowsum (countmatrix_pr)) idx ## [1] 135 plot(x = 1:ncol(countmatrix_pr), y = countmatrix_pr[idx,], type = "h", main = txs_pr$tx_name[idx], xlab = "距离到TSS", ylab = "PRO-seq信号")

2.2示例:绘制信号热图

的典型用法getCountsByPositions ()是根据信号在基因列表中的位置生成热图。的ComplexHeatmapPackage有良好的文档记录,并提供了高级别的功能,但我们也可以使用ggplot2生成可定制的热图。

为了格式化ggplot的矩阵,我们想要“融化”它。这个包reshape2可以将矩阵熔化成数据帧,但BRGenomics还提供了一个融化几个函数的参数,包括getCountsByPositions ()

海关与边境保护局。df <- getCountsByPositions(PROseq, txs_pr, binsize = 10, melt = TRUE, ncores = 1) head(cbp.df)
##区域位置信号## 1 1 1 1 0 ## 2 1 2 0 ## 3 1 3 0 ## 4 1 4 0 ## 5 1 5 0 ## 6 1 6 0 0

如您所见,矩阵的行和列现在在这个数据框架的列中描述,每个位置的信号在第三列中。现在我们可以绘制:

库(ggplot2)
ggplot (cbp)。df, aes(x = 10*position - 5, y =区域,fill =信号)+ geom_raster() + coord_cartesian(expand = FALSE) + labs(x = "距离TSS", y = "Transcript", title = "PRO-seq", fill = "Reads") + theme_bw()

PRO-seq数据的高动态范围意味着信号较少的区域(行)很难挑选出来。为了解决这个问题,我们可以行规范化数据,并且让我们按最大信号位置对行进行排序。

# take only rows decent signal row_signal <- rowsum (countmatrix_pr) idx_signal <- row_signal > median(row_signal) cbp <- countmatrix_pr[idx_signal,] # row-normalize cbp_rn <- 100 * cbp / rowsum (cbp) # get row order(by max position) row_order <- order(apply(cbp_rn, 1, where .max), decline = TRUE) # melt into a dataframe rn_cbp. #Df <- reshape2::melt(cbp_rn[row_order,], varnames = c("region", "position"), value.name = "signal")
ggplot (rn_cbp。df, aes(x = position, y = region, fill = signal)) + geom_raster() + scale_fill_gradient(low = "white", high = "blue") + coord_cartesian(expand = FALSE) + labs(x = "距离TSS", y = NULL, title = "Row-Normalized PRO-seq", fill = "% signal ") + theme_bw() + theme(axis.ticks.)。Y = element_blank(), axis.text.y = element_blank())

请注意,这不是典型的PRO-seq热图的样子,但由于点染色体、低测序深度和没有基因筛选,这些数据非常稀疏。

3.黑名单

BRGenomics的许多功能都支持黑名单,或将某些位点排除在分析之外。要使用此特性,请将黑名单作为GRanges对象导入,并使用黑名单选项。

例如,getCountsByPositions ()支持黑名单,还有一个额外的选项,是否将所有黑名单网站设置为0计数,或设置这些网站等于NA。将它们设置为NA很有用,因为许多函数在计算中都有参数来忽略NA值,例如。意思是(x, na。rm = TRUE)

提供黑名单metaSubsample ()将导致黑名单位置在计算中被忽略。与黑名单重叠的区域不会被完全忽略,但被列入黑名单的位置本身不会影响计算。