hutaobo's picture
Publish bundled DST-GNN inputs and formal reproducibility outputs
91f5f1d verified
|
Raw
History Blame Contribute Delete
6.46 kB
---
license: cc-by-nc-4.0
tags:
- research
- computational-biology
- spatial-omics
- graph-neural-networks
- temporal-analysis
---
# COSTE + DST-GNN Manuscript Code
The repository path `hutaobo/ccst-spatial-clustering` is retained for continuity from an earlier private working name. The slug is historical; the public contents in this release are a cleaned DST-GNN implementation for the lung fibrosis manuscript workflow and are not a CCST release.
## Overview
This repository contains a manuscript-aligned public implementation of the diffusion-based spatio-temporal graph neural network (DST-GNN) analysis described in:
- *Cophenetic Spatial Topology Embedding reveals multiscale tissue architecture in spatial omics*
The implementation was reconstructed from the original analysis notebooks and cross-checked against the manuscript text. In particular, the public code follows the manuscript-level assumptions that:
- the cohort contains 45 tissue samples grouped into three stages: `T1 = HD`, `T2 = LA`, `T3 = MA`
- graphs are defined over 47 predefined cell types
- edge values are COSTE/SSS-style spatial separation scores in `[0, 1]`, where smaller values indicate closer proximity
- missing cell-type pairs are treated as absent and filled with `SSS = 1.0`
- node features are one-hot identity vectors
- optimization uses Adam with an MSE objective
- explainability is performed with PyTorch Geometric's `GNNExplainer`
## What Is In This Repository
- `data/inputs/`: bundled direct DST-GNN input CSV for the lung fibrosis cohort
- `data/outputs/formal_release/`: bundled formal release outputs generated by the cleaned public pipeline
- `data/DATA_PROVENANCE.md`: provenance notes for the bundled input and output data
- `src/dst_gnn/`: cleaned Python package for data loading, temporal graph construction, model definition, training, and explainability
- `scripts/run_dst_gnn.py`: end-to-end CLI that builds stage graphs, trains DST-GNN, ranks dynamic nodes and edges, and optionally runs `GNNExplainer`
- `scripts/verify_repro.py`: output comparison helper for checking a rerun against the bundled formal release
- `references/RECOVERY_NOTES.md`: provenance notes describing the recovered notebooks and the manuscript-alignment corrections applied here
- `upload_to_hf.py`: helper for synchronizing this folder to the Hugging Face Hub
## Bundled Data
The repository now includes the direct DST-GNN input table and a formal output release so users can rerun and verify the pipeline without searching for additional intermediate files.
- Input:
- `data/inputs/cophenetic_distances_searcher_D_score_in_all_samples.csv`
- Formal release outputs:
- `data/outputs/formal_release/`
The input CSV is the recovered cohort-level COSTE/SSS table with `45` samples, `47` cell types, and stage labels mapped as `HD -> T1`, `LA -> T2`, `MA -> T3`.
See `data/DATA_PROVENANCE.md` for the input lineage and the exact formal release settings.
## Public Implementation Choices
The recovered notebook material contained exploratory and partially duplicated cells. This public release keeps the original analytical intent but makes several choices explicit:
1. Sample-level COSTE/SSS matrices are reconstructed into full `47 x 47` directed graphs per sample.
2. Missing pairs are filled with `1.0` before aggregation, matching the manuscript description of absent spatial associations.
3. Stage graphs are formed by averaging per-sample matrices within `HD`, `LA`, and `MA`.
4. Message passing uses an affinity transform `1 - SSS`, so stronger spatial association yields stronger graph connectivity.
5. Temporal structure is modeled explicitly as the ordered sequence `T1 -> T2 -> T3`, with a GCN-based encoder, GRU-style temporal state update, and pairwise decoder trained to predict later-stage spatial relationships.
## Expected Input
`scripts/run_dst_gnn.py` expects a CSV with these columns:
- `row`
- `column`
- `value`
- `sample`
- `group`
This matches the recovered manuscript input table `cophenetic_distances_searcher_D_score_in_all_samples.csv`.
## Usage
Install PyTorch and PyTorch Geometric with versions appropriate for your CPU/CUDA environment, then install the remaining dependencies:
```bash
pip install -r requirements.txt
```
Run the end-to-end analysis:
```bash
python scripts/run_dst_gnn.py \
--csv /path/to/cophenetic_distances_searcher_D_score_in_all_samples.csv \
--output-dir outputs/lung_fibrosis_dst_gnn \
--epochs 400 \
--run-explainer
```
The script writes stage-level matrices, training history, predicted next-stage graphs, top changing nodes, top changing edges, and optional explainer outputs.
## Reproducibility
The bundled formal release was generated with the cleaned public implementation using:
- `device=cpu`
- `seed=0`
- `hidden_channels=32`
- `dropout=0.0`
- `lr=0.01`
- `weight_decay=5e-4`
- `epochs=400`
- `top_k=20`
- `run_explainer=true`
Reproduce the public release from the bundled input:
```bash
python scripts/run_dst_gnn.py \
--csv data/inputs/cophenetic_distances_searcher_D_score_in_all_samples.csv \
--output-dir outputs/repro_check \
--device cpu \
--seed 0 \
--hidden-channels 32 \
--dropout 0.0 \
--lr 0.01 \
--weight-decay 5e-4 \
--epochs 400 \
--top-k 20 \
--run-explainer
```
Verify the rerun against the bundled formal release:
```bash
python scripts/verify_repro.py \
--expected-dir data/outputs/formal_release \
--actual-dir outputs/repro_check
```
The repository intentionally bundles the direct DST-GNN input and the formal output release, but it does not bundle the original raw Xenium data. Manuscript conclusions should still be cited to the associated paper.
## Recovery Notes
The primary recovered sources were:
- `Y:/long/publication_datasets/Vannan_2023_Lung_Fibrosis/notebook/GNN modelling.ipynb`
- `Y:/long/publication_datasets/Vannan_2023_Lung_Fibrosis/notebook/Expression Distance Similarity.ipynb`
Mirrored copies were also located on the connected A100 server under `/mnt/taobo.hu/long/publication_datasets/Vannan_2023_Lung_Fibrosis/`.
See `references/RECOVERY_NOTES.md` for the full provenance summary.
## Citation
Please cite the associated manuscript for biological findings and figure-level conclusions. The repository-level citation metadata is provided in `CITATION.cff`.
## License
The currently published repository contents are distributed under a non-commercial license. See `LICENSE.md` for details.