之前关于Spateo的介绍已经分享两期了
空间转录组通过对组织切片进行 mRNA 的原位标记,使研究人员能够在二维水平上解析基因的位置特征及其生物学意义。然而,组织通常是三维结构,由多个细胞层堆叠形成。通过对样本进行连续切片采样,并对切片数据进行对齐,空间转录组技术能够将这些数据堆叠重构为组织的三维结构,从而在真正的空间维度上深入理解基因的位置特征及其功能意义。
准确对齐空间转录组切片,从而重构三维结构,为后续的三维甚至四维分析奠定了基础。Spateo 开发了能够进行非刚性和部分对齐的数学模型。在 GPU 加速、随机变分推断(SVI)、引导变量和稀疏计算的帮助下,Spateo 实现了非常高的效率和可扩展性。在这里,我们介绍下Spateo 如何执行基本的切片对齐,并学习如何在 Spateo 中利用非刚性和部分对齐。
Spateo 2D 切片对齐的基本使用方法
简要介绍 Spateo 对 2D 切片对齐的基本使用方法。这一步需要两张连续的空间转录组切片,每张切片包含基因表达数据和空间坐标。在切片、文库准备和测序之后,细胞/spot在各切片之间的相对坐标通常会丢失。我们的目标是将这两个样本进行对齐,使得它们之间对应的细胞/spot具有相似的表达数据,同时保留样本中spot的空间分布。
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print("Running this notebook on: ", device)
import spateo as st
print("Last run with spateo version:", st.__version__)
# Other imports
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
import scanpy as sc
import 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_link
wget https://drive.google.com/file/d/1n49YCLeqjTlYyHHBzJKmIisbIau8N9Fp/view?usp=drive_link
加载数据
# Load the slices
slice1 = 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 slice1
sc.pp.filter_cells(slice1, min_genes=10) # we use min_genes=10 as 100 is too large for ST data
sc.pp.filter_genes(slice1, min_cells=3)
# Saving count data
slice1.layers["counts"] = slice1.X.copy()
# Normalizing to median total counts
sc.pp.normalize_total(slice1)
# Logarithmize the data
sc.pp.log1p(slice1)
# annotates highly variable genes
sc.pp.highly_variable_genes(slice1, n_top_genes=2000)
# preprocess slice1
sc.pp.filter_cells(slice2, min_genes=10)
sc.pp.filter_genes(slice2, min_cells=3)
# Saving count data
slice2.layers["counts"] = slice2.X.copy()
# Normalizing to median total counts
sc.pp.normalize_total(slice2)
# Logarithmize the data
sc.pp.log1p(slice2)
# annotates highly variable genes
sc.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 matrix
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开发的单细胞代谢状态的计算——一起学代码)