3D-Genome | Hi-C互作矩阵归一化指南

Hi-C 是一种基于测序的方法,用于分析全基因组染色质互作。它已广泛应用于研究各种生物学问题,如基因调控、染色质结构、基因组组装等。Hi-C 实验涉及一系列生物化学反应,可能会在输出中引入噪声。随后的数据分析也会产生影响最终输出噪声:互作矩阵,其中矩阵中的每个元素表示基因组任意两个区域之间的互作强度。因此,Hi-C 数据分析的关键步骤是消除此类噪声,该步骤也称为 Hi-C 数据归一化。

归一化方法

为了归一化 Hi-C matrix,可以采用以下多种方法[1]

  • Iterative Correction (IC) :该方法通过消除实验过程中的偏差来归一化原始接触图。这是一种矩阵平衡的方法,但是,在归一化的情况下,行和列的总和不等于1。
  • Knight-Ruiz Matrix Balancing (KR):Knight-Ruiz (KR) 矩阵平衡是一种归一化对称矩阵的快速算法。归一化后获得双随机矩阵。在这个矩阵中,行和列的总和等于一。
  • Vanilla-Coverage (VC) :该方法首先用于染色体间图谱。后来 Rao 等人,2014 年将其用于染色体内图谱。这是一种简单的方法,首先将每个元素除以相应行的总和,然后除以相应列的总和。
  • Median Contact Frequency Scaling (MCFS):此方法可用于使用两个位置/坐标之间的特定距离的中值接触值来归一化接触图。首先,计算每个距离的中值距离接触频率。随后,观察到的接触频率除以根据两个位置之间的距离获得的中值接触频率。

方法详解

早期的 Hi-C 数据归一化方法主要关注引起噪声的显性因素。切割酶位点、基因组映射、GC 含量等因素使测序读数在基因组中分布不均匀,从而在计算成对互作时引入偏差。根据这些想法,Imakaev 等人提出了一种能够“implicitly”处理所有噪声源的方法。背后的想法实际上非常简单:因为 Hi-C 理论上是一个无偏的实验,所有基因组区域的“visibility”应该是相等的。另一个假设是 Hi-C 实验的所有偏差都是一维且可分解的。基于这些假设,一个解决方案是将原始互作矩阵分解为两个一维偏差和一个行和列之和为相同值的归一化矩阵的乘积。

Imakaev提出的方法在矩阵理论中也称为矩阵平衡。矩阵平衡是一个古老的数学问题,可以追溯到一个世纪前。人们已经开发了许多矩阵平衡方法,包括普通覆盖率 (VC)、Sinkhorn & Knopp (SK) 和 Knight & Ruiz 方法 (KR)。

VC是通过将矩阵的每个元素除以其行和和列和来完成的,以去除每个位点的不同测序覆盖度。 VC可以被认为是SK方法的单次迭代。在SK中,重复执行VC过程,直到所有行和列的总和为相同的值。 S&K 这个过程会收敛。

Rao 等人回顾了所有矩阵平衡方法,并将 KR 方法引入 Hi-C 数据。基于K&R的原始论文,KR方法比SP快几个数量级,这使得它适合平衡高分辨率矩阵。实际上,即使在 10kb 分辨率下,ICE 的 SP 实现也非常快。根据我的经验,ICE 和 KR 之间的速度差异可以忽略不计。然而,KR 有一个缺点,即当矩阵太稀疏时,KR 过程可能无法收敛。在我的研究中,当我使用 Juicer tools 在低测序数据集上生成 KR 归一化矩阵得到了一个空矩阵,这种情况发生了几次。

矩阵平衡的算法其实并不难,我们如何计算 Hi-C 互作矩阵的平衡矩阵呢?下面的Python类中实现了VC和SP方法。对于小矩阵来说,这种实现速度很快。

class HiCNorm(object):
    def __init__(self, matrix):
        self.bias = None
        self.matrix = matrix
        self.norm_matrix = None
        self._bias_var = None

    def iterative_correction(self, max_iter=50):
        mat = np.array(self.matrix, dtype=float)
        row_sum = np.sum(mat, axis=1)
        low_count = np.quantile(row_sum, 0.15)
        mask_row = row_sum < low_count
        mat[mask_row, :] = 0
        mat[:, mask_row] = 0

        self.bias = np.ones(mat.shape[0])
        self._bias_var = []
        x, y = np.nonzero(mat)
        mat_sum = np.sum(mat)

        for i in range(max_iter):
            bias = np.sum(mat, axis=1)
            bias_mean = np.mean(bias[bias > 0])
            bias_var = np.var(bias[bias > 0])
            self._bias_var.append(bias_var)
            bias = bias / bias_mean
            bias[bias == 0] = 1

            mat[x, y] = mat[x, y] / (bias[x]*bias[y])
            new_sum = np.sum(mat)
            mat = mat * (mat_sum / new_sum)

            self.bias = self.bias * bias * np.sqrt(new_sum / mat_sum)

        self.norm_matrix = np.array(self.matrix, dtype=float)
        self.norm_matrix[x, y] = self.norm_matrix[x, y] / (self.bias[x] * self.bias[y])

    def vanilla_coverage(self):
        self.iterative_correction(max_iter=1)

