当前位置: 首页 > news >正文

多组学空转数据如何进行整合分析?(SpatialGlue库)

生信碱移

空间多组学分析

SpatialGlue 可整合来自同一组织切片的多种空间组学模态,提升组织空间域的解析分辨率。其通过图神经网络为每种组学学习低维嵌入表示,并通过双重注意力聚合机制整合空间信息与多组学特征,自适应捕捉模态重要性,实现更精确的空间多组学整合分析。

空间转录组学是继单细胞转录组学之后的一项重大技术革新,能够实现空间级别的组学和分辨率。目前,越来越多的技术实现了在同一个组织切片上同时分析不同组学。空间技术主要可以划分为测序技术和成像技术两大类别。①测序技术包括DBiT-seq、spatial-CITE-seq、spatial ATAC–RNA-seq、CUT&Tag-RNA-seq、SPOTS、SM-Omics、Stereo-CITE-seq、spatial RNA-TCR-seq和10x Genomics Xenium等; ②成像技术包括DNA seqFISH+、DNA-MERFISH-based DNA和RNA profiling、MERSCOPE和Nanostring CosMx等。

▲ 空间转录组技术的主要分类与原理概述。空间转录组技术主要分为两大类:①成像类技术直接在组织切片中对 mRNA 进行原位成像(图左),常见方法包括原位杂交(ISH)和原位测序(ISS)。ISH通过荧光标记的基因特异性探针与mRNA杂交,并通过多轮成像构建基因条形码;ISS则在组织中对扩增的转录本进行测序以识别其序列。②测序类技术通过提取组织中的 mRNA (图右),并在提取前记录其空间信息,再通过高通量测序进行基因鉴定。常见方式包括利用空间条码探针的阵列(array-based)或微切技术(microdissection-based)来标记空间位置信息。不同技术在空间分辨率、基因覆盖度及实验通量等方面存在权衡,适用于不同的组织尺度与研究需求。图中展示了这四类方法对转录本空间信息与物种信息的记录方式。DOI:10.1186/s13073-022-01075-1。

尽管目前存在多种技术手段,但多组学整合面临显著挑战。首先,①不同组学的特征维度差异巨大(如蛋白质与转录本数量),统计分布亦各异。同时,②整合跨组学特征与空间信息进一步增加难度,尚无专为同一组织切片获得的空间多组学数据设计的工具。非空间多组学整合方法包括Seurat WNN、MOFA+、StabMap、totalVI、MultiVI与scMM等。③但多数针对特定模态,适用性有限(如totalVI针对CITE-seq的RNA与蛋白,MultiVI适用于基因表达与染色质可及性)。④现有空间组学工具如 STAGATE、SpaGCN与GraphST,仅支持单组学,处理多组学数据时仅做特征拼接,未区分不同组学特征的重要性。因此,亟需专门面向空间多组学的工具,实现空间感知的跨组学整合。

▲ DOI: 10.1038/s41592-024-02316-4。

为此,来自新加坡国立大学的jinmiao chen研究团队提出了 SpatialGlue,一种面向空间多组学的整合方法,于2024年6月21号发表于Nature Methods [IF: 36.1]。SpatialGlue可整合来自同一组织切片的多种空间组学模态,提升组织空间域的解析分辨率。其通过图神经网络为每种组学学习低维嵌入表示,并通过双重注意力聚合机制整合空间信息与多组学特征,自适应捕捉模态重要性,实现更精确的多组学信息整合。作者在模拟数据及人类淋巴结实测数据上评估SpatialGlue性能,结果优于现有方法,并能识别更多解剖细节。

Fig. 1

▲ SpatialGlue 方法概述。a. SpatialGlue 旨在同时整合不同组学模态与空间信息,从而获得对特定组织的全面分子表征。 b. SpatialGlue 模型结构首先利用 K 近邻算法,基于空间坐标构建空间邻接图,并基于归一化表达数据为每种组学模态构建特征邻接图。随后,对于每个模态,图神经网络编码器以归一化表达值和邻接图为输入,通过迭代聚合邻居节点的表示,学习两种图特异性表示。为了捕捉不同图结构的重要性,作者设计了组学内注意力聚合层,用于自适应整合图特异性表示并生成模态特异性表示。最后,为保留不同组学模态的重要性,SpatialGlue 采用组学间注意力聚合层,自适应整合模态特异性表示,输出最终的整合空间位点表示。

