STAMP (Spatial Transcriptomics Analysis with topic Modeling to uncover spatial Patterns) 是一种可解释的空间感知降维方法,专为空间转录组学数据设计。它结合了深度生成模型和主题建模 (topic modeling),能够在保留空间信息的前提下,提取出生物学上有意义的低维“空间主题”和对应的基因模块。
作为空间转录组学的分析工具用在scRNA数据上会怎么样?从理论上来讲可以行得通,因为STAMP利用空间转录组的空间位置信息提取出主题,而scRNA数据可以用PCA的降维信息提取主题。下面用pbm3k的数据来试试实际效果。
import pandas as pd
import scanpy as sc
import sctm
import squidpy as sq
adata = sc.read_h5ad("pbmc3k_scanpy.h5ad")
sc.pp.filter_genes(adata, min_cells=3)
sc.pp.filter_cells(adata, min_genes=200)
adata.layers['counts'] = adata.X.copy()
sc.pp.normalize_total(adata)
sc.pp.log1p(adata)
sc.pp.highly_variable_genes(adata)
sc.tl.pca(adata)
sc.pp.neighbors(adata)
sc.tl.leiden(adata)
sc.tl.umap(adata)
关键的一步是将空间的位置信息替换为转录组的PCA信息,然后再利用空间的图聚类:
adata.obsm['spatial'] = adata.obsm['X_pca']
sq.gr.spatial_neighbors(adata)
然后,利用STAMP建模提取出生物学上有意义的低维“主题”和对应的基因模块:
model = sctm.stamp.STAMP(adata[:, adata.var.highly_variable], n_topics=10, layer='counts')
model.train(batch_size=2048, device='cpu')
topic_prop = model.get_cell_by_topic()
beta = model.get_feature_by_topic()
低维的主题有点类似监督聚类,需要人为指定数量,这里设置为leiden的聚类数量。下面对比一下leiden和STAMP的结果:
adata.obs['topic'] = topic_prop.idxmax(axis=1)
sc.pl.umap(adata, color=["leiden", "topic"])

从上面的结果来看,STAMP在转录组数据上提取的主题跟聚类的结果还算能对应上,有点意思。