WIMOAD a stacking ensemble and weighted integration of multi-omics data for AD diagnosis. WIMOAD synergistically leverages specialized classifiers for patients' paired gene expression and methylation data for multi-stage classification. The resulting scores of classifiers were then stacked for meta-learning performance improvement. The prediction results of two distinct meta-models were integrated with optimized weights for the final decision-making of the model, providing higher performance than using single omics only.
WIMOAD is organized around two stages, each usable independently:
- Meta-learning (stacking) —
runner.py,main.py,parallel.py/parallel_loo.py,model_config.py,data_loader.py,metrics.py: for each omics branch, trains base classifiers, stacks their out-of-fold predictions with several meta-models under nested cross-validation, and reports evaluation metrics. - Integration (weighted fusion) —
integration.py: given each branch's best stacking model, searches the expression/methylation weight that maximizes the fused prediction's AUC.
This repository ships the modeling framework only; it does not include or require any specific dataset.
- Clone the WIMOAD git repository:
git clone https://github.com/wan-mlab/WIMOAD.git
cd WIMOAD- Create a new conda environment:
conda create -n wimoad python=3.9
conda activate wimoad- Install Python dependencies:
pip install -r requirements.txtWIMOAD expects one CSV per omics branch, each with:
RID: a unique sample identifier (used as the index)DX_bl: the raw diagnosis label for that sample- remaining columns: feature values for that branch (gene expression or methylation levels)
Raw DX_bl values are remapped to a binary label per task using the label_map defined for that task in configs/tasks.yaml; any samples with a value not covered by the mapping's binary classes are dropped. No other assumptions are made about the data — feature columns, sample counts, and diagnosis coding are all task/dataset-specific and configured in configs/tasks.yaml.
Run the default ca task for both omics branches with leave-one-out CV:
python runner.pyRun a specific branch, CV strategy, and output directory:
python runner.py --group ca --omics expression --cv KFold --output-dir resultsCore files:
configs/tasks.yaml: task groups, label maps, and base-model hyperparametersdata_loader.py: CSV loading, label remapping, and feature selectionmodel_config.py: meta models and sklearn estimator factories built fromconfigs/tasks.yamlparallel.py/parallel_loo.py: nested-CV stacking training (KFold and leave-one-out outer loops)metrics.py: classification metrics computed per stacking runrunner.py: command-line stacking workflowintegration.py: weighted multi-omics fusion — best-model selection per branch and fusion weight search
- Prepare one CSV per omics branch in the format described in Data Format.
- Add a task entry to
configs/tasks.yaml: pointexpression_file/methylation_fileat your CSVs, define thelabel_mapfor your diagnosis coding, and set base-classifier hyperparameters for each branch. - Run
python runner.py --group <your_task>to train and evaluate the stacking ensembles for that task. - Use
integration.pyto select each branch's best model and search the fusion weight over the resulting predictions.
If you have any questions, comments, or would like to report a bug, please contact haxiao@unmc.edu
Xiao, H.; Wang, J.; Wan, S. WIMOAD: Weighted Integration of Multi-Omics data for Alzheimer's Disease (AD) Diagnosis. bioRxiv 2024.09.25.614862, https://www.biorxiv.org/content/10.1101/2024.09.25.614862v1