该工具的github链接如下,本文简要介绍淋巴结如何运用 SpatialGlue 整合人类淋巴结10x Genomics Visium 转录组与蛋白质多组学数据,更多分析方向可以自行学习。

  • https://github.com/JinmiaoChenLab/SpatialGlue

  • 本文示例数据下载链接:https://drive.google.com/drive/folders/1RlU3JmHg_LZM1d-o6QORvykYPoulWWMI

0.软件安装

SpatialGlue基于python解释器,可以使用以下代码安装该库:

pip install SpatialGlue

除此之外,需要以下依赖库与软件:

- python==3.8
- torch>=1.8.0
- cudnn>=10.2
- numpy==1.22.3
- scanpy==1.9.1
- anndata==0.8.0
- rpy2==3.4.1
- pandas==1.4.2
- scipy==1.8.1
- scikit-learn==1.1.1
- scikit-misc==0.2.0
- tqdm==4.64.0
- matplotlib==3.4.2
- R==4.0.3

1.转录/蛋白组空间整合

① 导入软件,设置使用cpu/cuda与软件路径:

import os
import torch
import pandas as pd
import scanpy as sc

import SpatialGlue

device = torch.device('cuda:2' if torch.cuda.is_available() else 'cpu')
os.environ['R_HOME'] = '/scbio4/tools/R/R-4.0.3_openblas/R-4.0.3'0

② 加载模态数据:

# 下载的数据路径
file_fold = '/input_dir'

# 读取数据
adata_omics1 = sc.read_h5ad(file_fold + 'adata_RNA.h5ad') # 转录组
adata_omics2 = sc.read_h5ad(file_fold + 'adata_ADT.h5ad') # 蛋白

adata_omics1.var_names_make_unique()
adata_omics2.var_names_make_unique()

# 设置数据类型
data_type = '10x'

# 设置随机数种子
from SpatialGlue.preprocess import fix_seed
random_seed = 2022
fix_seed(random_seed)

③ 数据预处理。SpatialGlue采用标准的转录组和蛋白质数据预处理步骤。具体而言,对于转录组数据,基因表达计数通过 scanpy 包进行对数转换和文库大小归一化处理。选取前3000个高变基因(HVGs)作为PCA降维的输入。为确保与蛋白质数据输入维度一致,保留前k个(蛋白质数量)主成分作为模型输入。蛋白质表达计数使用中心对数比(CLR)进行归一化。PCA 降维后的所有主成分均作为模型输入。

from SpatialGlue.preprocess import clr_normalize_each_cell, pca

# 使用转录组模态的高变基因做整合
sc.pp.filter_genes(adata_omics1, min_cells=10)
sc.pp.highly_variable_genes(adata_omics1, flavor="seurat_v3", n_top_genes=3000)
sc.pp.normalize_total(adata_omics1, target_sum=1e4)
sc.pp.log1p(adata_omics1)
sc.pp.scale(adata_omics1)
#
adata_omics1_high =  adata_omics1[:, adata_omics1.var['highly_variable']]
adata_omics1.obsm['feat'] = pca(adata_omics1_high, n_comps=adata_omics2.n_vars-1)

# 蛋白模态
adata_omics2 = clr_normalize_each_cell(adata_omics2)
sc.pp.scale(adata_omics2)
adata_omics2.obsm['feat'] = pca(adata_omics2, n_comps=adata_omics2.n_vars-1)

随后,基于空间信息构建邻接图:

from SpatialGlue.preprocess import construct_neighbor_graph
data = construct_neighbor_graph(adata_omics1, adata_omics2, datatype=data_type)

④ 执行SpatialGlue模型。SpatialGlue模型通过自适应整合多个组学模态的表达信息,并结合空间位置信息,学习联合的潜在表示(代替传统scanpy/seurat分析的主成分PC)。模型训练后输出的结果包括 ①各组学模态的与其融合后的联合表示(可用于聚类、可视化和差异表达分析),以及②模态内与模态间的注意力权重(用于解释组学模态的相对贡献)。

# 初始化模型
from SpatialGlue.SpatialGlue_pyG import Train_SpatialGlue
model = Train_SpatialGlue(data, datatype=data_type, device=device)

# 模型训练
output = model.train()

# 整合模型embedding
adata = adata_omics1.copy()
adata.obsm['emb_latent_omics1'] = output['emb_latent_omics1'].copy()
adata.obsm['emb_latent_omics2'] = output['emb_latent_omics2'].copy()
adata.obsm['SpatialGlue'] = output['SpatialGlue'].copy()
adata.obsm['alpha'] = output['alpha']
adata.obsm['alpha_omics1'] = output['alpha_omics1']
adata.obsm['alpha_omics2'] = output['alpha_omics2']

