SIMBA方法解读

news2024/11/26 15:30:34

fig1

目录

  • 预处理
    • scRNA-seq
    • scATAC-seq
  • 图构建(5种场景)
    • scRNA-seq分析
    • scATAC-seq分析
    • 多模态分析
    • 批次整合
    • 多模态整合
  • 图学习
  • SIMBA空间中查询实体
  • 识别TF-target genes

预处理

scRNA-seq

过滤掉在少于三个细胞中表达的基因。原始计数按文库大小标准化,然后进行对数转换。可选地,可以执行HVG选择以删除非信息性基因并加速训练过程。在将特征输入限制为通过HVG选择确定的特征输入时,未观察到所得细胞嵌入的显著差异,但不会生成非可变基因的 SIMBA 嵌入,因为它们未在图中编码。

scATAC-seq

过滤掉少于三个细胞中的peak。或者,实施一个可扩展的基于截断 SVD 的程序来选择峰,作为初步步骤,以额外过滤非信息峰并加速训练过程。首先,选择前 k 个主成分 (PC),其中 k 的选择基于方差图。然后,对于前 k 个 PC 中的每一个,使用由“kneed”实现的拐点检测算法根据载荷自动选择peak。最后,将为每个 PC 选择的峰组合起来并表示为“变量峰”。与使用 scRNA-seq 数据的观察结果类似,变量峰选择的可选步骤对生成的细胞嵌入的影响可以忽略不计。尽管对生成的嵌入的影响微乎其微,但此特征选择步骤在减少训练过程时间方面具有显着的实际优势。

使用 JASPAR2020 中的“Biostrings”和“motifmatchr”包执行 k-mer 和motif扫描。SIMBA 的实现中包含一个方便的 R 命令行脚本“scan_for_kmers_motifs.R”,它将peak列表(格式为 bed 文件)转换为稀疏的peaks-by-k mers和peaks-by-motifs矩阵,该矩阵存储为 hdf5 格式的文件。

图构建(5种场景)

scRNA-seq分析

在构建细胞和基因graph时,如果基因在给定细胞中表达,则在细胞和基因之间添加一条边。为了区分每条边的强度,提出了一种bins方法,将基因表达值分为不同的级别,同时保留原始分布。不同级别的基因表达由不同类型的关系编码。具体来说,首先使用基于 k-means 的程序近似归一化基因表达矩阵中非零值的分布。首先,将连续的非零值分箱到 n 个区间(默认情况下,n = 5)。使用一维 k 均值聚类定义箱宽,其中每个箱中的值分配给相同的聚类中心。然后将连续矩阵转换为离散矩阵,其中 1、…、n 用于表示 n 个基因表达级别。零值保留在此矩阵中。然后,通过将两种类型的实体(细胞和基因)编码为节点,将具有 n 个不同权重的关系(即 n 个基因表达级别)编码为边来构建图。这 n 个关系权重的范围从 1.0 到 5.0,步长为 5 / n,表示基因表达水平(最低:1.0,最高:5.0),因此与高表达水平相对应的边对嵌入的影响比中等或低表达水平的边更大。正如预期的那样,观察到,随着bins数量的增加,离散化分布接近原始分布。然而,表达分辨率的增加对生成的嵌入影响不大。此离散化是在 SIMBA 包中使用函数“si.tl.discretize()”实现的。

除了关系类型权重外,SIMBA 还支持在构建图时将基因表达值直接编码为边权重。此过程会生成与分箱过程类似的嵌入。这进一步表明离散化bins在捕获生物信息方面是有效的。这种对边权重的支持是在 SIMBA 包中使用函数“si.tl.gen_graph(add_edge_weights=True)”实现的。

scATAC-seq分析

