深圳网站开发外包哪家好/seo关键词快速提升软件官网
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)来监控平衡过程的收敛性(如下图所示)。

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

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

实际上,Hi-C 归一化仅通过染色体内、仅染色体间或两者来完成。仅对于染色体内,分别在每条染色体上进行 KR 或 ICE。仅对于染色体间,获得全基因组矩阵并从中去除染色体内互作。当包括染色体间相互作用时,高分辨率归一化需要大量内存。因此,归一化通常在全基因组矩阵上以 25kb 或 50kb 分辨率进行。
一个自然的问题是,去除染色体间互作是否会对染色体内互作的产生影响?为了回答这个问题,我对所有互作点和仅染色体内互作点进行了 SP 标准化。同样,通过所有互作归一化和仅通过染色体内互作归一化之间的差异非常小。 Juicer tools 和 Cooler 都默认使用所有触点进行归一化。

总结
那么我应该对数据使用哪种归一化方法?
答案可能是这真的不重要。正如 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,因为它可以保证收敛。
methods: https://gcmapexplorer.readthedocs.io/en/latest/cmapNormalization.html
本文由 mdnice 多平台发布
相关文章:

3D-Genome | Hi-C互作矩阵归一化指南
Hi-C 是一种基于测序的方法,用于分析全基因组染色质互作。它已广泛应用于研究各种生物学问题,如基因调控、染色质结构、基因组组装等。Hi-C 实验涉及一系列生物化学反应,可能会在输出中引入噪声。随后的数据分析也会产生影响最终输出噪声&…...

【设计者模式】单例模式
文章目录 1、模式定义2、代码实现(1)双重判空加锁方式两次判空的作用?volatile 关键字的作用?构造函数私有? (2)静态内部类【推荐】(3)Kotlin中的单例模式lateinit 和 by…...

Windows7缺失api-ms-win-crt-runtime-l1-1-0.dll的解决方法
api-ms-win-crt-runtime-l1-1-0.dll是一个在Windows操作系统环境下至关重要的动态链接库文件(DLL),它是Microsoft Visual C Redistributable的一部分,负责实现C运行时库的相关功能。这个特定的DLL文件提供了大量的底层运行支持&am…...

coqui-ai/TTS 安装使用
Coqui AI的TTS是一款开源深度学习文本转语音工具,以高质量、多语言合成著称。它提供超过1100种语言的预训练模型库,能够轻松集成到各种应用中,并允许用户通过简单API进行个性化声音训练与微调。其技术亮点包括但不限于低资源适应性࿰…...

Spring AOP相关注解及执行顺序
Aspect(切面):用于标识一个类是切面的注解。通常与其他通知注解一起使用,定义切面类。 Pointcut(切点): 注解来定义切点,它用于描述哪些连接点将会被通知所通知。 连接点ÿ…...

C++从零开始的打怪升级之路(day44)
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于二叉搜索树的知识点 1.二叉搜索树概念 二叉搜…...