上述算法背后的想法是,我们首先将偏差设置为矩阵每行的总和,并将每个矩阵元素除以其行和列的偏差。重复这两个步骤直到满足收敛标准。我们可以使用偏差的方差(self.bias)来监控平衡过程的收敛性(如下图所示)。

alt

原始互作矩阵、通过 SP 方法和 VC 方法归一化的矩阵绘制为热图,如下所示。我们可以看到,归一化矩阵中远离对角线的区域比原始矩阵更干净,但我们几乎看不到 SP 和 VC 方法之间的差异。在实践中,我们在归一化之前预先过滤具有非常小的值的行。上面的脚本通过将这些行的元素设置为零来过滤掉总和低于所有行总和的 15 分位数的行。

alt

然而,我们可以通过检查相同距离的互作的相关性来量化 SP 和 VC 归一化方法的差异。为此,我们提取并计算两个矩阵的第 d 对角线的相关性,其中 d 是两个基因组区域的距离(在 bin 处)。从下图可以看出,虽然所有三种方法在长距离(>10 Mb)下都类似于原始矩阵,但 SP 与原始矩阵稍微相似。三种方法的成对比较表明,SP 和 VC 高度相似,只是迭代次数不同。 KR 比 VC 更类似于 SP,但差异可以忽略不计。 [注:KR矩阵是用straw API从.hic文件中获得的]。

alt

实际上,Hi-C 归一化仅通过染色体内、仅染色体间或两者来完成。仅对于染色体内,分别在每条染色体上进行 KR 或 ICE。仅对于染色体间,获得全基因组矩阵并从中去除染色体内互作。当包括染色体间相互作用时,高分辨率归一化需要大量内存。因此,归一化通常在全基因组矩阵上以 25kb 或 50kb 分辨率进行。

一个自然的问题是,去除染色体间互作是否会对染色体内互作的产生影响?为了回答这个问题,我对所有互作点和仅染色体内互作点进行了 SP 标准化。同样,通过所有互作归一化和仅通过染色体内互作归一化之间的差异非常小。 Juicer tools 和 Cooler 都默认使用所有触点进行归一化。

alt

总结

那么我应该对数据使用哪种归一化方法?

答案可能是这真的不重要。正如 Rao 等人和我们的分析所示,在 VC、ICE(SP)、KR 和其他几种矩阵平衡方法之间观察到高度相关性。 Rao等人在他们的研究中进一步指出,循环调用不受不同归一化方法的影响。他们甚至表明,当对原始数据调用峰值时,循环几乎相同,这让我怀疑我们是否需要矩阵归一化。虽然Rao等人确实提到VC倾向于过度修正互作图并提出VCSQ来补充VC,但我还没有看到有人拿出明确的证据表明KR/ICE优于VC/VCSQ。每种方法的优缺点总结如下:

方法优点缺点
VC/VCSQ过度矫正
ICE (SP)稳健
KR快,尤其是用于高分辨率低分辨率不稳定

总之,仍然建议将归一化作为实践的一部分。选择 KR 还是 ICE 在很大程度上取决于您使用的流程(Juicer tools 或 Cooler),但如果您的测序深度相对较低,推荐 ICE,因为它可以保证收敛。

Reference
[1]

methods: https://gcmapexplorer.readthedocs.io/en/latest/cmapNormalization.html

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/439147.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PandasAI—让AI做数据分析