peak-by-cell矩阵被二值化:“1”表示峰内至少有一个read,否则分配“0”。该图是通过将两种类型的实体(细胞和峰)编码为节点,将它们之间的关系(表示给定峰在细胞中的存在)编码为边来构建的。单个关系类型的权重为 1.0。当 DNA 序列特征可用时,它们被使用 k-mer 和motif实体作为节点编码到图中。这是通过首先将peak-by-k mer或peak-by-motif矩阵二值化,然后使用peak、k-mer 和motif作为节点,并使用peak内这些实体的存在作为这些额外节点和峰节点之间的边来构建原始peak-by-cell图的扩展。k-mer 和峰之间的关系被分配了 0.02 的权重,而 TF 基序之间的关系被分配了 0.2 的权重。值得注意的是,根据具体的分析任务,k-mers 和motif可以彼此独立地用作图的节点输入。

多模态分析

将上述使用 scRNA-seq 和 scATAC-seq 数据构建图的策略结合起来,构建了多组学图。

批次整合

按照“scRNA-seq分析”中所述构建每个批次的图。通过基于截断随机 SVD 的程序推断不同批次细胞之间的边缘,以链接不同批次的不相交图。更具体地说,在 scRNA 序列数据的情况下,考虑两个基因表达矩阵 X 1 n 1 × m X1_{n_{1}\times m} X1n1×m X 2 n 2 × m X2_{n_{2}\times m} X2n2×m,其中 n 1 n_{1} n1 n 2 n_{2} n2分别是两个批次的细胞数量, m m m是gene数量。

然后计算: X = X 1 × X 2 T X=X1\times X2^{T} X=X1×X2T随后对 X X X 执行截断随机 SVD: X = U × Σ × V T X=U\times \Sigma\times V^{T} X=U×Σ×VT其中, U U U n 1 × d n_{1}\times d n1×d的矩阵, Σ \Sigma Σ d × d d\times d d×d的矩阵, V V V n 2 × d n_{2}\times d n2×d的矩阵,默认 d = 20 d=20 d=20

U U U V V V 都进一步进行了 L2 归一化。对于 U U U 中的每个细胞,我们在 V V V 中搜索 k 个最近邻居,反之亦然(默认情况下,k = 20)。最终,只有 U U U V V V 之间的相互最近邻居被保留为细胞之间的边(注意是推断的边)。推断不同批次细胞之间的边的过程在 SIMBA 包中的函数“si.tl.infer_edges()”中实现。

对于多个批次,SIMBA 可以灵活地推断任意一对batch-pair之间的边。然而,在实践中,边是在最大的数据集或包含最完整预期细胞类型集的数据集与其他数据集之间推断的。

多模态整合

scRNA-seq 和 scATAC-seq 图分别按照“scRNA-seq 分析”和“scATAC-seq 分析”中的步骤构建。为了推断 scRNA-seq 和 scATAC-seq 细胞之间的边,首先计算 scATAC-seq 数据的基因活性分数(gene activity score)。更具体地说,对于每个基因,考虑 TSS (转录起始位点)上游和下游 100 kb 内的peak。与基因体区域重叠或在基因体上游 5 kb 内的peak的权重为 1.0。否则,使用指数衰减函数根据peak value与 TSS 的距离对其进行加权: e x p ( − d i s t a n c e 5000 ) exp(\frac{-distance}{5000}) exp(5000distance)。随后,将每个基因的gene score计算为所考虑峰值的加权和。然后将这些基因得分缩放到相应的基因大小。这些步骤由 SIMBA 中的函数“si.tl.gene_scores()”实现。为了方便用户,SIMBA 包整理了几个常用参考基因​​组的基因注释,包括 hg19、hg38、mm9 和 mm10。一旦获得基因得分,就执行“批次整合”中描述的相同程序,使用 SIMBA 中的函数“si.tl.infer_edges()”推断 scRNA-seq 和 scATAC-seq 分析的细胞之间的边。

生成图的过程在 SIMBA 包中的函数“si.tl.gen_graph()”中实现。

图学习

在构建生物实体之间的多关系图之后,作者采用了知识图谱和推荐系统中的图嵌入技术来为这些实体构建无监督表示。

提供一个input无向图 G = ( V , E ) G=(V,E) G=(V,E),其中 V V V是一组实体(节点) E E E是一组边,在源实体 u u u 和目标实体 v v v 之间存在通用边 e = ( u , v ) e = (u, v) e=(u,v)。进一步假设每个实体都有不同的已知类型(例如,细胞或peak)。