[C++核心编程](七):类和对象——运算符重载*
目录 四则运算符重载 左移运算符重载 递增运算符重载 赋值运算符重载 关系运算符重载 函数调用运算符重载 对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型 四则运算符重载 对自定义数据类型实现四则运算(加减乘除&…...

什么是MVC和MVVM
**MVC和MVVM是两种流行的软件架构模式,它们在前端开发中被广泛采用来组织代码和管理应用程序的复杂性**。具体如下: MVC(Model-View-Controller): 1. 模型(Model):负责管理数据和业…...

物体检测-系列教程23:YOLOV5 源码解析13 (SPP层、Flatten模块、Concat模块、Classify模块)
😎😎😎物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 17、SPP模块 17.1 SPP类 SPP是一种特殊的池化策略,最初在YOLOv3-SPP中被使用…...

2024.3.6每日一题
LeetCode 找出数组中的 K -or 值 题目链接:2917. 找出数组中的 K-or 值 - 力扣(LeetCode) 题目描述 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 nums 中的 K-or 是一个满足以下条件的非负整数: 只有在 nums 中&…...

YOLOSHOW - YOLOv5 / YOLOv7 / YOLOv8 / YOLOv9 基于 Pyside6 的图形化界面
YOLOSHOW 是一个基于 PySide6(Qt for Python)开发的图形化界面应用程序,主要用于集成和可视化YOLO系列(包括但不限于YOLOv5、YOLOv7、YOLOv8、YOLOv9)的目标检测模型。YOLOSHOW 提供了一个用户友好的交互界面ÿ…...

sql高级
sql高级 SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。 **注意:**并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, O…...

更快更强,Claude 3全面超越GPT4,能归纳15万单词
ChatGPT4和Gemini Ultra被Claude 3 AI模型超越了? 3月4日周一,人工智能公司Anthropic推出了Claude 3系列AI模型和新型聊天机器人,其中包括Opus、Sonnet和Haiku三种模型,该公司声称,这是迄今为止它们开发的最快速、最强…...

devc++小游戏3.8.5
导航: Dev-c跑酷小游戏 1.0.0 devc跑酷小游戏1.2.5 devc跑酷游戏1.2.6 devc跑酷游戏2.0.0 devc跑酷游戏2.0.1 devc跑酷游戏2.4.0 devc跑酷小游戏3.5.0 更新内容 重磅回归,存档搞定!!! 每一关需要前一关已…...

Java网络通信TCP
目录 TCP两个核心类 服务端 1.用ServerSocker类创建对象并且手动指定端口号 2.accept阻塞连接服务端与客户端 3.给客户端提供处理业务方法 4.处理业务 整体代码 客户端 1.创建Socket对象,并连接服务端的ip与端口号 2.获取Socket流对象,写入数据…...

层级锁笔记
注意看test_hierarchy_lock函数:如果thread t2的不注释,就会报错。 这是因为层级锁 更强调单个线程内上锁的顺序。 线程t2已经获取了hmtx2,再试图获取hmtx1就会因为违反层级顺序而抛出异常。 #include <mutex> #include <thread&g…...

基于SpringBoot+Vue 的专家医院预约挂号系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

计算机基础专升本笔记十二-Excel常用快捷键大全
计算机基础专升本笔记十二-Excel常用快捷键大全 Excel常用快捷键 按键作用Ctrl 0隐藏列Ctrl 1设置单元格格式Ctrl 2添加或取消字体加粗Ctrl 3添加或取消字体倾斜Ctrl 4添加或取消下划线Ctrl 5添加或取消删除线Ctrl 6隐藏或显示图形Ctrl 7隐藏工具栏Ctrl 8隐藏或显示…...

制作耳机壳的UV树脂和塑料材质相比优势有哪些?
制作耳机壳的UV树脂相比塑料材质有以下优势: 高强度与耐磨性:UV树脂具有高强度和耐磨性,能够更好地保护耳机内部零件,延长耳机使用寿命。相比之下,塑料材质可能较易磨损或刮伤。耐高温:UV树脂具有较好的耐…...

JS(JavaScript)中如何实现,复选框checkbox多选功能
起始界面: 代码元素: <p><input type"checkbox" id"checkedAll"> 全选按钮</p><p><input type"checkbox" class"cl"> 选项1</p><p><input type"checkbox&qu…...

直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容
xilinx zynq petalinux 默认编译打包出的SPI flash烧写启动文件是BOOT.BIN,然而每次需要修改rootfs内的文件时都要重新build rootfs 然后再 package一次才能生成新的BOOT.bin文件,地球人都知道petalinux编译一次是很耗时间的,那么有没有什么简…...

什么是 Golang 类型断言
类型断言:用于检查某个接口是否包含某个具体类型,语法x.(T),x是一个接口类型表达式,T是具体的类型,如果x包含的值可以被转换成T类型,则是ok 在Go语言中,任何类型的值都属于空接口类型。空接口类…...

mysql数据库root权限读写文件
如果没有shell,只有数据库权限的情况下: 1. udf 提权提示没有目录:使用数据流创建目录 1. select xxx into outfile C:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib\::$INDEX_ALLOCATION;2. select xxx into outfile C:\\phpstudy_pro\…...

力扣爆刷第88天之hot100五连刷26-30
力扣爆刷第88天之hot100五连刷26-30 文章目录 力扣爆刷第88天之hot100五连刷26-30一、142. 环形链表 II二、21. 合并两个有序链表三、2. 两数相加四、19. 删除链表的倒数第 N 个结点五、24. 两两交换链表中的节点 一、142. 环形链表 II 题目链接:https://leetcode.…...

Ethersacn的交易数据是什么样的(2)
分析 Raw Transanction RLP(Recursive Length Prefix)是一种以太坊中用于序列化数据的编码方式。它被用于将各种数据结构转换为二进制格式,以便在以太坊中传输和存储。RLP 是一种递归的编码方式,允许对复杂的数据结构进行编码。所…...

学习Android的第二十二天
目录 Android ContextMenu 上下文菜单 ContextMenu 范例 参考文档 Android SubMenu 子菜单 范例 参考文档 Android PopupMenu 弹出菜单 范例 参考文档 Android ContextMenu 上下文菜单 在Android开发中,ContextMenu(上下文菜单)为…...

JavaScript——流程控制(程序结构)
JavaScript——流程控制(程序结构) 流程控制就是来控制我们的代码按照什么结构顺序来执行。更倾向于一种思想结构。 流程控制分为三大结构:顺序结构、分支结构、循环结构 1、顺序结构 代码从上往下依次执行,从A到B执行&#x…...

如何用ChatGPT+GEE+ENVI+Python进行高光谱,多光谱成像遥感数据处理?
原文链接:如何用ChatGPTGEEENVIPython进行高光谱,多光谱成像遥感数据处理? 第一:遥感科学 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 第二:ChatGPT ChatGPT可以做什么? ChatGPT演示使用 …...

AIGC工具( 7个 )
人工智能技术有好的一方面,又不好的地方,要区别对待,吸取精华,去其糟粕。目前市场上有很多AI大模型,可以支持聊天,写文稿,创作等,部分可以生成图片,以下是7个很不错的免费…...

学习Java的第一天
一、Java简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。 后来 Sun 公司被 Oracle (甲骨文)公司收购,Jav…...