Tutorial : 10x Visium(DLPFC dataset)

Here, we present our re-analysis of sample 151676 from the dorsolateral prefrontal cortex (DLPFC) dataset. In the original study by Maynard et al., the DLPFC layers and white matter (WM) were manually annotated based on morphological features and gene markers.

[1]:
import os
os.environ['R_HOME']="/share/home/baixiaosheng/software/anaconda/envs/SpaGT/lib/R"
import scanpy as sc
import anndata as ad
import torch
import warnings
warnings.filterwarnings("ignore")
import matplotlib.pyplot as plt
from sklearn.metrics.cluster import adjusted_rand_score
import SpaGT
SpaGT.__version__
[1]:
' 1.0.0 '
[2]:
adata = ad.read_h5ad('./151675.h5ad')
[3]:
adata, conns = SpaGT.spatial_reconstruction(adata,alpha=1.0)
features_tensor = torch.tensor(adata.obsm['expression_embedding']).float()
relations_tensor = torch.tensor(conns).float()
[4]:
SpaGT.setup_seed(33)
n_clusters = 7
radius = 50

epoch = 20
clf=SpaGT.DEC(features_tensor,relations_tensor,node_width=features_tensor.shape[1], edge_width=relations_tensor.shape[0],num_heads=5,nhid=30,n_clusters=n_clusters,epochs=epoch)

#Run
a = clf.fit(features_tensor,relations_tensor, init="mclust",num_cluster=n_clusters,n_neighbors=30,pca_num=30)
y_pred, prob,z1=clf.predict()

adata.obs["pred"] = y_pred
adata.obs["pred"] = adata.obs["pred"].astype('category')
R[write to console]:                    __           __
   ____ ___  _____/ /_  _______/ /_
  / __ `__ \/ ___/ / / / / ___/ __/
 / / / / / / /__/ / /_/ (__  ) /_
/_/ /_/ /_/\___/_/\__,_/____/\__/   version 6.1.1
Type 'citation("mclust")' for citing this R package in publications.

fitting ...
  |======================================================================| 100%
[5]:
adata, refine = SpaGT.refine_label(adata, radius=radius,key='pred')
[6]:
obs_df = adata.obs.dropna()
ARI = adjusted_rand_score(obs_df['annotation'], obs_df['pred'])
print('Adjusted rand index = %.3f' %ARI)
refine_ARI = adjusted_rand_score(obs_df['annotation'], obs_df['label_refined'])
print('refine Adjusted rand index = %.3f' %refine_ARI)
Adjusted rand index = 0.550
refine Adjusted rand index = 0.560
[7]:
plot_color=["#F56867","#FEB915","#C798EE","#59BE86","#7495D3","#D1D1D1","#6D1A9C","#15821E","#3A84E6","#997273","#787878","#DB4C6C","#9E7A7A","#554236","#AF5F3C","#93796C","#F9BD3F","#DAB370","#877F6C","#268785"]

sc.pl.spatial(
    adata,
    img_key=None,
    color='pred',
    size=1.5,
    palette=plot_color,
    legend_loc='right margin',
    show=False,
    title=['SpaGT (pred_ARI=%.3f)'%ARI]
)

sc.pl.spatial(
    adata,
    img_key=None,
    color='label_refined',
    size=1.5,
    palette=plot_color,
    legend_loc='right margin',
    show=False,
    title=['SpaGT (refine_pred_ARI=%.3f)'%refine_ARI]
)

plt.show()
_images/run_dlpfc_8_0.png
_images/run_dlpfc_8_1.png