安装 pip install pandasai !pip install --upgrade pandas pandasai 导入依赖项 import pandas as pdfrom pandasai import PandasAIfrom pandasai.llm.openai import OpenAI使用pandas创建一个数据框 df pd.DataFrame({"country": ["United States",…

VisionPro 判断圆是不是无限接近圆或存在缺陷

项目上可能需要判断圆是否是无限接近圆或者判断圆边缘是否存在缺陷等。 第一种方法&#xff1a;找圆工具和点到点的距离计算圆边缘上的点到圆心距离的最大值和最小值的差值。 #region namespace imports using System; using System.Collections; using System.Drawing; usin…

Batch Nomalization 迁移学习

Batch Nomalization 1.Batch Nomalization原理 图像预处理过程中通常会对图像进行标准化处理&#xff0c;这样能够加速网络的收敛。就是按照channel去求均值和方差&#xff0c;然后原数据减均值除标准差&#xff0c;使我们的feature map满足均值为0&#xff0c;方差为1的分布…

AI助力剧本创作:如何5分钟内构思出热门短剧大纲

人工智能重塑短剧行业&#xff1a;从剧本创作到市场推广 在当今短剧行业的飞速发展中&#xff0c;剧本创作的质量及其更新的速度已然成为短剧能否转化为热门作品的关键性因素。然而&#xff0c;随着短剧创作成本的日益攀升&#xff0c;一个卓越的剧本无论在创作时间上还是在构思…

基于SpringBoot+MYSQL的大学生租房平台

目录 1、 前言介绍 2、主要技术 3、系统流程 3.1、操作流程 3.2、登录流程 3.3、删除信息流程 3.4、添加信息流程 4、功能需求 5、系统设计 5.1、功能结构设计 5.1、数据库概念设计 6、运行截图(部分) 6.1、管理员功能实现 6.1.1、房东管理 6.1.2、信息审批管理 …

物联网在智慧城市建设中的关键作用:连接、感知、智能响应

一、引言 随着信息技术的飞速发展&#xff0c;物联网&#xff08;IoT&#xff09;技术已经渗透到我们生活的方方面面&#xff0c;特别是在智慧城市建设中发挥着至关重要的作用。智慧城市是指通过运用先进的信息和通信技术&#xff0c;实现城市基础设施、公共服务、交通管理、环…

断开服务器仍后台运行程序

1.可以使用nohup命令&#xff1a; nohup python xx.py 2>1& 不要忘记 2>1& 之后会返回一个进程号&#xff08;记不住也没关系&#xff0c;可以看3&#xff09;&#xff0c;此时程序就在后台运行了&#xff0c;与服务器断开连接也能正常运行 2.在终端实时打印…

ai绘画是怎么画的?ai绘画算法揭秘 - AI绘画每日一帖

“ AI 绘画通过CLIP技术建立「文字潜在空间」到「图片潜在空间」的对应关系&#xff0c;并通过 Diffusion 技术从一张噪点图得到一张有信息的高清图。 在 一文讲透ai作画原理技术 一文中&#xff0c;我们介绍了ai绘画的基本原理&#xff0c;这背后更详细的ai绘画算法是什么&…

Visual Studio如何进行类文件的管理(类文件的分离)

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 一、问题背景 实际开发中&#xff0c;类的声明放在头文件中&#xff0c;给程序员看类的成员和方法。比如&#xff1a;Dog.h&#xff08;类的声明文件&#xff09; 类的成员函数的具体…

stable diffusion 原理是什么?

“ 这篇文章主要介绍了Stable Diffusion&#xff0c;这是一种用于AI绘画的算法&#xff0c;它是由CompVis和Runway团队在2021年12月提出的“潜在扩散模型”&#xff08;LDM/Latent Diffusion Model&#xff09;的变体&#xff0c;基于2015年提出的扩散模型&#xff08;DM/Diffu…

场景问题: VisualVM工具Profiler JDBC不是真实执行的SQL

1. 问题 诡异的问题表象&#xff1a; 前端反馈分页接口的Total字段一直为0 使用Visualvm中的 Profiler 注入到应用后&#xff0c;查看JDBC监控得到了分页接口执行的SQL&#xff0c;复制出来执行是55. 此时还没有注意到 IN 的范围中有一个特别的值 NULL &#x1f928; 2. 排查…

2834. 找出美丽数组的最小和

文章目录 [2834. 找出美丽数组的最小和](https://leetcode.cn/problems/find-the-minimum-possible-sum-of-a-beautiful-array/)思路&#xff1a;代码&#xff1a; 2834. 找出美丽数组的最小和 思路&#xff1a; 1.n 是数组的长度。k 是题目中的target。m 的值是通过取k / 2和…

提取pdf图档中的物料编码

一、摘要 图1 图档示例 本篇代码目的是从指定文件夹下的PDF文件中提取物料编码等相关信息&#xff0c;并将这些信息存储在列表中输出。这段代码主要实现了以下功能&#xff1a; 定义一个file_name函数&#xff0c;用于获取指定文件夹下所有文件的完整路径。通过遍历文件夹和子文…

UOS 与 Ubuntu 命令行打开安装包界面,双击打开界面调用安装包界面展示

UOS 使用deepin-deb-installer安装程序 deepin-deb-installer xxxxxxx.deb & Ubuntu snap-store --local-filename /home/seven/wps-office_1xxxxxxx.deb &

Android14音频进阶:AudioTrack如何拿到AudioFlinger创建的匿名共享内存(六十)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

聚观早报 | 腾讯QQ测试AI对话功能;哪吒L官宣4月交付

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月8日消息 腾讯QQ测试AI对话功能 哪吒L官宣4月交付 中国对瑞士等6国试行免签 Redmi K70至尊版细节曝光 Meta正…

如何阅读“计算机界三大神书”之一 ——《计算机程序的构造和解释》SICP

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

git分布式管理-头歌实验冲突处理、忽略文件

一、解决冲突 任务描述 在团队协作开发过程中&#xff0c;可能你和团队中的其他成员&#xff0c;都修改了某个文件的某一部分内容&#xff0c;且其他成员已将该修改推送到了远程仓库。这样当你需要合并他的代码的时候&#xff0c;可能就会在内容上出现冲突&#xff0c;这个时候…

男人对年轻女人都吃不消是什么原因呢?

在这个快节奏的时代&#xff0c;男人与女人之间的关系变得越来越复杂。在许多情况下&#xff0c;男人对年轻女人都感到吃不消&#xff0c;这究竟是为什么呢&#xff1f; 首先&#xff0c;我们不得不承认&#xff0c;现代社会的价值观和审美观念发生了很大的变化。年轻女性越来越…

当GPT遇到网络安全

ChatGPT&#xff1a;是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。GPT 是 …