This is the model for a tool that estimates the probability of Impaired Fasting Glucose (IFG) for Uganda using selected demographic and clinical variables. You can use either the full model (with cholesterol) or a simplified model.
# IFG Risk Stratification Model (Uganda)
A machine-learning risk-stratification model for **Impaired Fasting Glucose (IFG)** in
Ugandan adults, built on the nationally representative 2023 WHO STEPS survey. The final
model is a LASSO logistic regression with isotonic probability calibration, evaluated with
**out-of-fold (OOF) predictions** from nested cross-validation, and paired with a
threshold-based low / moderate / high risk stratification.
This repository reproduces the analysis behind the manuscript
*"Calibrated Risk Stratification Model for Impaired Fasting Glucose in the Ugandan
Population: A Nested Cross-Validation and Threshold Optimization Approach."*
## Key results (out-of-fold)
| Metric | Value (95% CI) |
|--------|----------------|
| ROC AUC | 0.68 (0.64–0.71) |
| PR AUC | 0.40 (0.34–0.46) |
| Brier score | 0.155 (0.143–0.168) |
| Sensitivity / Specificity | 0.60 / 0.69 |
| PPV / NPV | 0.34 / 0.86 |
At the balanced (G-mean) operating point, threshold ≈ 0.21. Risk bands: low ( **On evaluation:** all reported performance is from OOF predictions, not from evaluating
> the model on its own training data. See docs/EVALUATION_NOTES.md.
## Repository structure
```
ifg-risk-model/
├── preprocessing/
│ ├── steps2.0.1.R # R: cleaning, MICE imputation, IFG derivation
│ └── README.md
├── src/ # model modules (data processing, model zoo, evaluation, plots)
├── pipeline/ # original entry scripts (train / evaluate / stratify / app)
├── analysis/ # reproducible OOF analysis (primary)
│ ├── run_analysis.py # discovery + nested-CV OOF + bootstrap CIs + thresholds
│ ├── make_figures.py # all analysis figures
│ └── recompute_tables.py # descriptive Tables 3 & 4
├── results/ # committed outputs (reports, metrics, OOF predictions, figures)
├── data/
│ └── raw/ # place case_cohort_IFG.xlsx here (not distributed; see data/README.md)
├── docs/EVALUAT …