Early Prediction and Key Factor Analysis of Diabetic Kidney Disease — A Cross-Population Statistical Study Based on CHARLS and NHANES
糖尿病肾病早期预测与关键因素分析——基于CHARLS与NHANES的跨人群统计测度研究
- Python (>=3.14, tested 3.14.4)
- Rust (nightly 1.97+, tested 1.97.0-nightly)
- uv (Python 包管理)
- maturin (Rust/Python 混编构建)
- Cargo (Rust 包管理)
- OpenCode
- Cherry Studio
- DeepSeek V4 Pro
- Claude Opus 4.7
| Package | Version | Purpose |
|---|---|---|
| numpy | >=2.4.4 | 数值计算基础 |
| pandas | >=3.0.2 | 数据处理与表格操作 |
| pyreadstat | >=1.3.4 | SAS XPT / Stata .dta 文件读取 |
| scipy | >=1.14.0 | 统计检验(Spearman ρ p 值) |
| scikit-learn | >=1.8.0 | 机器学习模型与特征工程 |
| lightgbm | >=4.6 | 高效梯度提升树分类器 |
| shap | >=0.51 | 模型可解释性(SHAP 值) |
| imbalanced-learn | >=0.14 | 不平衡数据处理(SMOTE 等) |
| matplotlib | >=3.10 | 论文图表绘制 |
| seaborn | >=0.13 | 统计可视化 |
uv run python <filepath/filename>.py前置条件:
# 确保 Rust 已安装 (需 nightly 1.97+)
rustc --version
cargo --version初始化(首次设置):
# 安装 maturin 构建工具
uv pip install maturin日常开发流程:
# 1. 编辑 Rust 代码(src/lib.rs)
# 2. 编译并安装到虚拟环境
uv run maturin develop
# 3. 在 Python 中调用
uv run python -c "import stat_core; print(stat_core.ckd_epi_2021_creatinine_rs([1.0], [50.0], [0]))"添加新的 Rust 函数:
- 在
src/lib.rs中定义#[pyfunction] - 在
stat_core模块注册函数m.add_function(wrap_pyfunction!(...)?)? - 运行
uv run maturin develop - Python 端
import stat_core即可使用
依赖同步(其他开发者拉取代码后):
uv sync # 同步 Python 依赖
uv run maturin develop # 编译 Rust 扩展
git lfs pull # 拉取 Git LFS 管理的原始数据文件
uv run python setup.py # 安装 bootstrap.pth(使 import bootstrap 全局可用)本项目使用 Git LFS 管理原始数据文件(*.sas7bdat, *.dta, *.xpt),数据总量约 2 GB。
日常 LFS 操作:
git lfs pull # 拉取/更新 LFS 文件到工作目录
git lfs ls-files # 查看当前 LFS 追踪的文件
git lfs track "*.ext" # 添加新的 LFS 追踪模式
git lfs fetch # 仅下载到 .git/lfs 缓存,不替换工作目录文件
git lfs checkout # 用缓存中的 LFS 对象替换工作目录文件添加新的 LFS 文件:
# 1. 确保文件扩展名已在 .gitattributes 中追踪
git lfs track "*.new_ext"
# 2. 正常添加和提交
git add path/to/file.new_ext
git commit -m "add: 新数据集"Training on Chinese data (CHARLS 2015), external validation on US data (NHANES), quantifying cross-population generalization.
CHARLS 2015 (训练, 中国人群) → NHANES 2017-2020 (外部验证, 美国人群) → NHANES 2021-2023 (时域验证)
Label: eGFR < 60 (CKD-EPI 2021). CHARLS has no UACR — DKD per KDIGO not definable on training set. NHANES sensitivity analysis with UACR quantifies eGFR-only miss rate.
| Metric | CHARLS (Train) | NHANES P (Spatial) | NHANES L (Temporal) |
|---|---|---|---|
| LASSO LR AUC | 0.829 [0.794, 0.877] | 0.907 [0.879, 0.914] | 0.910 [0.879, 0.913] |
| LightGBM AUC | 0.790 | 0.872 | 0.858 |
| ≥45 subset AUC | — | 0.894 | 0.899 |
| Top SHAP features | Age, BUN, Uric_Acid | Age, BUN, Uric_Acid | Age, BUN, Uric_Acid |
Cross-population generalization: AUC increases 0.829→0.907 despite BMI/Waist shifts >1.5σ. See
docs/Modeling Methodology.md§8 for full results.
Cargo.toml ← Rust 项目配置(依赖 pyo3)
Cargo.lock ← Rust 依赖锁文件
src/lib.rs ← Rust 源码(stat_core PyO3 模块:CKD-EPI×3, net_benefit, spearman_rho)
pyproject.toml ← Python 项目 + maturin 构建配置
uv.lock ← uv 依赖锁文件
LICENSE ← GNU GPL v3
.github/workflows/ ← CI/CD: ci.yml, cd-release.yml, opencode.yml
.gitattributes ← Git LFS 配置(*.sas7bdat, *.dta, *.xpt)
source/
__init__.py ← package 标记
utils.py ← 共享 FEATURES 常量 + Rust stat_core 的 numpy 封装
pre-processing/
CHARLS/parse_merge.py ← CHARLS 2015 预处理(血检+体格+问卷→eGFR→T2DM筛选)
NHANES/parse_merge_p.py ← NHANES 2017-2020 P-cycle 预处理
NHANES/parse_merge_l.py ← NHANES 2021-2023 L-cycle 预处理
model/
train_evaluate.py ← LASSO LR + LightGBM 训练与跨人群验证
ckd_epi_formula_sensitivity.py ← 三种 CKD-EPI 公式标签敏感性分析
bootstrap_ci.py ← Bootstrap 1000 次 AUC 置信区间
shap_analysis.py ← SHAP 特征重要性(LightGBM)
calibration_dca.py ← 校准曲线 + 决策曲线分析
robustness_checks.py ← 重复CV + DM筛查亚组 + 年龄分层
tests/ ← (待构建)单元测试
docs/ ← 详细文档(Modeling Methodology.md 为建模权威文档,Figure Guidelines.md 为图表绘制建议)
figures/ ← 15 张论文 SVG + 图表说明(Figure Description.md)+ 补充材料(docx + 说明md)
thesis/ ← 论文撰写工作区
note/ ← 论文稿件 + 框架笔记 + 数据表
知网查重报告/ ← CNKI 查重报告(4 份 PDF)
糖尿病肾病...研究.docx ← 完整版论文(命名版 + 匿名送审版)
scripts/ ← 一键运行脚本(run_pipeline.ps1)
Dataset/
Raw/
CHARLS/ ← 中国健康与养老追踪调查(主训练集)
2015r/ ← Wave 3 (2015): 血检+体格+完整问卷, 13,420人
2018r/ ← Wave 4 (2018): 问卷, 无血检/体格
2020r/ ← Wave 5 (2020): COVID电话随访, 无血检
Harmonized/ ← 跨波次标准化数据 (2011-2018), 25,586人
NHANES/ ← 美国国家健康与营养调查(外部验证集)
2017-2020p/ ← P-cycle: 含完整UACR+血检+体格
2021-2023p/ ← L-cycle: 同上, 独立时域验证
CHNS/ ← 中国健康与营养调查(弃用, 仅2009波血检且无尿检)
Biomarker/ ← biomarker_09.sas7bdat
Individual-Level/ ← 27张SAS表(健康、体检、人口学等, 1989-2015)
Household-Level/ ← 15张SAS表
Diet/ ← 膳食摄入
Constructed-Variables/ ← hhinc, indinc, urban
Supplemental/ ← 权重与关系说明
DiaKG/ ← 中文糖尿病知识图谱(轻量引用, 不做模型输入)
Wave2021_05/ ← 41篇标注JSON文献
Pima Indians Diabetes Database.csv ← 经典基线数据集
Int/
CHARLS/CHARLS_T2DM_train.csv ← 训练集 (1,992人, 124阳性)
NHANES/NHANES_P_T2DM_val.csv ← 空间验证集 (1,612人, 272阳性)
NHANES/NHANES_L_T2DM_val.csv ← 时域验证集 (1,022人, 174阳性)
Result/ ← 模型输出(23 CSVs)
LASSO_coefficients.csv ← LASSO 回归系数
feature_distribution_shift.csv ← 特征分布偏移分析
model_metrics.csv ← 模型性能指标汇总(含 ≥45 子集)
CHARLS_predictions.csv ← 训练集预测概率
validation_predictions.csv ← 三数据集预测概率与真实标签
bootstrap_ci.csv ← Bootstrap 1000 次 AUC 分布
bootstrap_coefficients.csv ← Bootstrap 1000 次 LASSO 系数分布
formula_sensitivity_coefficients.csv ← 三公式 LASSO 系数对比
formula_sensitivity_metrics.csv ← 三公式 AUC 指标对比
formula_sensitivity_predictions.csv ← 三公式 NHANES 预测概率
formula_label_reclassification.csv ← 三公式 per-patient DKD 标签
kdigo_detection.csv ← KDIGO-DKD 检出 vs 漏诊
shap_importance.csv ← SHAP 特征重要性
shap_direction_consistency.csv ← SHAP 方向跨人群一致性
shap_values_CHARLS.csv ← CHARLS 逐样本 SHAP 值
shap_values_NHANES_P.csv ← NHANES P 逐样本 SHAP 值
shap_values_NHANES_L.csv ← NHANES L 逐样本 SHAP 值
calibration_bins.csv ← 校准曲线 bin 数据
calibration_metrics.csv ← 校准斜率和截距
decision_curve.csv ← 决策曲线净收益
repeated_cv.csv ← 5 seed 重复 CV 结果
dm_subgroup_auc.csv ← DM 筛查亚组 AUC
age_stratification_auc.csv ← 年龄分层 AUC
logs/ ← 预处理日志文件
Paper/ ← 参考文献(gitignored)
资料/ ← 竞赛资料(gitignored)
- 2017-2020 (P-cycle): 8 张 SAS XPT 表,含人口学、体格检查、生化指标、糖尿病问卷等
- 2021-2023 (L-cycle): 同上结构,用于独立验证集
- 2015r (Wave 3): 18 张 Stata .dta 文件(Blood.dta 血检 23 变量 + Biomarker.dta 体格测量 222 变量 + 16 张问卷表),13,420 人采血
- 血检含:肌酐(bl_crea) + 胱抑素C(bl_cysc) → 可算三合一 CKD-EPI eGFR;HbA1c、空腹血糖、血脂全套、尿酸、CRP、BUN、血常规
- 体格含:血压(3次)、BMI、腰围、握力、步速、平衡等
- 注意:CHARLS未采集尿检 — 无UACR/尿白蛋白
- 2018r (Wave 4): 14 张 .dta 表,仅问卷,无血检/体格测量
- 2020r (Wave 5): COVID-19 电话随访,数据量极少,基本不可用
- Harmonized (Version D): 跨波次(2011-2018)标准化,25,586 人,含自报病史(RwDIABE, RwKIDNEYE)、体格(RwSYSTO, RwMBMI)、用药等
- 仅 2009 年一波血检,无任何尿检数据,无法构建完整 DKD 标签,与 CHARLS 角色重叠但更弱。保留以备参考。
- Wave2021_05: 41 篇医学文献的结构化标注(JSON 格式)
- 包含实体标注(疾病、药物、检验指标等)和关系标注(药物-疾病、病理-疾病等),可用于特征工程启发
- 经典糖尿病预测数据集,用于基线模型验证
| 文件 | 内容 | 详细解读 |
|---|---|---|
Supplementary Figures S1-S3 (OPLS-DA Volcano ROC).docx |
代谢组学补充图(OPLS-DA、火山图、ROC) | figures/Supplementary Figures S1-S3 说明.md |
Supplementary Tables S1-S4 (Internal Standards and Differential Metabolites).docx |
差异代谢物表 + 内标(DM vs Control、DN vs DM、DN-1 vs DN-2) | figures/Supplementary Tables S1-S4 说明.md |
该文献研究 DKD 代谢组学生物标志物,分组标准与本项目 NHANES 的 DKD 分期完全一致(uACR <30 / 30–300 / >300 mg/g),可作为特征筛选的方法学参考。差异代谢物(如 Adenine、L-Tryptophan、Pseudouridine 等)在 DKD 分期中呈现逐级变化趋势。
共 13 篇 PDF,涵盖 DKD 临床诊疗指南、机器学习预测模型、数字健康干预、全球糖尿病疾病负担及代谢组学生物标志物等领域。
本项目采用 GNU Affero General Public License Version 3。
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Copyright (C) 2026 Jingran JIAO, Yikun CHEN, Yaxuan WANG, all from Nanjing University of Science and Technology, NJUST.