Spateo-空间转录组的瑞士军刀-教程3:重构3D组织——切片对齐:基础使用

文摘   2024-12-13 07:00   北京  

之前关于Spateo的介绍已经分享两期了

Spateo-空间转录组的瑞士军刀-教程1:细胞分割

Spateo-空间转录组分析流程2:空间可变基因

空间转录组通过对组织切片进行 mRNA 的原位标记,使研究人员能够在二维水平上解析基因的位置特征及其生物学意义。然而,组织通常是三维结构,由多个细胞层堆叠形成。通过对样本进行连续切片采样,并对切片数据进行对齐,空间转录组技术能够将这些数据堆叠重构为组织的三维结构,从而在真正的空间维度上深入理解基因的位置特征及其功能意义。

准确对齐空间转录组切片,从而重构三维结构,为后续的三维甚至四维分析奠定了基础。Spateo 开发了能够进行非刚性和部分对齐的数学模型。在 GPU 加速、随机变分推断(SVI)、引导变量和稀疏计算的帮助下,Spateo 实现了非常高的效率和可扩展性。在这里,我们介绍下Spateo 如何执行基本的切片对齐,并学习如何在 Spateo 中利用非刚性和部分对齐。

Spateo 2D 切片对齐的基本使用方法

简要介绍 Spateo 对 2D 切片对齐的基本使用方法。这一步需要两张连续的空间转录组切片,每张切片包含基因表达数据和空间坐标。在切片、文库准备和测序之后,细胞/spot在各切片之间的相对坐标通常会丢失。我们的目标是将这两个样本进行对齐,使得它们之间对应的细胞/spot具有相似的表达数据,同时保留样本中spot的空间分布。

import osos.environ['CUDA_VISIBLE_DEVICES'] = '0'
import torchdevice = 'cuda' if torch.cuda.is_available() else 'cpu'print("Running this notebook on: ", device)
import spateo as stprint("Last run with spateo version:", st.__version__)
# Other importsimport warningswarnings.filterwarnings('ignore')import matplotlib.pyplot as pltimport scanpy as scimport anndata as ad
%config InlineBackend.print_figure_kwargs={'facecolor' : "w"}%config InlineBackend.figure_format='retina'

教程中,使用来自小鼠胚胎 E9.5 发育阶段的数据,这些数据是通过 Stereo-Seq 技术获得的。具体来说,我们将使用切片 #32 和 #33 作为示例数据。这些切片分别包含 17,425 个和 19,939 个细胞。

下载数据

wget https://drive.google.com/file/d/16gh_vApgzlvrplzbxYe-eODjZhvdNM4Z/view?usp=drive_linkwget https://drive.google.com/file/d/1n49YCLeqjTlYyHHBzJKmIisbIau8N9Fp/view?usp=drive_link

加载数据

# Load the slicesslice1 = st.read('./data/basic_usage_demo_1.h5ad')slice2 = st.read('./data/basic_usage_demo_2.h5ad')
slice1, slice2

(可选且推荐)数据预处理
在进行下一步之前,建议进行一些基本的质量控制、归一化和特征选择。这些预处理步骤可以增强下游应用程序的稳定性和性能,包括 Spateo 包中的 3D 对齐。参考 Scanpy 中针对 scRNA-seq 数据的标准预处理工作流程,并分别处理这两张切片。

# preprocess slice1sc.pp.filter_cells(slice1, min_genes=10)  # we use min_genes=10 as 100 is too large for ST datasc.pp.filter_genes(slice1, min_cells=3)# Saving count dataslice1.layers["counts"] = slice1.X.copy()# Normalizing to median total countssc.pp.normalize_total(slice1)# Logarithmize the datasc.pp.log1p(slice1)# annotates highly variable genessc.pp.highly_variable_genes(slice1, n_top_genes=2000)
# preprocess slice1sc.pp.filter_cells(slice2, min_genes=10)sc.pp.filter_genes(slice2, min_cells=3)# Saving count dataslice2.layers["counts"] = slice2.X.copy()# Normalizing to median total countssc.pp.normalize_total(slice2)# Logarithmize the datasc.pp.log1p(slice2)# annotates highly variable genessc.pp.highly_variable_genes(slice2, n_top_genes=2000)

在对齐前可视化切片
使用 Spateo 的绘图功能可视化这两张切片的空间分布。这两张切片没有对齐,这为后续的 3D 分析带来了挑战。