图嵌入方法通过随机梯度下降优化edge预测目标,为每个 v ∈ V v ∈ V vV 学习一个 D D D 维嵌入向量,其中实验中使用 D = 50 D = 50 D=50。实体 v v v的embedding记为 θ v \theta_{v} θv

对于edge e = ( u , v ) e=(u,v) e=(u,v),记 s e = θ u ⋅ θ v s_{e}=\theta_{u}\cdot\theta_{v} se=θuθv e e e的得分,损失为: L e = − l o g e x p ( s e ) ∑ e ′ ∈ N e x p ( s e ′ ) w e L_{e}=-log\frac{exp(s_{e})}{\sum_{e'\in N}exp(s_{e'})}w_{e} Le=logeNexp(se)exp(se)we其中, N N N是通过破坏 e e e 生成的一组“负样本”候选边, w e w_e we 是边权重,默认情况下是关系权重,但在每种关系类型中可能因边而异。例如,细胞和基因之间的边可以编码为具有不同边权重的单一关系,这些边权重编码标准化的基因表达水平(见“scRNA-seq分析”)。

通过将目标边 e = ( u , v ) e = (u, v) e=(u,v) 中的源实体或目标实体替换为随机采样的实体来构建负样本。因此,例如,对于cell-peak的边,仅对cell和peak实体之间的负候选样本进行采样。这种设置至关重要,因为大多数随机选择的边是无效的(例如,峰-峰)。

使用了 PyTorch-BigGraph 框架,该框架可以高效计算多种实体类型的多关系图嵌入,并且可以扩展到包含数百万或数十亿个实体的图。对于 130 万个细胞,PyTorch-BigGraph 训练本身仅需大约 1.5 小时,使用 12 个 CPU 核心,无需 GPU。

SIMBA空间中查询实体

信息丰富的 SIMBA 嵌入空间可用作实体(包括细胞和特征)的数据库。为了在“SIMBA 数据库”中查询给定细胞或特征的邻近实体,我们首先根据其 SIMBA 嵌入构建所有实体的 k-d 树。然后,使用欧几里得距离在树中搜索最近的邻居。为此,SIMBA 查询可以在指定半径内执行 k 最近邻居 (KNN) 或最近邻居搜索。SIMBA 还提供了将搜索限制为某些类型实体的选项,当某种类型的实体数量远远超过其他实体时,这很有用。例如,给定细胞的 k 个最近特征可能都是峰值,而基因是感兴趣的特征。在这种情况下,SIMBA 允许用户添加“过滤器”以确保在指定类型的实体内执行最近邻居搜索。此过程在函数“st.tl.query()”中实现,其可视化在 SIMBA 包中的函数“st.pl.query()”中实现。

识别TF-target genes

为了推断给定主调节因子的靶基因,我们假定,在共享的 SIMBA 嵌入空间中,(1)靶基因靠近 TF 基序和 TF 基因,表明靶基因的表达与 TF 的表达和 TF 基序的可及性高度相关,并且以细胞类型特异性的方式呈现;(2)靶基因位点附近的可及区域(峰)必须靠近 TF 基序和靶 TF 基因,表明靶基因位点附近的顺式调控元件的可及性与 TF 的表达和 TF 基序的可及性高度相关,并且以细胞类型特异性的方式呈现。

给定一个主调节因子,通过比较 SIMBA 共嵌入空间中 TF 基因、TF 基序和候选靶基因基因组位点附近的峰的位置来识别其靶基因。

更具体地说,我们首先分别搜索该主调节因子的基序(TF 基序)和基因(TF 基因)周围的 k 个最近邻基因(默认 k = 200)。这些邻居基因的并集就是初始的候选靶基因集。然后根据以下标准对这些基因进行筛选:假定靶基因 TSS 上游和下游 100 kb 内的开放区域(峰)必须包含 TF 基序。