模型训练完成后,SpatialGlue会返回包含多种输出结果的output文件,如上代码所示:

  • emb_latent_omics1:第一种组学模态的潜在表征 (embedding)。

  • emb_latent_omics2:第二种组学模态的潜在表征。

  • alpha_omics1:针对第一种组学模态的模态内注意力权重,解释每个图对每个簇的贡献。

  • alpha_omics2:针对第二种组学模态的模态内注意力权重,解释每个图对每个簇的贡献。

⑤ 下游分析示例,多模态空间融合表征的空间域鉴定。注意:下面用的是mclustr工具(需要在python中调用R语言),环境可能比较难配置,推荐还是使用常规的leiden或者louvain方法(常规scanpy/seurat流程的聚类方法):

# 使用mclust进行聚类,也可以选择常规的leiden或者louvain
from SpatialGlue.utils import clustering
tool = 'mclust' # mclust, leiden, and louvain
clustering(adata, key='SpatialGlue', add_key='SpatialGlue', n_clusters=6, method=tool, use_pca=True)
# 降维结果可视化
import matplotlib.pyplot as plt
fig, ax_list = plt.subplots(1, 2, figsize=(7, 3))
sc.pp.neighbors(adata, use_rep='SpatialGlue', n_neighbors=10)
sc.tl.umap(adata)
sc.pl.umap(adata, color='SpatialGlue', ax=ax_list[0], title='SpatialGlue', s=20, show=False)
sc.pl.embedding(adata, basis='spatial', color='SpatialGlue', ax=ax_list[1], title='SpatialGlue', s=25, show=False)
plt.tight_layout(w_pad=0.3)
plt.show()

▲ 基于多组学的空间域鉴定结果。

⑥ 看一下不同模态的重要性:

import pandas as pd
import seaborn as sns
plt.rcParams['figure.figsize'] = (5,3)
df = pd.DataFrame(columns=['RNA', 'protein', 'label'])
df['RNA'], df['protein'] = adata.obsm['alpha'][:, 0], adata.obsm['alpha'][:, 1]
df['label'] = adata.obs['SpatialGlue'].values
df = df.set_index('label').stack().reset_index()
df.columns = ['label_SpatialGlue', 'Modality', 'Weight value']
ax = sns.violinplot(data=df, x='label_SpatialGlue', y='Weight value', hue="Modality",
                split=True, inner="quart", linewidth=1, show=False)
ax.set_title('RNA vs protein')
ax.set_xlabel('SpatialGlue label')
ax.legend(bbox_to_anchor=(1.4, 1.01), loc='upper right')

plt.tight_layout(w_pad=0.05)
#plt.show()

▲ 不同模态的重要性,可以看到attention在大部分聚类簇中更加关注蛋白质模态而非RNA。

简单分享到这里

各位佬哥佬姐试试哇

相关文章:

  • 驱动-内核空间和用户空间数据交换
  • 生命篇---心肺复苏、AED除颤仪使用、海姆立克急救法、常见情况急救简介
  • 算法学习C++需注意的基本知识
  • CentOS7更换国内YUM源和Docker简单应用
  • 【创建一个YOLO免环境训练包】
  • 入侵检测snort功能概述
  • Java基础 - 泛型(基本概念)
  • 【25软考网工笔记】第二章 数据通信基础(1)信道特性 奈奎斯特 香农定理
  • 使用amos进行简单中介效应分析
  • MySQL 进阶 - 2 ( 9000 字详解)
  • Next.js 简介
  • 自行搭建一个Git仓库托管平台
  • NLP高频面试题(四十一)——什么是 IA3 微调?
  • 国家优青ppt美化_青年科学基金项目B类ppt案例模板
  • 【WPF】自定义控件:ShellEditControl-同列单元格编辑支持文本框、下拉框和弹窗
  • 【解决方案】vscode 不小心打开了列选择模式,选择时只能选中同一列的数据。
  • 【学习笔记】头文件中定义函数出现重复定义报错
  • 5G_WiFi_CE_DFS
  • 嵌入式---电机分类
  • 用流量和用wifi的ip地址一样吗?深度解读
  • 做网编去网站还是工作室好/广告公司简介
  • 常用浏览器网址大全/星乐seo网站关键词排名优化
  • 对网站建设的考核机制/网站推广文章
  • 做电影网站的软件/seminar
  • 电子商务网站建设的范围是什么/代运营公司排行榜
  • 企业网站建设规划书/济南seo优化公司助力网站腾飞