spatial_key = 'spatial'cluster_key = 'cellbin_SpatialDomain'
st.pl.slices_2d( slices = [slice1, slice2], label_key = cluster_key, spatial_key = spatial_key, height=4, center_coordinate=True, show_legend=True, legend_kwargs={'loc': 'upper center', 'bbox_to_anchor': (0.5, 0) ,'ncol': 5, 'borderaxespad': -4, 'frameon': False},)

(可选且推荐)在两张切片之间进行 PCA
主成分分析(PCA)是一种经典的线性降维算法,可以从数据中提取主要特征,同时去噪。与直接使用原始的高维基因表达矩阵相比,利用 PCA 特征生成映射概率通常能获得更好的性能。此外,使用较少维度的特征可以显著减少计算相似度矩阵时的计算开销。

需要注意的是,PCA 应该在两张切片之间进行,而不是分别在每张切片上独立执行,以确保特征表示在 PCA 空间中的对齐。因此,在接下来的步骤中,我们首先将两张切片合并为一个数据集,然后使用 Scanpy 提供的函数执行 PCA。最后,我们使用“batch”键提取相应的 PCA 特征。

st.align.group_pca([slice1,slice2], pca_key='X_pca')
slice1, slice2

Spateo 对齐:Spateo 对齐操作简单易用、可扩展且高效。通过简单调用 st.align.morpho_align,您可以在几秒钟内获得对齐后的切片和对应的映射矩阵(如果支持 CUDA,速度更快)。在本例中,我们将使用之前提取的高变基因及其 PCA 表示来进行对齐。以下是对该函数输入参数的解释:

  • models:需要对齐的切片,使用的是高变基因。

  • rep_layer:要使用的表示名称。

  • rep_field:在 AnnData 中存储表示的字段。

  • dissimilarity:计算相似度的方法。

  • spatial_key:AnnData 中 .obsm 对应空间坐标的键。

  • key_added:对齐后的空间坐标将添加到 .obsm 中的键。

  • device:用于计算的设备,可以是 "cpu" 或 "cuda"。

key_added = 'align_spatial'# spateo return aligned slices as well as the mapping matrixaligned_slices, pis = st.align.morpho_align(    models=[slice1, slice2],    ## Uncomment this if use highly variable genes    # models=[slice1[:, slice1.var.highly_variable], slice2[:, slice2.var.highly_variable]],    ## Uncomment the following if use pca embeddings    # rep_layer='X_pca',    # rep_field='obsm',    # dissimilarity='cos',    verbose=False,    spatial_key=spatial_key,    key_added=key_added,    device=device,)

可视化对齐完成后,我们可以通过可视化两张切片的叠加结果来检查对齐效果。这可以通过调用 st.pl.overlay_slices_2d 来轻松实现。在接下来的步骤中,我们将可视化刚性对齐和非刚性对齐的结果。刚性对齐解决了旋转和平移的问题,而非刚性对齐则更好地拟合局部结构。

st.pl.overlay_slices_2d(slices = aligned_slices, spatial_key = key_added, height=5, overlay_type='backward')

st.pl.overlay_slices_2d(slices = aligned_slices, spatial_key = key_added+'_nonrigid', height=5, overlay_type='backward')

Spateo 对齐功能简单易用,又精确高效。Spateo 提供了许多其他强大的功能,包括 2D 切片对齐、3D 空间转录组重构、3D 感知数字化/细胞间相互作用以及 4D 时空映射。

这次生信的大纲内容进行全面的调整,想了解生信的,跟班的,可以看下面👇这个文章

这次可不是只学单细胞,基本上从基础到多组学、空间、机器学习一条龙全打通了

单细胞数据分析需求的可以看👇这个文章

没有服务器,单细胞数据搞不定?我们目前做好了这些pipeline,可以帮你做(近期又添加了21 年发表在了 Cell上面的单细胞转录组分析代谢的分析——compass从前天的Nature中,我学到了21 年 Cell开发的单细胞代谢状态的计算——一起学代码

生信钱同学
北京大学在读博士生,记录自己的学习日常🌞分享生信知识:如单细胞和空间测序、多组学分析、宏基因组、病理组学、影像组学等生物信息学、机器学习和深度学习内容🌬
 最新文章