接下来,对于每个候选靶基因,我们计算了 SIMBA 嵌入空间中的四种距离:(1) 候选靶基因与 TF 基因的嵌入之间的距离;(2) 候选靶基因与 TF 基序的嵌入之间的距离;(3) 候选靶基因与 TF 基序的基因组位点附近的峰之间的距离;以及 (4) 候选靶基因与其基因组位点附近的峰之间的距离。所有距离(默认为欧几里得距离)都转换为所有基因或所有峰之间的等级,以使距离在不同的主调节器之间具有可比性。

最终的靶基因列表由计算出的排名决定,使用两个标准:(1)TF 基因或 TF 基序最近的峰值中至少有一个在预定范围内;(2)候选靶基因的平均排名在预定范围内。此过程在 SIMBA 中的函数“st.tl. find_target_genes ()”中实现。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2024】零基础Python 快速入门篇

2023年是AI的元年,AI的爆火不仅推动了科技领域的进步,更让 Python 语言成为了这一变革中的关键角色。 Python 语言简单易懂,语法清晰明了,懂一点英语的都能学得会。很适合在职场摸爬滚打多年的前端组长作为捅破天花板的语言&…

引用(C++)和内联函数

前言&#xff1a;本文主要讲解C语法中引用如何使用和使用时的一些技巧 基本语法 引用就是取别名 #include <iostream> using namespace std; int main() {int a 10;int& b a;//给a取别名为bcout << a << endl;cout << b << endl;return 0…

后端开发面经系列 -- 华为C++一面面经

HUAWEI – C一面面经 公众号&#xff1a;阿Q技术站 来源&#xff1a;https://www.nowcoder.com/feed/main/detail/b8113ff340d7444985b32a73c207c826 1、计网的协议分几层&#xff1f;分别叫什么&#xff1f; OSI七层模型 物理层 (Physical Layer): 负责物理设备之间的原始比…

【介绍下Spark MLlib机器学习】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Flink的简单学习二

一 Flink的核心组件 1.1 client 1.将数据流程图DataFlow发送给JobManager。 1.2 JobManager 1.收集client的DataFlow图&#xff0c;将图分解成一个个的task任务&#xff0c;并返回状态更新数据给client 2.JobManager负责作业调度&#xff0c;收集TaskManager的Heartbeat和…

解决 Mac Django 连接Mysql 出现 image not found 问题

最近在使用 Django 框架&#xff0c;因为升级到4.2版本了&#xff0c;对应的本机 Mysql 5.7 就不适用了&#xff0c;于是升级到了 Mysql 8.0&#xff0c;写好代码之后出现如下错误&#xff1a; 仔细分析一下错误的描述&#xff1a; ImportError: dlopen(/Library/Frameworks/P…

Vue3——实现word,pdf上传之后,预览功能(实测有效)

vue-office/pdf - npm支持多种文件(**docx、excel、pdf**)预览的vue组件库&#xff0c;支持vue2/3。也支持非Vue框架的预览。. Latest version: 2.0.2, last published: a month ago. Start using vue-office/pdf in your project by running npm i vue-office/pdf. There are …

微信小程序下载、安装教程-2024年6月6日

微信小程序下载、安装教程-2024年6月6日 一、下载二、安装 一、下载 链接&#xff1a;https://pan.baidu.com/s/1pThpJEtOik9sgOI0F3mr_Q?pwdi1p3 提取码&#xff1a;i1p3 –来自百度网盘超级会员V6的分享 本文是用的网盘下载&#xff0c;具体都差不多。 或者从微信小程序官…

ArkTs-TaskPool和Worker的使用

TaskPool和Worker的区别 实现TaskPoolWorker内存模型线程间隔离&#xff0c;内存不共享。线程间隔离&#xff0c;内存不共享。参数传递机制 采用标准的结构化克隆算法&#xff08;Structured Clone&#xff09;进行序列化、反序列化&#xff0c;完成参数传递。 支持ArrayBuffe…

css-Ant-Menu 导航菜单更改为左侧列表行选中

