Analysis code and aggregated results for the manuscript:
"Detecting Early Cognitive Decline Using Eye-Tracking Metrics in a Virtual Reality Cognitive Screening Tool"
Submitted to: Diagnosis, Assessment & Disease Monitoring (DADM)
This GitHub repository contains CODE ONLY (analysis scripts, ROI dictionaries, and aggregated group-level summary outputs). It does NOT contain participant-level data.
✅ Analysis code - All Python scripts to reproduce Tables/Figures and statistical analyses ✅ ROI dictionaries - Region of Interest mappings and classification rules ✅ Aggregated outputs - Group-level summary statistics required to verify manuscript claims ✅ Publication figures - Final figures with group-level visualizations
❌ Participant-level datasets - Demographics, MMSE scores, eye-tracking features (N=60 participants) ❌ Granular eye-tracking exports - Task-level, ROI-level, event-level data ❌ Out-of-fold predictions - Per-participant cross-validation outputs ❌ Raw VR recordings - Original eye-tracking time-series data
Why? Our Research Data Management Plan (DMP) and Human Research Ethics approval classify this dataset as re-identifiable. Participant-level data requires controlled access via data sharing agreement.
See REQUEST_ACCESS.md for detailed instructions on requesting participant-level derived datasets.
Summary:
- Submit formal request to Dr. King Hann Lim (glkhann@curtin.edu.my)
- Provide research proposal + institutional ethics approval
- Execute data sharing agreement
- Receive controlled data package from Curtin Research Data Collection
Cohort: N=60 (20 Controls, 20 MCI, 20 AD) Task: VR-based cognitive screening tool (VR-CS, 21-point scale) Eye-tracking: Pico 4 Pro head-mounted display with integrated eye tracking (HMD refresh 90 Hz; eye-tracking sampled at 60 Hz; angular accuracy ~0.5°) Primary outcome: MCI vs Controls classification using eye-tracking + cognitive features
Note on naming: In code/results, historical variable names such as VR_MMSE_total may appear; these correspond to the VR-CS total score (21-point) reported in the manuscript.
Cross-validated ROC (MCI vs Controls):
- AUC: 1.00 (95% CI: 1.00–1.00, 10-fold stratified CV)
- Sensitivity: 100% (95% CI: 83.2%–100%, Clopper-Pearson exact)
- Specificity: 100% (95% CI: 83.2%–100%, Clopper-Pearson exact)
Validation Evidence:
- ✅ Permutation test (1,000 iterations): p < 0.001
- ✅ Repeated CV (100 repeats): Mean AUC = 1.00, SD = 0.00
- ✅ Confounding baseline: Demographics-only AUC = 0.44
Feature Separation: Two eye-tracking features show perfect group separation due to working memory deficits in MCI (5–6× more ROI entries/regressions). See figures/feature_separation_focused.png.
pip install -r requirements.txtRequirements: Python 3.8+, pandas, numpy, scikit-learn, matplotlib, seaborn, scipy
You can verify manuscript claims using the aggregated outputs provided in results_public/:
# View ROC metrics (aggregated)
cat results_public/metrics.json
# View permutation test results
cat results_public/permutation_test_summary.json
# View repeated CV stability
cat results_public/repeated_cv_summary.json
# View confounding baseline
cat results_public/confounding_baseline_results.jsonNote: The following scripts require participant-level data (not included in this repository):
cd code
# Cross-validated ROC analysis
python 04_roc_cv_enhanced.py # Requires participants_master.csv
# Generate Figure 3
python 05_figures.py # Requires participant_task_level_metrics.csv
# Validation analyses
python 05_permutation_test.py
python 06_repeated_cv.py
python 07_confounding_baseline.py
python 08_feature_distribution_plot.pyTo run these scripts, request access to the controlled data package via REQUEST_ACCESS.md.
vr-cs-eye-tracking-analysis/
├── README.md # This file
├── REQUEST_ACCESS.md # How to access controlled data
├── LICENSE # MIT License (code)
├── requirements.txt # Python dependencies
├── .gitignore # Prevents accidental commit of sensitive data
├── code/ # Analysis scripts (PUBLIC)
│ ├── 04_roc_cv.py # Basic ROC CV
│ ├── 04_roc_cv_enhanced.py # Enhanced ROC CV (P0 artifacts)
│ ├── 05_figures.py # Generate Figure 3
│ ├── 05_permutation_test.py # 1,000 permutations
│ ├── 06_repeated_cv.py # 100 repeated CVs
│ ├── 07_confounding_baseline.py # Demographics-only baseline
│ └── 08_feature_distribution_plot.py # Feature separation viz
├── docs/ # Documentation (PUBLIC)
│ ├── ROI_Dictionary.txt # Human-readable ROI descriptions
│ ├── ROI_Mapping.csv # Machine-readable ROI types
│ ├── roi_mapping_rules.md # Classification algorithm
│ └── data_dictionary.csv # Variable definitions
├── results_public/ # Aggregated outputs (PUBLIC, group-level only)
│ ├── metrics.json # ROC metrics (aggregated)
│ ├── software_versions.txt # Environment snapshot
│ ├── mci_cv_roc_report.txt # Human-readable ROC report
│ ├── permutation_test_summary.json # Permutation test (aggregated)
│ ├── repeated_cv_summary.json # Repeated CV (aggregated)
│ └── confounding_baseline_results.json # Confounding analysis (aggregated)
└── figures/ # Publication figures (PUBLIC)
├── Figure3_Saccade_Amplitude_Publication.png # Main figure
├── Fig3_source_data.csv # Group×task summary
└── feature_separation_focused.png # Feature separation plot
Eye-tracking data are classified into three ROI types:
- KW (Keywords): Target words in each task (e.g., time words, location names)
- INST (Instructions): Task instruction regions
- BG (Background): Background regions (used to detect off-task attention)
See docs/ROI_Dictionary.txt and docs/roi_mapping_rules.md for complete documentation.
Manuscript results reproduced using:
- GitHub Release: v2.0.1
- Zenodo Package: 10.5281/zenodo.18309467
This ensures reviewers can identify the exact code version corresponding to the manuscript.
- Random seed: 42 (for reproducible cross-validation splits)
- CV method: 10-fold stratified cross-validation
- Standardization: Leakage-safe (StandardScaler fit on training folds only)
- Confidence intervals: Clopper-Pearson exact (binomial)
MIT License - Free for academic and commercial use. See LICENSE.
CC BY 4.0 - Attribution required when reusing aggregated results in results_public/.
For this code repository:
Zuo, H. (2026). VR-CS Eye-Tracking Analysis Code (v2.0) [Software].
GitHub. https://github.com/HaiweiZuo/vr-cs-eye-tracking-analysis
For the Zenodo dataset (aggregated data + full documentation):
Zuo, H. (2026). VR-CS + Eye-Tracking Dataset for Alzheimer's Disease
and MCI Detection (v2.0) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.18309467
For controlled data (if obtained via Curtin RDC): Add to your Data Availability statement:
Participant-level derived datasets were obtained from Curtin Research Data
Collection under a data sharing agreement (contact: Dr. King Hann Lim,
glkhann@curtin.edu.my).
- 📊 Zenodo Open Package: https://doi.org/10.5281/zenodo.18309467 (Full documentation, aggregated results, pre-generated validation outputs)
- 🔒 Controlled Data: Curtin Research Data Collection (Participant-level datasets, available upon request)
- 📄 Manuscript: DADM submission (under review)
Haiwei Zuo PhD Candidate Curtin Malaysia Research Institute, Curtin University Malaysia Email: haiwei.zuo@postgrad.curtin.edu.my ORCID: 0009-0009-7008-3028
Dr. King Hann Lim Corresponding Author Email: glkhann@curtin.edu.my
This research was approved by the Curtin University Human Research Ethics Committee. Eye-tracking data were collected using a Pico 4 Pro head-mounted display with integrated eye tracking. VR environment developed in Unity.
Last updated: 2026-01-23 Version: 2.0 GitHub: https://github.com/HaiweiZuo/vr-cs-eye-tracking-analysis Zenodo: https://doi.org/10.5281/zenodo.18309467
MMSE instrument content (items/forms) is not reproduced in this repository due to licensing/copyright restrictions. The MMSE is used only as an external comparator (total score) for concurrent validity.