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).



Metadata

Release files for sphot 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sphot 0.1.4
File Size Uploaded Provenance Actions
sphot-0.1.4.tar.gz 38.0 kB Without provenance Details for sphot-0.1.4.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sphot 0.1.4
File Interpreter ABI Platform Actions
sphot-0.1.4-py3-none-any.whl Python 3 none any Details for sphot-0.1.4-py3-none-any.whl

Total release size: 78.4 kB

Release files / sphot-0.1.4.tar.gz

Download URL sphot-0.1.4.tar.gz
Size 38.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c54b0abd9d5d1f32c512f116dd384dc8cc1d3f6a72f1a6d66464de152084f52b
BLAKE2b-256 checksum
How to use checksums
fb980aaa175dfa49d04960f711ba2fe298084997d90cd083bc63f05418ee9abc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.20

Release files / sphot-0.1.4-py3-none-any.whl

Download URL sphot-0.1.4-py3-none-any.whl
Size 40.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
35fb5cf11d3fb1243c1e9881547e53c9442660c6ca5c07db99470211c68cc8ff
BLAKE2b-256 checksum
How to use checksums
457a72b7a214b19624e2744f3236df205712c9dec922141f484835acc7954af0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.20

Security for sphot 0.1.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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