TCGA-GBM Radiomic and Clinical Data with Graph-Sparse NMF Analysis Code

Published: 9 September 2026| Version 2 | DOI: 10.17632/9n4pbs55ks.2
Contributors:
, Antonia Dávila,

Description

This repository contains the complete data and source code supporting the manuscript "Graph-Regularized Sparse Non-negative Matrix Factorization for High-Dimensional Brain Radiomics" (Ceballos & Silva Cordero, Universidad Nacional de Colombia, Sede de La Paz). It includes: (1) real radiomic feature data for 102 patients from the BraTS-TCGA-GBM collection (Bakas et al., 2017, The Cancer Imaging Archive), (2) real clinical and survival data for the same cohort obtained from the NCI Genomic Data Commons (GDC), TCGA-GBM project, (3) the processed and merged dataset used in the pilot validation described in the manuscript, (4) the complete Python source code implementing the proposed Graph-Sparse Non-negative Matrix Factorization (Graph-Sparse NMF) algorithm, an independent Cox proportional-hazards regression implementation, the synthetic verification experiments, the real-data pilot validation, and the nested cross-validated hyperparameter search reported in the manuscript, and (5) the numerical results (including the honest negative finding reported in the manuscript: +0.004 concordance-index gain of the best radiomics+age model over an age-only clinical baseline, not statistically significant). All code was executed and verified to run end-to-end; reported numerical results in the manuscript were produced directly by this code and are fully reproducible with the fixed random seeds included in each script. Original third-party data sources (TCIA and GDC) are cited in full below and remain governed by their original data-usage licenses.

Files

Steps to reproduce

Requirements: Python 3.10+ with numpy, pandas, scipy, scikit-learn. Unzip this package (data/ and code/ subfolders). Run scripts from inside code/, since relative paths point to ../data/. 1. python code/graph_sparse_nmf.py - synthetic convergence check (seed=42): ~0.016-0.018s, loss 25979 to 557 over 300 iterations, monotonic decrease. 2. python code/theorem_verification_experiments.py - empirical verification of the two analytical bounds (Supplementary Material A, Section A3). 3. python code/real_data_pilot.py - preprocesses TCGA_GBM_radiomicFeatures.csv (30% missing-value filter, median imputation, min-max normalization), builds the k=10 cosine affinity graph, fits Graph-Sparse NMF on 102 real patients, writes H_real.npy/W_real.npy. Expected: ~0.07-0.08s, loss 1438.5 to 684.8, monotonic. 4. python code/survival_analysis.py - log-rank and Cox regression on the real cohort (requires imaging_clinical_merge.csv and H_real.npy from step 3). 5. python code/hyperparameter_search_cv.py - 36-configuration nested 5-fold CV. Best: k=12, alpha=0.05, beta=0.5, C-index=0.660 vs. age-only baseline 0.657 (+0.004). 6. python code/extended_analysis.py - ablation study, 216-configuration grid, graph-construction comparison, repeated-CV confidence interval. Best single-split C-index=0.710 (+0.053). 7. python code/boundary_check_A1_1.py - checks whether iterates stay bounded away from the feasible region boundary (needed for a stationary-point guarantee). Confirms they do not: W underflows to exact 0.0 on real data. 8. python code/nested_cv_full.py - fully nested cross-validation (~3 min), closing residual selection bias left by step 6. Final result: mean C-index (radiomics+age)=0.628, age-only=0.647, gain=-0.019, 95% CI=[-0.126,+0.022] - the manuscript's most rigorous estimate. The in-house Cox model (cox_model.py) was validated against a synthetic case with known ground-truth effect size before use on real data (see Methods).

Categories

Biomedical Engineering, Applied Mathematics, Oncology, Medical Imaging, Machine Learning, Survival Analysis, Numerical Linear Algebra, Radiomics

Licence