Downstream Analysis#
Latent space#
Extract the latent representation and store it in adata.obsm:
adata.obsm["X_spatialvi"] = model.get_latent_representation()
Use RAPIDS for GPU-accelerated downstream analysis:
z = model.get_latent_representation(backend="rapids") # returns cupy array
Clustering#
Apply standard scanpy clustering to the latent space:
import scanpy as sc
sc.pp.neighbors(adata, use_rep="X_spatialvi")
sc.tl.leiden(adata)
sc.pl.embedding(adata, basis="spatial", color="leiden")
Deconvolution (DestVI)#
proportions = model.get_proportions() # DataFrame (n_spots × n_celltypes)
model.plot_cell_type_map(cell_type="Neuron")
Niche prediction (scVIVA)#
ct_composition = model.predict_neighborhood() # (n_cells, n_celltypes)
niche_activation = model.predict_niche_activation() # (n_cells, n_niches)
Differential expression#
de = model.differential_expression(groupby="cell_type", mode="change")
de[de["is_de_fdr_0.05"]].head(20)