1.Ant-Menu导航菜单 导航菜单是一个网站的灵魂&#xff0c;用户依赖导航在各个页面中进行跳转。一般分为顶部导航和侧边导航&#xff0c;顶部导航提供全局性的类目和功能&#xff0c;侧边导航提供多级结构来收纳和排列网站架构。 2.具体代码 html <!-- 左侧切换 --><…

生死战的主场,国足与泰国队1比1战平,遗憾失去了出线主动权

6月6日晚&#xff0c;于中国足球曾经的福地沈阳&#xff0c;中国男子国家足球队迎来了一场至关重要的对决&#xff0c;与泰国队展开了一场生死较量。在此前&#xff0c;中国队只需取胜即可提前一轮晋级&#xff0c;然而遗憾的是&#xff0c;国足未能把握住机会&#xff0c;再次…

C语言之旅:探索单链表

目录 一、前言 二、实现链表的功能&#xff1a; 打印 创建节点 尾插 尾删 头插 头删 查找 在指定位置之前插入数据 指定位置删除 在指定位置之后插入数据 打印 销毁 三、全部源码&#xff1a; 四、结语 一、前言 链表是一个强大且基础的数据结构。对于很多初…

uniapp中父子组件的传值

1. uniapp中父子组件的传值 1.1. 父子组件的传值 通过props来实现, 子组件通过props来接收父组件传过来的值 1.1.1. 父组件 <!-- 父组件 --> <template><view><my-son :title"title" sendData"getSonData"></my-son><…

项目实战系列——WebSocket——websock简介

最近项目中需要用到mes和本地客户端进行实时通讯&#xff0c;本来想用webapi进行交互的&#xff0c;但是考虑到高效和实时性&#xff0c;就采用这一项技术。 以往采用的方式——长轮询 客户端主动向服务器发送一个请求&#xff0c;如果服务器没有更新的数据&#xff0c;客户端…

numpy的基本使用

一、NumPy 的主要特性和功能&#xff1a; 多维数组对象&#xff08;ndarray&#xff09;&#xff1a; NumPy 的核心是 ndarray 对象&#xff0c;它是一个多维数组&#xff0c;可以存储相同类型的元素。ndarray 对象具有固定大小&#xff0c;支持矢量化运算和广播功能&#xff0…

Vue3的ref创建一个全局变量,非常好用!

1. 前言 Vue3的ref对象我们都知道其用法,通过ref可以创建一个响应式对象使用,同时可以用compute,watch等Vue3的API对其进行操作 不同于Vue2的是,Vue3使用的是组合式API,这也就意味着,我可以在外部单独创建一个ref对象,然后保存,通过导出的方式,给其他的页面使用 理论存在,开始…

Python 机器学习 基础 之 算法链与管道 【通用的管道接口/网格搜索预处理步骤与模型参数/网格搜索选择使用哪个模型】的简单说明

Python 机器学习 基础 之 算法链与管道 【通用的管道接口/网格搜索预处理步骤与模型参数/网格搜索选择使用哪个模型】的简单说明 目录 Python 机器学习 基础 之 算法链与管道 【通用的管道接口/网格搜索预处理步骤与模型参数/网格搜索选择使用哪个模型】的简单说明 一、简单介…

【网络安全的神秘世界】Kali安装中文输入法

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 今天就手把手教你如何在kali中安装和配置输入法 首先&#xff0c;打开终端&#xff0c;输入下面这行代码&#xff1a; # sudo apt install ibus ibus-pi…

Python第二语言(四、Python数据容器)

目录 一、 数据容器&#xff08;list、tuple、str、map、dict&#xff09; 1. 数据容器概念 2. 列表list&#xff08; [] &#xff09; 2.1 定义方式 2.2 嵌套列表 2.3 list通过获取下标索引获取值 2.4 下标使用概念 2.5 list列表的使用&#xff08;列表的方法&#xff…

【研发日记】Matlab/Simulink软件优化(二)——通信负载柔性均衡算法

文章目录 前言 背景介绍 初始代码 优化代码 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 背景介绍 在一个嵌入式软件开发项目中&#xff0c;需要设计一个ECU节点的CAN网路数据发送&#xff0c;需求是在500k的通信波特率上&a…