spcoral.model.integrate_model

spcoral.model.integrate_model#

class spcoral.model.integrate_model(adata_omics1, adata_omics2, graph_method_single, k_spatial_omics1=None, radius_spatial_omics1=None, k_spatial_omics2=None, radius_spatial_omics2=None, use_obsm='spatial', g_all_auto=True, k_feature_omics1=10, k_feature_omics2=10, k_cross_omics=20, k_all_omics=25, loss_weight=[1, 1, 1, 1, 1], hidden_dim=128, latent_dim=64, device=device(type='cuda', index=0), random_seed=2020, strict_repro=False, learning_rate=0.001, weight_decay=0.0001, epochs=300, gradient_clipping=5.0, embedding_key='emb_spcoral', rec_key='rec_spcoral', cross_key='cross_spcoral')#

Bases: object

A graph autoencoder model for cross-modality spatial omics integration.

This class integrates two spatial omics datasets by learning joint latent embeddings using a multi-graph attention-based autoencoder. It leverages: - Modality-specific spatial graphs, - Feature-based similarity graphs, - Cross-modality spatial nearest-neighbor graphs, - A unified joint graph combining all connections.

Parameters:
  • adata_omics1 (anndata.AnnData) – First omics AnnData object. Must contain obsm['feat'] (modality-specific features) and spatial coordinates in obsm[use_obsm].

  • adata_omics2 (anndata.AnnData) – Second omics AnnData object with the same requirements.

  • graph_method_single (str) – Method for building individual spatial graphs for each modality (e.g., ‘knn’ or ‘radius’; passed to adata_to_dgl).

  • k_spatial_omics1 (int, optional) – Number of spatial neighbors for omics1 (used if graph_method_single='knn').

  • radius_spatial_omics1 (float, optional) – Radius for omics1 spatial graph (used if graph_method_single='radius').

  • k_spatial_omics2 (int, optional) – Number of spatial neighbors for omics2.

  • radius_spatial_omics2 (float, optional) – Radius for omics2 spatial graph.

  • use_obsm (str, optional (default: 'spatial')) – Key in .obsm containing spatial coordinates.

  • g_all_auto (bool, optional (default: True)) – If True, automatically construct the joint graph from individual and cross graphs. If False, build it directly from all coordinates using k_all_omics.

  • k_feature_omics1 (int, optional (default: 10)) – Number of feature-based nearest neighbors for omics1.

  • k_feature_omics2 (int, optional (default: 10)) – Number of feature-based nearest neighbors for omics2.

  • k_cross_omics (int, optional (default: 20)) – Number of cross-modality spatial nearest neighbors (bipartite edges).

  • k_all_omics (int, optional (default: 25)) – Number of neighbors in joint graph when g_all_auto=False.

  • loss_weight (list of float, optional (default: [1, 1, 1, 1, 1])) – Weights for the five loss components: [recon_omics1, recon_omics2, cross_omics1, cross_omics2, spatial_graph].

  • hidden_dim (int, optional (default: 128)) – Hidden dimension in the GAE encoder/decoder.

  • latent_dim (int, optional (default: 64)) – Dimension of the final latent embedding.

  • device (torch.device, optional (default: torch.device('cuda:0'))) – Device for training.

  • random_seed (int, optional (default: 2020)) – Random seed for reproducibility.

  • strict_repro (bool, optional (default: False)) – Enforce strict reproducibility (e.g., deterministic CUDA).

  • learning_rate (float, optional (default: 0.001)) – Optimizer learning rate.

  • weight_decay (float, optional (default: 0.0001)) – Weight decay for Adam optimizer.

  • epochs (int, optional (default: 300)) – Number of training epochs.

  • gradient_clipping (float, optional (default: 5.0)) – Gradient clipping norm.

  • embedding_key (str, optional (default: 'emb_spcoral')) – Key to store latent embeddings in .obsm.

  • rec_key (str, optional (default: 'rec_spcoral')) – Key to store reconstructed modality-specific features.

  • cross_key (str, optional (default: 'cross_spcoral')) – Key to store cross-modality predicted features.

__init__(adata_omics1, adata_omics2, graph_method_single, k_spatial_omics1=None, radius_spatial_omics1=None, k_spatial_omics2=None, radius_spatial_omics2=None, use_obsm='spatial', g_all_auto=True, k_feature_omics1=10, k_feature_omics2=10, k_cross_omics=20, k_all_omics=25, loss_weight=[1, 1, 1, 1, 1], hidden_dim=128, latent_dim=64, device=device(type='cuda', index=0), random_seed=2020, strict_repro=False, learning_rate=0.001, weight_decay=0.0001, epochs=300, gradient_clipping=5.0, embedding_key='emb_spcoral', rec_key='rec_spcoral', cross_key='cross_spcoral')#
Parameters:
  • adata_omics1 (AnnData) –

  • adata_omics2 (AnnData) –

  • graph_method_single (str) –

  • k_spatial_omics1 (int | None) –

  • radius_spatial_omics1 (float | None) –

  • k_spatial_omics2 (int | None) –

  • radius_spatial_omics2 (float | None) –

  • use_obsm (str) –

  • g_all_auto (bool) –

  • k_feature_omics1 (int) –

  • k_feature_omics2 (int) –

  • k_cross_omics (int) –

  • k_all_omics (int) –

  • loss_weight (List[float]) –

  • hidden_dim (int) –

  • latent_dim (int) –

  • device (device) –

  • random_seed (int) –

  • strict_repro (bool) –

  • learning_rate (float) –

  • weight_decay (float) –

  • epochs (int) –

  • gradient_clipping (float) –

  • embedding_key (str) –

  • rec_key (str) –

  • cross_key (str) –

Methods

__init__(adata_omics1, adata_omics2, ...[, ...])

train()

Train the cross-modal integration model.

train()#

Train the cross-modal integration model.

Returns:

  • adata_omics1 : anndata.AnnData Updated first omics object with latent embeddings and reconstructions.

  • adata_omics2 : anndata.AnnData Updated second omics object with the same.

  • loss_list : list of [total_loss, recon_loss, cross_loss, spatial_loss] per epoch Training loss history.

Return type:

tuple