spHOT
Phenotype-associated spatial biomarker discovery in spatial transcriptomics with spHOT
🧬 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
.obskey 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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.