Skip to main content

spHOT

Phenotype-associated spatial biomarker discovery in spatial transcriptomics with spHOT

License: MIT Python

🧬 Description

🔥spHOT🔥 is a framework for localizing phenotype-associated spatial biomarkers from multi-sample, multi-patient spatial transcriptomics datasets with sample-level case/control labels. spHOT integrates spatial foundation model embeddings, a hierarchical domain tree, and a dual-branch teacher–student multiple instance learning architecture to convert sample-level phenotype labels into spatially coherent cell-level biomarker scores.

⚙️ Installation

Option 1 — PyPI

pip install sphot

Option 2 — GitHub

pip install git+https://github.com/DHKim327/spHOT.git

Option 3 — conda yml

git clone https://github.com/DHKim327/spHOT.git
cd spHOT
conda env create -f environment/env_spHOT.yml
conda activate env_spHOT
pip install -e .

📥 Inputs

AnnData directory :
Path to .h5ad files, saved per sample :

adatas/
├── sample1/adata.h5ad
└── sample2/adata.h5ad
  • .obs key should contain sample phenotype label

Split information :

The splits.csv file defines train/valid/test splits for each sample across multiple folds.

SID 0 1 2 3 4
sample_1 train train train test valid
sample_2 train test valid train train
sample_3 valid train train train test
  • SID : Sample identifier (e.g., slide or tissue ID)
  • 0–4 : Fold indices
  • Each cell indicates the dataset role of that sample for a specific fold.

📤 Outputs

After an spHOT run, the output directory structure will be organized as below :

results/
└── {task_name}/                          # Name of run
    ├── de/                               # Domain embedding module result
    │   └── adata.h5ad                    # Merged AnnData with Novae embeddings & initial domain info           
    ├── dt/                               # Domain tree module result
    |   ├── centroid_HC_results.pkl       # Hierarchical domain tree
    |   └── adata.h5ad                    # Merged AnnData with metadomains association info
    └── mil/                              # MIL module result
        ├── D{k}/                         # k-level MIL result
        │   ├── model_encoder_exp{exp}.pt     # Model and outputs for each fold
        │   ├── model_teacher_exp{exp}.pt             
        │   ├── model_student_exp{exp}.pt            
        │   ├── resource_{exp}.csv            # Resource performance log
        │   └── CELL_SCORE_test_{exp}.h5ad    # spHOT cell scores (test) for each fold
        ├── all_test_results.csv          # Sample classification performance of test samples
        ├── all_test_results.csv          # Sample classification performance of validation samples
        └── k_selection_results.csv       # Spatial scores and k-selection result of spHOT run

📘 Tutorials

We provide the code and resources required to reproduce all main figures in the manuscript within the ./tutorial directory. Also, see the ./tutorial directory for step-by-step spHOT usage.

Figure-to-notebook map

Figure Dataset Step Notebook
Fig. 2+@ Simulation Source data preparation 0.preproc_CosMx_Pouch_IBD.ipynb
Simulation generation (V1) 1.simul_scCube_V1.ipynb
Simulation generation (V2) 1.simul_scCube_V2.ipynb
spHOT run (V1) 2.spHOT_simul_V1.ipynb
spHOT run (V2) 2.spHOT_simul_V2.ipynb
Evaluation (V1) 3.eval_simul_V1.ipynb
Evaluation (V2) 3.eval_simul_V2.ipynb
Fig. 3–4 Xenium IPF (GSE250346) Preprocessing 0.preproc_Xenium_IPF.R · 0.preproc_Xenium_IPF.ipynb
spHOT run 1.spHOT_Xenium_IPF.ipynb
Evaluation 2.eval_Xenium_IPF.ipynb
Downstream analysis 3.downstream_Xenium_IPF.ipynb
Fig. 5 Xenium RPGN (GSE294965) Preprocessing 0.preproc_Xenium_RPGN.ipynb
spHOT run 1.spHOT_Xenium_RPGN.ipynb
Downstream analysis (1) 2.downstream_Xenium_RPGN_V1.ipynb
Downstream analysis (2) 2.downstream_Xenium_RPGN_V2.ipynb
Fig. 6 Xenium COPD (GSE313006) Preprocessing & cell typing 0.preproc_Xenium_COPD.ipynb
Downstream analysis (1) 1.downstream_Xenium_COPD_V1.ipynb
Downstream analysis (2) 1.downstream_Xenium_COPD_V2.ipynb
Extended CosMx DKD (GSE325587) Preprocessing 0.preproc_CosMx_DKD.ipynb
spHOT run 1.spHOT_CosMx_DKD.ipynb
Evaluation 2.eval_CosMx_DKD.ipynb
Downstream analysis 3.downstream_CosMx_DKD.ipynb
Fig. 2, 3+@ All datasets Cross-dataset benchmarking & statistics benchmark_stats_all_datasets.ipynb

Note : Notebooks are numbered by execution order within each figure directory (0.3.). Preprocessing notebooks start from public GEO accessions; the simulation dataset is downloaded from Zenodo as the version of record (see Data availability).

😊 Acknowledgements

spHOT is built upon codes from scMILD: Single-cell multiple instance learning for sample classification and associated subpopulation discovery. We thank the authors for publicly releasing their codes.

📚 References

Jeong, K., Choi, J. & Kim, K. scMILD: Single-cell multiple instance learning for sample classification and associated subpopulation discovery. iScience 29(2026).

Kim, H., Kim, D., Jung, S., Lee, S. & Kim, K. Phenotype-associated spatial biomarker discovery in spatial transcriptomics with spHOT. bioRxiv, 2026.08.11.744312 (2026).



Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sphot-0.1.2.tar.gz (37.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sphot-0.1.2-py3-none-any.whl (40.0 kB view details)

Uploaded Python 3

File details

Details for the file sphot-0.1.2.tar.gz.

File metadata

  • Download URL: sphot-0.1.2.tar.gz
  • Upload date:
  • Size: 37.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.9

File hashes

Hashes for sphot-0.1.2.tar.gz
Algorithm Hash digest
SHA256 9079f185b3a3a8803a26797a3a9e722cb967543e0041ef965458777bb8d926b5
MD5 3494bf88e417b91303de2e6d6c5094cc
BLAKE2b-256 3cd973c5a4f0fbdcf9c59157fa8c815bfe8c89a55da4a681bfbf76dc3eb0dc77

See more details on using hashes here.

File details

Details for the file sphot-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: sphot-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 40.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.9

File hashes

Hashes for sphot-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9f762b07bfa00e80d5118c42c05ad0f28000830845db7ca26e2fdb1e92123710
MD5 a241a9b1efc9ad048dae143913e5cdc1
BLAKE2b-256 c6028602f42be5a97d26e5d65a0ed6bc6cabc50bef88c90325d035cf66d4b8bd

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.4

2 files

0.1.3

2 files

This release

0.1.2 This release

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page