摘要

表观基因组学研究需要综合分析和整合多种类型的数据及注释,以提取出具有生物学意义的信息。在这种背景下,复杂的数据可视化技术对于识别与基因组坐标相关数据中的有意义模式至关重要。Hi-C 接触矩阵的数据可视化尤其复杂,因为每个数据点都代表两个远距离基因组位点之间的相互作用,而且需要考虑它们的三维空间定位。在本系列中,我们展示了如何生成复杂的图表,将 Hi-C 数据与其他基因组特征和表观基因组学数据的注释相结合。

简介

Hi-C 数据是由成对的接触矩阵组成的,这些矩阵记录了基因组位点之间相互作用的概率。基因组位点通常被划分为相邻的、不重叠的基因组窗口,通常称为“bins”,它们汇总了其组成限制性片段的接触频率。随着技术的不断发展,为了提高 Hi-C 数据对最终用户的可解释性,已经开发出多种数据可视化方法。这些方法包括接触矩阵的热图表示、基于弧线的远距离接触表示,以及基于网络图的方法。

在这些方法中,热图已经成为可视化 Hi-C 接触图的标准方式。在热图中,Hi-C 数据被显示为一个方形网格,接触频率通过颜色梯度表示,相互作用的基因组坐标分别标注在 x 轴和 y 轴上。当展示染色体内(cis)相互作用时,热图会在其对角线周围形成对称图像,导致信息重复。为了避免这种重复,一种常用的方法是仅展示用户选择的接触矩阵上三角部分的一部分,通过沿主对角线切片并旋转图像,使得 x 轴显示基因组坐标,而 y 轴显示基因组位点之间的距离。

热图和其他上述数据表示方法主要关注接触频率图中的单个数据点。而其他常用的 Hi-C 数据表示方法则是通过在多个位置汇总接触频率,以获得按特定特征分层的接触汇总。例如,Hi-C 相互作用衰减曲线用于展示 Hi-C 相互作用随基因组距离变化的全局和局部模式 [7, 8]。由于接触频率通常会随位点之间距离的幂律函数而衰减,因此平均接触频率与距离的对数 - 对数图常被用作质量控制的手段。

HiCBricks

在本文中,将利用 BioconductorHiCBricks 软件包来处理高分辨率的 Hi-C 数据。分析的第一步是将存储在 mcool 文件中的数据导入到 R 中,并将其存储为 Brick 对象。这需要完成两个步骤:(1) 从 mcool 文件生成 Brick 对象,然后 (2) 将数据加载到对应的 Brick 对象中。

下面提供的示例代码可以在 R 的交互式会话中运行。用户也可以将代码保存到一个脚本文件中,之后通过命令行运行。

数据导入

首先,将工作目录切换到之前定义的“HiC_visualisation”,并检查是否存在一个名为 Brick_objects 的目录,如果不存在,则创建该目录。

Project_dir <- file.path(Sys.getenv("HOME"), "HiC_visualisation")
setwd(Project_dir)
Bricks_dir <- file.path(Project_dir, "Brick_objects")
if(!dir.exists(Bricks_dir)){dir.create(Bricks_dir)}

然后,将Hicbricks库导入当前R会话中。

library("HiCBricks")

如前文所述,mcool 文件可能会包含在多个不同分辨率下汇总的数据。由于 Brick 对象是从 mcool 文件中基于特定分辨率创建的,因此 Brick_list_mcool_resolutions 函数可以让用户预先查看 mcool 文件中包含的分辨率。

mcool_file <- "4DNFIXP4QG5B.mcool"
Brick_list_mcool_resolutions(mcool = mcool_file)

出于演示目的,会加载其中部分分辨率的数据,但在本练习后续的分析中,仅会使用较低分辨率(100 kb)的接触矩阵。

Resolutions <- c(100000, 50000)
for(resolution in Resolutions) {
    My_Brick_object <-Create_many_Bricks_from_mcool(output_directory = Bricks_dir,
    file_prefix = "4DN_GM12878_hg38_visualisation", mcool = mcool_file, resolution =
    resolution, remove_existing = TRUE)
}

Create_many_Bricks_from_mcool 函数利用 mcool 文件中指定分辨率的分箱信息来创建所需的数据结构。第一个分辨率用于构建初始数据结构,而后续分辨率会继承第一个分辨率的公共参数。在该函数中,output_directory 指定用于存储所有砖块文件的路径;file_prefix 是输出 Brick_object 中所有文件的文件名前缀;mcool 是 mcool 文件的路径;resolution 是从 mcool 文件中选择的分辨率;remove_existing 的值为 TRUE 或 FALSE。如果为 TRUE,且该分辨率之前已加载过,则与该特定分辨率相关的整个数据结构将被替换。在“for”循环的每次迭代中,即对于上述列出的每个分辨率,都会保存一组独立的文件。完成后,My_Brick_object 包含有关 Brick 对象的可读信息。该对象属于 BrickContainer 类,与该对象相关的 HiCBricks 方法可以通过“BrickContainer_”前缀访问。

为了将数据加载到之前创建的 Brick 对象中,用户需要使用 Brick_load_data_from_mcool 来加载特定分辨率的数据。由于 mcool 文件中包含多种归一化方法,因此需要指定一种特定的归一化方法或 NULL。如果指定为 NULL,则仅加载“观察值”,即未经归一化的计数;如果指定了归一化类型,则会使用 mcool 文件中对应的归一化因子对观察值进行归一化。默认的归一化因子是“Iterative-Correction”。用户可以通过 Brick_list_mcool_normalisations 方法列出可用的归一化因子。该方法可以列出通过 HiCBricks 导入的可用归一化因子,但它不会检查这些因子是否存在于 mcool 文件中。

Brick_list_mcool_normalisations()

如果想确认 mcool 文件中是否存在某个特定的归一化因子,可以使用 Brick_mcool_normalisation_exists 函数来检查。

Brick_mcool_normalisation_exists(mcool = mcool_file, resolution = 100000, norm_factor = "Knight-Ruitz")

在确定了归一化因子之后,就可以开始加载数据了。

Brick_load_data_from_mcool(Brick = My_Brick_object, mcool = mcool_file, resolution = 100000, norm_factor = "Knight-Ruitz")

此外,这个软件包还提供了其他数据加载方法。例如,Brick_load_data_from_sparse 可以只加载稀疏矩阵的上三角非零值;Brick_load_matrix 用于加载单个染色体(染色体内或“cis”相互作用)或染色体对(染色体间或“trans”相互作用)的接触矩阵;

Brick_load_cis_matrix_till_distance 则可以加载单个 cis 接触矩阵,并且可以根据位点之间的指定距离限制数据加载范围。此外,还可以通过 load_BrickContainer 函数在后续时间访问这些对象。

My_Brick_object <- load_BrickContainer(project_dir= Bricks_dir)

本文由mdnice多平台发布


科学冷冻工厂
29 声望4 粉丝