SIMBA方法解读

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 ()”中实现。

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

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

相关文章

三丰云免费虚拟主机及免费云服务器评测

三丰云是一家专业的云服务提供商,其免费虚拟主机和免费云服务器备受好评。三丰云提供稳定可靠的服务,完全免费的虚拟主机和云服务器让用户可以轻松搭建自己的网站或应用。自从开始使用三丰云的免费虚拟主机和免费云服务器后,我的网站访问速度…

谷歌账号的注册到使用GitHub

一、浏览器扩展 浏览器扩展谷歌学术 二、注册谷歌邮箱 https://support.google.com/accounts/answer/27441?hlzh-hans 1.打开无痕模式(ctrlshiftn) 2.输入网址 3.选择个人账号 4.填写信息(随便填就行) (以上步骤有时…

SAS:import进来的excel数据集中的空格无法去除

目的:如果去除ECGTPT中的空格? 尝试:用compress函数或者strip无法去除正解:kcompress(ecgtpt,0d’x);释疑: 中间空的地方不是空格,是换行符。因数据集是UTF-8编码,还需要用kcompress替换compres…

Oracle存储过程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、前置准备1.创建表空间2.创建用户3.赋权 二、存储过程1.创建数据表2.创建存储过程3.执行存储过程4.带参执行5.控制语句 总结 前言 这段时间实习&#xff0c…

C语言中动态内存管理说明

C语言中为什么要有动态内存管理? 在我们如今的学习当中,学习过两种内存开辟的方式如下 int a0; int arr[10]{0}; 第一种直接定义一个变量,但是变量的大小由类型决定 …

关于计算机是如何工作的

计算机的发展历程 世界上的第一个计算机 冯诺依曼机构体系 1.存储器 (包括内存(存储空间小,访问速度快,成本高,掉电后数据丢失) 外存(硬盘,软盘,U盘,光盘)),存储空间小,访问速度慢,成本低,掉电后数据仍在 2.CPU(中央处理单元,计算机最核心的部分,用于算术运算和逻辑判断),…

苹果手机数据不见了怎么恢复?3个方法,搞定苹果手机数据恢复!

在许多错误的情况下,当你更新到最新的 iOS 版本或使用越狱来获得更多功能和权限、误删重要的手机文件时,苹果手机中的数据可能会丢失或被意外删除。一旦发现数据丢失,你就会查看 iTunes 备份或 iCloud 备份,并希望在其中恢复丢失的…

五个超实用的 ChatGPT-4o 提示词

GPT-4o 是 OpenAI 最近推出的最新人工智能模型,不仅具备大语言模型的能力,而且拥有多模态模型的看、读、说等能力,而且速度比 GPT-4 更快。下面我们就来介绍几个超实用的 GPT-4o 提示词,帮助大家更好地了解 GPT-4o 的功能和应用场…

深度学习框架-----Tensorflow2基础

一、基础概念 1、深度学习框架基础概念 深度学习框架的出现降低了入的槛。我们不在需要丛从复杂的神经网络和反向传播算法开始编代码,可以依据需要,使用已有的模型配置参数,而模型的参数自动训练得到。我们也可以在已有模型的基础上增加自定…

vue3使用codemirror-editor-vue3代码编辑器以及解决格式不对齐 整体左偏问题

一、使用 1.安装 npm install codemirror-editor-vue3 codemirror5.x -S npm install types/codemirror -D 2.使用 import Codemirror from codemirror-editor-vue3; import { formDesign } from //stores/formDesign; import codemirror/mode/javascript/javascript.js;…

LLama2源码分析——Rotary Position Embedding分析

参考:一文看懂 LLaMA 中的旋转式位置编码(Rotary Position Embedding) 原理推导参考自上文,以下结合huggingface代码分析公式计算过程 1 旋转角度计算 计算公式如下,其中d为词嵌入维度,这部分和论文原文…

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

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

数据分析第一天(pandas简单的对快餐店数据进行操作获得想要的信息,使用apply,groupby)

前言 数据保存在 https://github.com/harkbox/DataAnalyseStudy 数据名称:快餐数据.tsv (tsv是用\t作为字符分隔符的文件格式;csv是逗号) 因此可以用pandas的read_csv函数读取数据 1.读取数据 import pandas as pd import matp…

Vue3学习记录(第一天)

Vue3学习记录_第一天 背景说明记录Vue3实现响应式前端的反射前端对象的属性赋值Vue3响应式实现过程稿前端移除对象的属性 背景 本次学习主要是看视频学习, 没有跟练, 但是很多知识点感觉又容易忘记. 所以通过笔记的方式输出一下. 说明 估计只能自己看懂, 如果能提供一些其他…

【Python报错】已解决ModuleNotFoundError: No Module Named ‘openyxl’

成功解决“ModuleNotFoundError: No Module Named ‘openyxl’”错误的全面指南 在Python编程中,遇到ModuleNotFoundError: No Module Named openyxl这样的错误通常意味着Python解释器无法找到名为openyxl的模块。然而,这里存在一个常见的拼写错误&#…

解决CSDN 导入Markdown图片失效不显示问题

每次将MarkDown文件导入CSDN的时候,有些图片总是由于防盗链的问题导致图片加载不出来,还得手动再导一遍,极其不方便。所以我们能不能建立一个属于自己的图片服务器或者说在线图库呢,而且每次使用Typora插入图片的时候都会自动的上…

Docker自定义镜像实现(SpringBoot程序为例)

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。🍎个人主页:Meteors.的博客💞当前专栏:知识备份✨特色专栏:知识分享&#x1f96…

华为HCIP-DATACOM 831最新题目

如图所示的网络,相邻的路由器之间使用直连接口建立EBGP邻居关系,AS号为6500x,其中X为路由器的编号。R1和R4均有到达192.168.1.0/24的静态路由,通过import方式引入BGP。在R3上配置EBGP负载分担的最大等价路由条数为8。缺省情况下&a…

搜索与图论:图中点的层次

搜索与图论&#xff1a;图中点的层次 题目描述参考代码 题目描述 输入样例 4 5 1 2 2 3 3 4 1 3 1 4输出样例 1参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n, m; int h[N], e[N]…

VS2019 QT无法打开 源 文件 “QTcpSocket“

VS2019 QT无法打开 源 文件 "QTcpSocket" QT5.15.2_msvc2019_64 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E1696 无法打开 源 文件 "QTcpSocket" auto_pack_line_demo D:\vs_qt_project\auto_pack_line_de…