信息速览

MESA Sleep(多民族动脉粥样硬化睡眠研究)— 多民族居家睡眠生理信号数据集 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | MESA Sleep(多民族动脉粥样硬化睡眠子研究) |
| 英文全称 | Multi-Ethnic Study of Atherosclerosis Sleep Ancillary Study |
| 别名/简称 | MESA Sleep Exam、MESA Sleep Ancillary Study、NSRR MESA(slug:mesa) |
| 疾病分类 | 睡眠呼吸障碍与失眠(ICD-11:7A41 阻塞性睡眠呼吸暂停 / 7A40 中枢性睡眠呼吸暂停 / 7A4Z 睡眠相关呼吸障碍 / 7A00 慢性失眠)及亚临床心血管病变结局 |
| SNOMED CT | 194441007 Obstructive sleep apnea / 268997007 Central sleep apnea syndrome / 193462001 Insomnia / 267390006 Sleep-related breathing disorder(详见 §2.1b) |
| 数据模态 | 居家整夜 PSG(15 通道 Type 2,Compumedics Somte)+ 腕部活动计(Actiwatch Spectrum,连续 7 天)+ 睡眠问卷 |
| AI 任务类型 | 睡眠分期、睡眠呼吸暂停筛查与严重度分级、活动计睡眠/觉醒分类、ECG/HRV 表征学习、多模态融合 |
| 样本总数 | 2,237 名受试者(PSG 完成 2,166 例;活动计连续 7 天;睡眠问卷全覆盖) |
| 数据大小 | 385 GB(10,364 个文件,665 个变量,截至 2026-09 的 NSRR 在库口径) |
| 数据格式 | EDF(原始 PSG 信号)+ XML(呼吸/血氧/觉醒/分期事件标注)+ CSV(受试者级变量、活动计计数、R 点、HRV) |
| 许可证 | NSRR Data Use Agreement(注册后免费签署,禁止公网再分发) |
| 访问级别 | 申请审核(NSRR 注册 + 签署 DUA) |
| DUO 标签 | HMB, NPUNCU, IRB |
| 语言 | 英语(文档与变量);受试者来自英语、西班牙语、汉语多语言社区 |
| 首发日期 | 数据采集 2010-2013;NSRR 现行版本 0.6.0(2023-05-02) |
| 最后更新 | 2023-05-02(版本 0.6.0 CHANGELOG) |
| 发布机构 | NHLBI 资助的 MESA 睡眠研究协作组(6 个临床中心 + Brigham and Women’s Hospital 中央阅片中心)与 NSRR |
| 官方主页 | sleepdata.org/datasets/mesa |
| 下载地址 | NSRR MESA 数据目录(注册后经 nsrr 命令行工具或 API 下载) |
| DOI | 10.25822/n7hq-c406(NSRR MESA 数据集页面 DOI) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— EDF+XML+变量 CSV 全套分发,nsrr 下载工具与 HRV 派生变量齐备,社区工具链(sleepecg、基准代码)成熟;扣分项:无官方训练/测试划分、日期脱敏使 PSG-活动计对齐依赖补充文件、部分记录缺 R 点标注、信号质量分层明显 |
| 页面状态 | published |
§0 E-E-A-T 审核声明
医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、睡眠呼吸障碍与失眠的临床定义、AHI 指标语义)、§7 偏倚分析。
数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。MESA Sleep 通过 NSRR(sleepdata.org)分发,要求用户注册账号、签署数据使用协议(DUA),且禁止将受保护数据在公网再分发。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? MESA Sleep 是美国国家心肺血液研究所(NHLBI)资助的多民族动脉粥样硬化研究(MESA)的睡眠子研究。2010-2013 年间,技术人员走进 2,237 名中老年参与者家中,用便携设备做了一整夜多导睡眠监测(PSG),同时让参与者连续 7 天佩戴腕部活动计并填写睡眠问卷。四个族群——白人、非裔美国人、西裔、华裔美国人——都被覆盖,这在公开睡眠数据集中非常罕见。
为什么重要? 睡眠呼吸暂停和睡眠不足与高血压、糖尿病、动脉粥样硬化密切相关,但公开可用的、带人工精标注的 PSG 数据极为稀缺。MESA Sleep 一方面提供了 2,237 例带 AASM 标准分期的居家 PSG,另一方面通过 MESA 母队列(6,814 人)把这些睡眠指标与长达十余年的心血管结局关联起来,让"睡眠 → 心血管病"的 AI 建模有了真实锚点。
我能用它做什么? 训练和外部验证睡眠分期模型(U-Sleep、PFTSleep、SleepFM 等都把 MESA 当标准外测集);构建居家 PSG 的 OSA 筛查与 AHI 估计算法;做活动计睡眠/觉醒分类(它是目前最大的 PSG-活动计同步基准);或研究不同族群的睡眠健康差异。数据经 NSRR 免费申请获取,385 GB 全部开放下载。
§1.1 技术摘要
MESA(Multi-Ethnic Study of Atherosclerosis)是 NHLBI 资助的 6 中心纵向队列,2000-2002 年基线招募 6,814 名 45-84 岁的白人、非裔、西裔与华裔美国人,追踪亚临床心血管疾病的进展(NSRR 数据页)。MESA Sleep 是其在 Exam 5 期(2010-2012 年)启动的睡眠子研究:4,077 名受邀者中 2,261 人参加睡眠检查,2,166 人完成 1 晚居家无人值守 15 通道 Type 2 PSG(Compumedics Somte),并同时进行 7 天 Actiwatch Spectrum 腕部活动计监测与睡眠问卷采集(T2DM 论文方法节)。所有 PSG 记录由 Brigham and Women’s Hospital 中央阅片中心的技师按 AASM 标准人工分期(30 秒 epoch),呼吸事件与皮层觉醒按 SHHS 适配指南评分,呼吸事件相关血氧下降与 ECG R 点均以派生变量形式提供。NSRR 将全部原始 EDF、事件 XML 与受试者级 CSV 打包分发(10,364 个文件、385 GB、665 个变量,版本 0.6.0),并要求用户签署数据使用协议。
§1.2 战略价值
维度一:睡眠 AI 的"标准外测集"。 睡眠分期模型最容易在单队列上过拟合。MESA 的居家采集环境(非睡眠实验室)、老年样本(睡眠访视时 54-95 岁)、三导 EEG 的精简导联配置,与实验室 PSG 数据集(如 CFS、CCSHS)形成系统性分布差异,因此被 U-Sleep、PFTSleep、SleepFM、SOMNUS 等主流模型选作独立外部测试集(详见 §7.8 与 §8.1)。对一个新分期模型来说,"在 MESA 上 kappa 多少"已成为跨论文可比的通用标尺之一。
维度二:多民族 + 心血管结局的稀缺组合。 绝大多数开放 PSG 数据集以单一族群为主;MESA Sleep 的 PSG 子样本中白人 830、非裔 616、西裔 526、华裔 265(NSRR 变量表),可直接支撑睡眠健康差异研究。更关键的是,MESA 母队列在基线与历次随访采集了冠脉钙化、颈动脉内中膜厚度等亚临床动脉粥样硬化指标,使"客观睡眠指标 → 心血管结局"的预测建模可以闭环,这是 SHHS(以睡眠呼吸障碍为主要暴露)之外少有的设计。
维度三:PSG-活动计-ECG 同步的三模态底座。 参与者佩戴活动计的 7 天中包含 PSG 当夜,产生了可对齐的三模态数据(腕部加速度、多通道生理信号、心电图)。Palotti 等据此构建了迄今最大的活动计睡眠/觉醒公开基准(npj Digit Med 2019),后续工作又将 ECG 心率与活动计联合用于无 EEG 睡眠分期,使 MESA 成为可穿戴睡眠监测算法的公认训练底座。
§1.3 同类数据集横向对比
| 数据集 | 规模(PSG) | 采集场景 | 模态 | 人群 | 标注 | 差异化 |
|---|---|---|---|---|---|---|
| MESA Sleep | 2,237 人(完成 PSG 2,166) | 家庭,1 晚 | 15 通道 Type 2 PSG + 7 天活动计 + ECG + 问卷 | 4 族群中老年(睡眠访视 54-95 岁) | AASM 人工分期 + 呼吸/觉醒事件 | 多民族 4 族均衡、与心血管结局联动、三模态同步 |
| SHHS(千方已收录) | 视 1 约 5,793 / 视 2 约 2,651 | 家庭,各 1 晚 | PSG + 心电 | 40 岁以上、以白人为主 | 人工分期 + SDB 事件 | 最大规模家庭 SDB 队列,但族群单一 |
| MrOS Sleep(千方已收录) | 约 3,930(两访视合计) | 家庭,1 晚 ×2 | PSG + 活动计 | 65 岁以上男性 | 人工分期 | 男性老年专队列,与 MESA 常配对外测 |
| CFS(Cleveland Family Study) | 约 730 可分析 | 实验室 | 实验室 PSG | 家系,白人/非裔各半 | 人工分期 | 家系设计,实验室级信号质量 |
| HCHS/SOL(Sueño) | 16,415 人活动计 | 家庭 | 活动计为主(32.7 GB) | 西裔/拉丁裔 | 活动计算法+人工校核 | 西裔专队列,无 PSG |
规模数字来源:SHHS/MrOS/CFS/MESA 可分析口径取自 Nature Communications 2025 论文的队列描述(SHHS1 n=5,793、SHHS2 n=2,651、MESA n=2,056、MrOS n=3,930、CFS n=730);HCHS/SOL 取自 NSRR 数据集列表。
§1.4 版本时间轴
| 时间 | 事件 | 说明 |
|---|---|---|
| 2000-2002 | MESA 母队列基线 | 6,814 名 45-84 岁四族群参与者入组,6 个临床中心 |
| 2010-2012 | MESA Sleep 数据采集 | Sleep Exam 并入 Exam 5 期,2,261 人参加、2,166 人完成 1 晚 PSG |
| 2010-2013 | NSRR 收录时间范围 | NSRR 数据集页标注的时间覆盖 |
| 2023-05-02 | 版本 0.6.0 发布 | 现行版本;含 mesa-sleep-dataset-0.6.0.csv(7.2 MB)、harmonized 数据集(307 KB)与三级数据字典 |
§1.5 典型应用场景
- 睡眠分期模型外部验证:把在 SHHS/CFS 上训练的分期模型放到 MESA 上测跨队列泛化(PFTSleep、U-Sleep 的标准做法)。落地路径:受试者级留出全部 2,056 例可分析记录做测试,报告 κ 与分 stage AUROC。
- 居家 OSA 筛查:用流量、胸腹带与血氧通道构建 AHI 回归/OSA 分级模型,对标 ≥3% 脱饱和口径的人工评分。XML 中逐事件脱饱和属性提供了事件级监督,比纯 AHI 回归更强。
- 活动计睡眠/觉醒算法基准:以 PSG 分期为金标准,评测 Oakley 算法、传统规则与 CNN/LSTM(Palotti 基准的完整复现资源)。
- 无 EEG 可穿戴分期:用 ECG 派生心率+活动计预测 4-5 期睡眠,面向消费级手环场景;建议复用 §3.2 的 1,743 例三模态同步子集起步。
- 睡眠健康差异研究:四族群间的睡眠时长、AHI、N3 占比差异及其与亚临床动脉粥样硬化的关联建模;结局侧数据需经 BioLINCC/MESA Coordinating Center 另行申请。
§2 医学背景
§2.1 ICD-11 编码映射
MESA Sleep 覆盖的核心疾病范畴是睡眠-觉醒障碍(ICD-11 第 07 章)及心血管结局。下表给出 ICD-11(2024 版)编码映射,供跨数据源术语对齐时参考:
| 术语(中/英) | ICD-11 编码 | ICD-11 中文名 |
|---|---|---|
| 睡眠相关呼吸障碍(Sleep-related breathing disorders) | 7A4Z / L1-7A4 分组 | 睡眠相关呼吸障碍(分组) |
| 阻塞性睡眠呼吸暂停(Obstructive sleep apnoea) | 7A41 | 阻塞性睡眠呼吸暂停 |
| 中枢性睡眠呼吸暂停(Central sleep apnoea) | 7A40 | 中枢性睡眠呼吸暂停 |
| 睡眠相关低通气或低血氧障碍 | 7A42 | 睡眠相关低通气或低血氧障碍 |
| 慢性失眠(Chronic insomnia) | 7A00 | 慢性失眠症 |
| 亚临床动脉粥样硬化(结局侧,母队列暴露-结局闭环) | BA41.0 | 动脉粥样硬化性心血管疾病相关编码族 |
§2.1b SNOMED CT 映射
| 标签/概念 | ICD-11 | SNOMED CT 码 | SNOMED CT 术语 |
|---|---|---|---|
| 阻塞性睡眠呼吸暂停(队列核心暴露) | 7A41 | 194441007 | Obstructive sleep apnea |
| 中枢性睡眠呼吸暂停 | 7A40 | 268997007 | Central sleep apnea syndrome |
| 睡眠相关呼吸障碍(总体) | 7A4Z | 267390006 | Sleep-related breathing disorder |
| 失眠(问卷暴露,ISI/失眠症状) | 7A00 | 193462001 | Insomnia |
| 日间过度嗜睡(问卷条目相关) | 7A2 相关 | 46382002 | Hypersomnia / excessive daytime sleepiness |
| 睡眠效率低/睡眠片段化(派生指标) | 7A4Z 相关 | 267390006 相关 | Sleep-related breathing disorder(伴随测度) |
| 高血压(母队列结局侧) | BA00 | 38341003 | Hypertensive disorder |
§2.2 疾病与科学问题简介
阻塞性睡眠呼吸暂停(OSA) 是上气道在睡眠中反复塌陷导致的呼吸事件(窒息/低通气)序列,特征性后果是间歇性低氧、皮层微觉醒与睡眠片段化。中重度 OSA(AHI ≥15 次/小时,≥3% 脱饱和口径)与高血压、心律失常、胰岛素抵抗及动脉粥样硬化进展相关。MESA Sleep 官方设定的研究目标,正是理解"睡眠与睡眠障碍的变异如何在不同性别与族群间分布,并与亚临床动脉粥样硬化的测度相关"(NSRR 数据页)。
失眠 通过睡眠问卷评估(含失眠症状条目与嗜睡相关条目),与客观 PSG 指标(总睡眠时长、入睡后觉醒 WASO)形成"主观-客观"双通道;晨昏类型用修改版 Horne-Ostberg 晨昏问卷评估(JCEM 论文方法节)。流行病学层面,美国约 30% 的人口受睡眠不足困扰,但仅约 5% 获得规范诊断(PFTSleep 论文引言);而 OSA 的漏诊率更高,这是把居家 PSG 变成可及筛查工具(正是 MESA 这类家庭数据的价值)的直接动因。
在 MESA 队列内部,PSG 客观指标呈典型的老年分布:平均总睡眠时长 359.8±82.6 分钟、总记录时长 634.7±95.2 分钟、觉醒指数 22.3±12.1 次/小时(NSRR 变量统计),且女性总睡眠时长高于男性(376.5 对 340.5 分钟)、四族群间存在系统性差异——这些分布本身就是差异研究的素材。
§2.3 临床任务定义
| 临床任务 | 输入 | 输出标签 | 数据支撑 |
|---|---|---|---|
| OSA 筛查/严重度分级 | 呼吸气流、胸腹 RIP、SpO2 | AHI(≥3% 脱饱和)数值;OSA 无/轻/中/重分级 | XML 呼吸事件 + 派生 AHI 变量 |
| 睡眠分期 | EEG/EOG/EMG(或仅 ECG+活动计) | 30 秒 epoch 的 Wake/N1/N2/N3/REM | XML 分期标注 |
| 睡眠/觉醒分类 | 腕部活动计数(+可选心率) | 30 秒 epoch 睡眠/觉醒 | 活动计 CSV + PSG 分期 |
| 睡眠质量表型 | 全部通道 + 问卷 | TST、WASO、睡眠效率、N3%、觉醒指数 | 派生变量 CSV |
| 心血管风险关联/预测 | 睡眠指标 + 母队列协变量 | CAC 进展、高血压、T2DM、CKD 等 incident 结局 | MESA 母队列随访(经 BioLINCC 申请) |
§2.4 患者人群表
| 维度 | 描述 |
|---|---|
| 来源 | 美国城市社区人群(非患者登记):6 个临床中心所在的都会区住户 |
| 采集时间 | 睡眠检查 2010-2012(并入 MESA Exam 5,2010-2013 时间窗) |
| 年龄 | MESA 基线 45-84 岁;睡眠访视时 54-95 岁 |
| 性别 | 女性 1,198 / 男性 1,039(PSG 受试者口径) |
| 种族 | White 830 / Black 616 / Hispanic 526 / Chinese American 265 |
| 就医类型 | 社区队列;排除规律夜间氧疗、气道正压(PAP)或口腔矫治器使用者 |
| 招募漏斗 | Exam 5 共 4,716 人 → 4,077 人受邀 → 147 人不合格(PAP/口腔矫治器/氧疗史)→ 2,261 人参加 → 2,166 人完成 1 晚 PSG |
§2.5 临床与科研价值
对睡眠医学而言,MESA Sleep 提供了"居家环境 + 老龄 + 多民族"三个真实世界维度的金标准参考:居家采集的信号质量分布与睡眠实验室显著不同,模型在此数据上的表现更接近真实部署场景。对心血管流行病学而言,MESA 是全球亚临床动脉粥样硬化研究的第一梯队队列,睡眠子研究使 N3 占比、夜间低氧负荷、睡眠片段化等指标可以直接进入 CAC(冠脉钙化)进展、T2DM、CKD 等结局模型——例如 N3 慢波睡眠与 T2DM 发病的前瞻性关联已在 MESA 中得到检验(JCEM 论文),多睡眠维度与 CKD 的关联亦有发表(Thorax 相关论文)。对 AI 工程而言,人工精标注 + EDF 原始信号 + 派生变量三层齐备,是从"信号到临床变量"完整教学链的理想教材。
§2.6 金标准参考表
| 维度 | 划分 | 标注方式 | 标注者 | 性质 |
|---|---|---|---|---|
| 睡眠分期 | 每 30 秒 epoch 一标签 | 人工视觉评分(AASM 标准) | BWH 中央阅片中心训练技师(3 名主评分者,参与信度监控与再培训) | 金标准;ICC Wake 0.96 / N1 0.86 / N2 0.63 / N3 0.81 / REM 0.96 |
| 皮层觉醒 | 事件起止时间 | 人工评分(SHHS 适配指南) | 同上 | 金标准;派生觉醒指数 ai_all5 |
| 呼吸事件 | 事件起止 + 类型(阻塞/中枢)+ 脱饱和程度 | 人工评分 + 软件联动血氧/EEG | 同上 | 金标准;AHI ≥3% 口径 |
| 活动计睡眠/觉醒 | 30 秒 epoch | 设备算法(Oakley θ=40)+ 人工依据日志校正 | 人工注释(不看 PSG) | 用于活动计基准的参照之一 |
§3 数据集规格
§3.0 版本与子集抉择矩阵
MESA Sleep 在 NSRR 上以"单版本 + 多子目录"形态分发,不存在需要挑选的历史版本;真正需要抉择的是"下载多大范围":
| 你的需求 | 推荐子集 | 大小 | 理由 |
|---|---|---|---|
| 表型分析 / 流行病学建模 | datasets/ 下的 mesa-sleep-dataset-0.6.0.csv + 数据字典 |
约 7.5 MB | 665 个受试者级变量一条 CSV 搞定,另有 harmonized 版(307 KB)跨数据集对齐 |
| 睡眠分期 / OSA 检测模型训练 | polysomnography/ 全目录(EDF + XML) |
约 385 GB 大头 | 原始信号与事件标注都在这里;磁盘紧张可只下 EDF+annotations-events-nsrr |
| 心率 / HRV 研究 | polysomnography/annotations-rpoints/ + HRV 派生变量 |
小于 1 GB | 官方 R 点 CSV 省去自检心拍;注意部分记录缺失(见坑点 3) |
| 活动计算法开发 | actigraphy/ + overlap/ 补充文件 |
约 1 GB 量级 | 30 秒 epoch 活动计数 + PSG 重叠信息(对齐必须用 overlap 文件,见坑点 1) |
| 跨数据集联合训练 | MESA + SHHS + MrOS 的 harmonized 数据集 | 各自几百 KB | NSRR 对核心变量做了跨队列 harmonize,先拿对齐口径再下原始数据 |
§3.1 模态详情
居家多导睡眠图(PSG)。 Compumedics Somte 系统,15 通道 Type 2 便携记录仪,由训练有素的工作人员上门完成信号标定与阻抗检查。通道构成(Thorax 论文方法节;JMIR 论文方法节):
| 通道组 | 数量 | 具体导联/传感器 | 主要用途 |
|---|---|---|---|
| EEG | 3 | C4-M1、Oz-Cz、Fz-Cz | 睡眠分期(精简 montage) |
| EOG | 2 | 双侧眼电 | REM 识别、入睡判定 |
| EMG | 1 | 下颌肌电 | 肌张力、REM 肌弛缓 |
| ECG | 1 | 双极导联 | 心率/HRV、心拍 R 点 |
| RIP 呼吸感应 | 2 | 胸式 + 腹式 | 呼吸努力(阻塞/中枢判别) |
| 气流 | 2 | 口鼻热电偶 + 鼻压力 | 窒息(热电偶平坦)与低通气(≥30% 振幅降) |
| SpO2 | 1 | 指脉血氧 | 脱饱和事件、低氧负荷、记录起止判定(OXSTAT) |
| 下肢运动 | 2 | 双侧体动传感器 | 周期性腿动 |
记录为整夜无人值守,起止时间未在文件中显式标注,官方以 SpO2 通道的 OXSTAT 质量信号确定实际起止(首个与末个缺失小于 15 秒的 5 分钟块,见坑点 4)。各通道采样率见官方 Equipment Montage and Sampling Rate Information 文档。
腕部活动计。 Actiwatch Spectrum(Philips Respironics),佩戴于非惯用手腕连续 7 天,三轴加速度聚合为 30 秒 epoch 的活动计数(activity counts),与 PSG 当夜形成同步(medRxiv 方法节)。设备原生的睡眠/觉醒算法为 Oakley θ=40 阈值(Palotti 论文)。
睡眠问卷与协变量。 涵盖失眠症状、嗜睡相关条目、晨昏类型(修改版 Horne-Ostberg 问卷)等;665 个 NSRR 变量还并入受试者人口学、人体测量与用药信息。
§3.2 按子集样本数表
同一队列在不同质量控制口径下的有效样本量差异巨大,选样前先对号入座:
| 子集口径 | N | 来源 |
|---|---|---|
| Sleep Exam 参加者(问卷+活动计) | 2,261 | PMC10686689 |
| 完成 1 晚 PSG | 2,166 | PMC10686689 |
| NSRR 收录受试者(文件级) | 2,237 | NSRR 数据集列表 |
| 总睡眠时长有效评分(slpprdp5 非缺失) | 2,057 | NSRR 变量页 |
| 可分析 PSG(主流 AI 论文口径) | 2,056 | Nature Communications 2025 |
| 觉醒指数有效(ai_all5 非缺失) | 2,035 | NSRR 变量页 |
| PSG+活动计+ECG 三模态同步(≥3 h 可用数据) | 1,743 | medRxiv 2020 |
| 活动计+心率分期(质量码 ≥6 且重叠 ≥6.6 h) | 808 | PLoS ONE 2023 |
| 高质量信号子集(全通道 ≥6 h 可评) | 276 | JMIR 2023 |
§3.3 格式表
| 对象 | 格式 | 说明 |
|---|---|---|
| 原始 PSG 信号 | EDF(.edf) |
每受试者一个整夜文件,命名 mesa-sleep-XXXX.edf |
| 事件标注(NSRR 版) | XML(mesa-sleep-XXXX-nsrr.xml) |
呼吸事件、血氧下降、觉醒、30 秒分期,NSRR 重导出格式 |
| 事件标注(原始系统) | XML(mesa-sleep-XXXX-profusion.xml) |
Compumedics ProFusion 导出,与 NSRR 版长度可能不一致(见坑点 4) |
| 心拍 R 点 | CSV(mesa-sleep-XXXX-rpoint.csv) |
含 seconds 列;并非所有记录都有(见坑点 3) |
| 受试者级变量 | CSV(mesa-sleep-dataset-0.6.0.csv,7.2 MB) |
665 个变量,一行一人 |
| 跨队列 harmonized 变量 | CSV(307 KB) | NSRR 跨数据集对齐口径 |
| 活动计 | CSV | 30 秒 epoch 活动计数 |
| 数据字典 | CSV ×3 | variables / forms / domains 三层字典 |
§3.4 存储大小
NSRR 官方口径:10,364 个文件、385 GB、665 个变量(截至 2026-09,NSRR 数据集列表)。实际占用按下载范围浮动:仅变量 CSV 约 7.5 MB;PSG 子目录(EDF+XML)占绝大部分体积;单受试者 EDF 大致在 100-200 MB 量级(整夜多通道记录,具体随记录时长变化)。
§3.5 标注方式
三层标注体系:人工金标准层——睡眠分期、觉醒、呼吸事件均由 BWH 中央阅片中心技师按标准化指南人工评分;半自动层——每个呼吸事件通过专用软件与血氧、EEG 信号联动,自动附加脱饱和幅度与觉醒关联属性;设备算法层——活动计的 Oakley θ=40 睡眠/觉醒判定 + 人工依据睡眠日志的校正注释(不看 PSG,保证活动计基准的独立性)。
§3.6 标注者资质与一致性
评分技师定期参加信度监控与再培训(JMIR 论文)。分期一致性:3 名主评分者 ICC 为 Wake 0.96、N1 0.86、N2 0.63、N3 0.81、REM 0.96;整组 inter/intra-rater ICC 范围 0.79-0.99(JCEM 论文)。N2 一致性偏低(0.63)是各队列共性,建模时对 N2/N3 边界错误应有预期。
§3.7 采集周期
睡眠检查窗口为 2010-2012(NSRR 时间覆盖 2010-2013),与 MESA Exam 5 核心检查中位间隔约 1 年(Thorax 论文)。每名受试者仅 1 晚 PSG,活动计连续 7 天覆盖 PSG 当夜。
§3.8 地域覆盖
美国 6 个临床中心所在的都会区(社区居住人群),四族群为白人、非裔美国人、西裔、华裔美国人;母队列整体族群构成为 39% 白人、28% 非裔、22% 西裔、12% 亚裔(以华裔为主)(Thorax 论文)。PSG 子样本的族群构成见 §2.4。
§3.9 设备规格
| 设备 | 型号 | 关键参数 |
|---|---|---|
| PSG 记录仪 | Compumedics Somte(Type 2,15 通道) | 3 EEG + 双 EOG + 下颌 EMG + 双极 ECG + 胸腹 RIP + 热电偶/鼻压力气流 + 指脉 SpO2 + 双下肢运动;各通道采样率见官方 Equipment Montage and Sampling Rate 文档 |
| 活动计 | Actiwatch Spectrum(Philips Respironics) | 三轴加速度 → 30 秒 epoch 活动计数;非惯用手腕 7 天;原生算法 Oakley θ=40 |
| 心拍检测 | Compumedics Somte 软件 v2.10 | 官方 R 点 CSV 的检测来源(PLoS ONE 2023) |
§3.10 深度溯源链
资助方 NHLBI(MESA Sleep:R01 HL098433;NSRR:R24 HL114473、75N92019R002)→ 研究执行:6 个 MESA 临床中心上门采集 → 信号质检与人工评分:Brigham and Women’s Hospital 中央阅片中心 → 数据治理与分发:MESA Coordinating Center 与 NSRR 协作,日历日期等标识符在入库前移除 → 现行版本 0.6.0(2023-05-02 CHANGELOG)。完整合同编号(N01-HC-95159 至 95169 等)见 NSRR 引用页。
§4 数据结构
§4.0 目录树
通过 nsrr download mesa 解压后的目录结构(依据 NSRR MESA 文件浏览器与 sleepecg 文档整理):
mesa/
├── datasets/
│ ├── archive/
│ │ └── 0.6.0/
│ │ ├── CHANGELOG.md
│ │ ├── mesa-sleep-dataset-0.6.0.csv # 受试者级核心变量(7.2 MB)
│ │ ├── mesa-sleep-harmonized-dataset-0.6.0.csv
│ │ ├── mesa-data-dictionary-0.6.0-variables.csv
│ │ ├── mesa-data-dictionary-0.6.0-forms.csv
│ │ └── mesa-data-dictionary-0.6.0-domains.csv
├── polysomnography/
│ ├── edfs/
│ │ ├── mesa-sleep-0001.edf # 整夜原始 PSG 信号
│ │ └── mesa-sleep-2237.edf
│ ├── annotations-events-nsrr/
│ │ ├── mesa-sleep-0001-nsrr.xml # NSRR 重导出:呼吸/血氧/觉醒/分期
│ │ └── ...
│ ├── annotations-events-profusion/
│ │ ├── mesa-sleep-0001-profusion.xml # 原系统导出(长度与 nsrr 版可能不同)
│ │ └── ...
│ └── annotations-rpoints/
│ ├── mesa-sleep-0001-rpoint.csv # 心拍 R 点(seconds 列);部分记录缺失
│ └── ...
├── actigraphy/
│ ├── mesa-sleep-0001-activity.csv # 30 秒 epoch 活动计数,共 7 天
│ └── ...
└── overlap/
└── ... # PSG-活动计重叠辅助文件(对齐必需)
§4.1 DAIMS 字段字典
核心受试者级变量与文件级对象(类型/示例值以 NSRR 变量页与文件浏览器为准):
| 字段/对象 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
mesaid |
Integer | MESA 受试者编号,主键 | 100 | 个体级划分、跨 Exam 关联 | 无 | 无缺失 | 顺序整数 |
nsrrid |
Text | NSRR 文件级 ID,关联 EDF/XML 文件名 | mesa-sleep-0001 | 信号-变量表对齐 | 无 | 无缺失 | 唯一字符串 |
ai_all5 |
Float | 觉醒指数(次/小时,Type 2 PSG) | 22.3 | 觉醒负荷回归目标 | 人工评分间 ICC 0.79-0.99 | 空值 = 未评/不可评 | 1.7-97.7 |
slpprdp5 |
Float | 总睡眠时长(分钟) | 359.8 | 睡眠时长回归/分箱 | 分期边界误差 | 空值 = 评分不可用 | 32.0-601.0 |
stdurm5 |
Float | 总记录时长(分钟) | 634.7 | 质量过滤、epoch 总数推断 | 记录起止以 SpO2 判定 | 空值 = 记录不可用 | 349.2-1,842.2 |
| EDF 通道组 | Float 时序 | EEG×3、EOG×2、EMG、ECG、RIP×2、气流×2、SpO2、下肢×2 | — | 分期/事件检测输入 | 居家伪迹、通道质量 1-7 码 | 通道级质量码 | 见官方 montage 文档 |
-nsrr.xml 事件 |
Text | 呼吸事件(窒息/低通气/中枢)、血氧下降、觉醒、30 秒分期 | OSA 起止秒 | OSA 检测、分期训练标签 | 与 profusion 版长度可能不一致 | 无事件段自然缺失 | — |
-rpoint.csv |
Float | 心拍 R 点时刻(seconds 列) |
12.34 | HRV、心率派生特征 | 起始约 15 秒内可能错位 | 文件级缺失(部分记录) | 0-记录时长 |
活动计 activity |
Integer | 30 秒 epoch 活动计数 | 45 | 睡眠/觉醒分类输入 | 非佩戴时段伪计数 | 无佩戴日志需自行推断 | 0-上限计数 |
overlap 文件 |
Text | PSG 与活动计的重叠窗口信息 | — | 跨模态对齐(日期已脱敏) | 部分受试者无重叠 | 无重叠行 | — |
§4.2 标签分布
睡眠分期标签呈典型老年夜分布:N2 占主导、N1 极少、Wake 含入睡前后与片段化觉醒。受试者级派生指标的官方统计(NSRR 变量页、ai_all5):
| 分组 | 总睡眠时长(分钟,均值±SD) | 觉醒指数(次/小时,均值±SD) |
|---|---|---|
| 总体(N=2,057 / 2,035) | 359.8±82.6 | 22.3±12.1 |
| 女性(1,103 / 1,094) | 376.5±81.6 | 19.7±10.2 |
| 男性(954 / 941) | 340.5±79.5 | 25.4±13.2 |
| White(743 / 741) | 373.4±77.1 | 22.9±12.4 |
| Black(573 / 564) | 349.5±87.8 | 20.9±11.5 |
| Hispanic(491 / 483) | 353.1±82.1 | 23.1±12.4 |
| Chinese American(250 / 247) | 356.0±82.1 | 22.6±11.3 |
| 总记录时长(stdurm5) | 634.7±95.2(349.2-1,842.2) | — |
建模启示:宏平均指标必须分stage报告;N1 类样本稀缺需过采样或 focal loss(见坑点 7);觉醒指数存在约 6 次/小时的性别差,跨性别建模时注意协变量校正。
§4.3 关键统计
- 受试者:2,237(NSRR 文件口径);女性 1,198(53.6%)、男性 1,039(46.4%)。
- 年龄:睡眠访视 54-95 岁,四个年龄带(54-62 / 62-69 / 69-77 / 77-95)各约 560 人。
- 族群:White 830 / Black 616 / Hispanic 526 / Chinese American 265。
- 变量:665 个受试者级变量 + 三个数据字典层级(variables/forms/domains)。
- 体积:385 GB / 10,364 个文件(截至 2026-09)。
§4.4 数据层级
队列(MESA,6,814 人)
└── 受试者(Sleep Exam,2,237 人;mesaid)
├── 1 次睡眠访视(Exam 5 期)
│ ├── 1 晚 PSG 记录(mesa-sleep-XXXX.edf)
│ │ ├── 生理通道(EEG/EOG/EMG/ECG/RIP/气流/SpO2/下肢)
│ │ ├── 30 秒 epoch 分期序列(XML)
│ │ └── 事件标注(呼吸事件/血氧/觉醒)
│ ├── 7 天活动计(每 30 秒 epoch 活动计数)
│ └── 睡眠问卷(665 变量之一部分)
└── 母队列协变量与随访结局(经 BioLINCC/MESA CC 申请)
§4.5 缺失值与信息性缺失
| 缺失模式 | 编码/表现 | 是否信息性 | 处理建议 |
|---|---|---|---|
| 派生变量缺失(如 ai_all5 缺 202 例) | CSV 空值 | 是——多因 PSG 质量不足 | 先查质量码再插补;勿简单均值填补 |
| 分期序列长度差异 | XML 间长度不一致 | 是——伪迹窗被删 | 以 annotations-events-nsrr 为准重切(坑点 4) |
| R 点文件缺失 | 文件不存在 | 是——该记录无可用心拍标注 | 用 ECG 自检心拍并缓存(坑点 3) |
| 活动计非佩戴 | 计数近似 0 的长平台 | 是 | 用固定阈值+时窗推断非佩戴,剔除对应 epoch |
| PSG-活动计无重叠 | overlap 文件无该受试者 | 是 | 该受试者排除出跨模态任务(坑点 1) |
§5 划分与使用建议
§5.1 官方划分
官方未提供训练/验证/测试划分。NSRR 分发的是完整队列,划分责任在使用者。
§5.2 社区惯例划分
三种主流做法:(a)MESA 作为纯外测集——在 SHHS/WSC/MrOS 上训练、MESA 整体留出测试(PFTSleep 的"独立测试"协议,κ 0.60);(b)MESA 内部随机划分——受试者级 8:1:1 或交叉验证,用于"含 MESA 训练"口径(PFTSleep 的 MESA-trained GRU 达 κ 0.76);(c)活动计基准协议——Palotti 等发布了自己的同步数据构建脚本与任务定义(Task Night / Night&Day),代码在 github.com/qcri/sleep_awake_benchmark。
§5.3 泄漏风险(重点)
- 受试者级切分:每受试者仅 1 晚 PSG,跨访视信号泄漏天然较少,但同一受试者的变量行绝不能同时进训练与测试。
- 预训练污染:使用 U-Sleep、PFTSleep、SleepFM 等公开权重时,注意 MESA 是否参与过其训练/微调——PFTSleep 明确报告了"MESA 独立测试 κ 0.60 / MESA 入分类头训练 κ 0.76"两套口径,复现对比时必须声明。
- 协变量泄漏:跨模态任务(活动计+ECG)若用 PSG 派生的统计量做特征,会间接泄漏标签。
- 族群分组泄漏:按族群分层的评估中,训练集不应包含目标族群子群的信息性变量组合(如中心-族群交叉项)。
§5.4 交叉验证与外部验证建议
内部评估建议受试者级 5 折交叉验证并按族群分层;外部验证首选 SHHS(更大、更老的白人为主的 SDB 队列)与 MrOS(老年男性),两者在 NSRR 同框架分发,harmonized 变量可直接对齐。若研究健康差异,请报告分族群指标而非仅整体均值。
受试者级分层划分的参考实现(把族群代码并到划分里,保证每折族群构成一致;族群变量名以 mesa-sleep-dataset-0.6.0.csv 中的 race 字段为准):
import numpy as np
import pandas as pd
from sklearn.model_selection import StratifiedGroupKFold
df = pd.read_csv("/data/mesa/datasets/mesa-sleep-dataset-0.6.0.csv")
df = df.dropna(subset=["slpprdp5"]) # 先按任务口径过滤
groups = df["mesaid"].to_numpy() # 受试者级:一人一组
strata = df.filter(regex="race").iloc[:, 0].fillna(0).astype(int).to_numpy()
sgkf = StratifiedGroupKFold(n_splits=5, shuffle=True, random_state=42)
for fold, (tr, te) in enumerate(sgkf.split(df, strata, groups)):
assert set(groups[tr]).isdisjoint(set(groups[te])) # 泄漏断言
# train_ids, test_ids = df.iloc[tr]["mesaid"], df.iloc[te]["mesaid"]
三条硬规则:(1) 断言训练/测试的 mesaid 集合不相交;(2) 若用了公开预训练权重,先核对 MESA 是否在其训练队列(坑点 6);(3) 测试折的"质量码过滤规则"必须与训练折一致,否则会引入选择偏倚。
§6 AI 就绪指南
§6.0 云端快速启动
385 GB 超过多数云实例的系统盘,建议挂载 500 GB 数据盘后操作。NSRR 支持 HTTP 直链下载(注册后经浏览器或 nsrr 工具),也可只拉取需要的子目录:
# 安装官方下载工具(Ruby gem)
gem install nsrr
# 用你的 NSRR 账号令牌登录(首次会提示输入凭据)
nsrr auth
# 先只下载变量表与数据字典(约 7.5 MB,足以开始表型分析)
nsrr download mesa/datasets
# 再下载睡眠分期标注(XML)先行调试 pipeline,最后补全 EDF
nsrr download mesa/polysomnography/annotations-events-nsrr
nsrr download mesa/polysomnography/edfs
§6.1 快速上手
以下代码假设你已按 §6.2 获取数据,目录结构预期为 data_root/mesa/(与 §4.0 目录树一致),data_root 由环境变量指定;最小可用子集是 datasets/ 下的一张变量 CSV——不下载任何 EDF 也能完成表型级分析。
import os
import pandas as pd
# 目录结构预期:$QF_DATA_ROOT/mesa/datasets/mesa-sleep-dataset-0.6.0.csv
# data_root 与文件名的拼接关系见 §4.0 目录树
data_root = os.environ.get("QF_DATA_ROOT", "/data")
df = pd.read_csv(
os.path.join(data_root, "mesa", "datasets", "mesa-sleep-dataset-0.6.0.csv")
)
# 主键:mesaid(一人一行);NSRR 约定空值即缺失
sub = df[["mesaid", "slpprdp5", "ai_all5"]].dropna()
print(f"可分析受试者: {len(sub)}") # 预期约 2,035-2,057
print(sub["slpprdp5"].describe()) # TST 均值应接近 359.8 分钟
§6.2 数据获取
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 在 sleepdata.org 注册账号 | 需要邮箱与机构信息 |
| 2 | 进入 MESA 数据页点击 Request Data Access | 线上签署 Data Use Agreement,即时生效 |
| 3 | 浏览/下载 | 网页文件浏览器单文件下载,或 gem install nsrr 后命令行批量 |
| 4 | 引用义务 | 至少引用 Zhang 2018(NSRR)与 Chen 2015(MESA Sleep)两文(见 §9) |
# 批量下载示例:只取 10 名受试者的 PSG 做原型验证(约 2 GB)
for i in 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010; do
nsrr download mesa/polysomnography/edfs --files "mesa-sleep-${i}.edf"
nsrr download mesa/polysomnography/annotations-events-nsrr --files "mesa-sleep-${i}-nsrr.xml"
done
§6.3 预处理全流程
从 EDF+XML 到模型输入的四步流水线。约 40 行的核心实现如下(超 30 行部分折叠):
<details>
<summary>预处理代码:读取 EDF、解析 XML 分期、对齐活动计(约 60 行)</summary>
import numpy as np
import pandas as pd
import mne
import xml.etree.ElementTree as ET
EPOCH_SEC = 30
STAGE_MAP = {"W": 0, "N1": 1, "N2": 2, "N3": 3, "REM": 4} # 以 XML 实际枚举为准
def load_stages(xml_path: str) -> np.ndarray:
"""从 NSRR XML 中解析 30 秒分期序列,返回整数标签数组。"""
root = ET.parse(xml_path).getroot()
stages = []
for ev in root.iter("ScoredEvent"):
name = ev.findtext("Name", "")
if name in STAGE_MAP:
stages.append(STAGE_MAP[name])
return np.asarray(stages, dtype=np.int64)
def load_psg(edf_path: str, picks=("EEG", "EOG", "EMG")) -> np.ndarray:
"""读取 EDF,按通道名关键词挑选信号,重采样到 100 Hz。"""
raw = mne.io.read_raw_edf(edf_path, preload=True, verbose="ERROR")
chans = [c for c in raw.ch_names if any(p in c.upper() for p in picks)]
raw = raw.pick(chans).resample(100)
return raw.get_data() # shape: (n_chans, n_samples), 单位 V
def epoch_psg(data: np.ndarray, sfreq: int = 100) -> np.ndarray:
"""连续信号切 30 秒 epoch:(n_epochs, n_chans, 30*sfreq)。"""
win = EPOCH_SEC * sfreq
n = (data.shape[1] // win) * win
return data[:, :n].reshape(data.shape[0], -1, win).transpose(1, 0, 2)
def load_activity(csv_path: str) -> np.ndarray:
"""活动计 30 秒 epoch 活动计数序列。"""
act = pd.read_csv(csv_path)
return act["activity"].to_numpy(dtype=np.float32) # 列名以实际文件为准
# 组装一条受试者的多模态样本:
# stages[i] 对应第 i 个 30 秒 epoch;epochs[i] 与 counts[i] 需经 overlap 文件对齐
# stages = load_stages("mesa/polysomnography/annotations-events-nsrr/mesa-sleep-0001-nsrr.xml")
# epochs = epoch_psg(load_psg("mesa/polysomnography/edfs/mesa-sleep-0001.edf"))
# counts = load_activity("mesa/actigraphy/mesa-sleep-0001-activity.csv")
# assert len(stages) <= len(epochs) # XML 分期短于信号很常见(伪迹窗被删)
</details>
标准化建议:每通道按受试者夜内 z-score(居家夜间幅值个体差异大),SpO2 不做 z-score(绝对值有临床意义)。增强策略见 §6.6。
第二步是质量过滤与口径声明(对应坑点 2 与坑点 5)——这是 MESA 上最容易被人忽略、也最影响结论可信度的两步:
<details>
<summary>质量过滤与呼吸事件解析代码(约 55 行)</summary>
import xml.etree.ElementTree as ET
import numpy as np
def parse_respiratory_events(xml_path: str):
"""解析 NSRR XML 中的呼吸事件:返回 (类型, 起始秒, 时长秒, 关联脱饱和) 列表。
事件类型名以实际 XML 枚举为准(Obstructive Apnea / Hypopnea /
Central Apnea 等);官方评分口径为振幅降 >=30% 且 >=3% 脱饱和。
"""
events = []
root = ET.parse(xml_path).getroot()
for ev in root.iter("ScoredEvent"):
name = ev.findtext("Name", "")
if any(k.lower() in name.lower() for k in ("apnea", "hypopnea")):
events.append({
"type": name,
"start": float(ev.findtext("Start", "0")),
"duration": float(ev.findtext("Duration", "0")),
"desat": ev.findtext("SpO2Desaturation", None), # 字段名以实际文件为准
})
return events
def compute_ahi(events, tst_minutes: float, desat_key="3pct") -> float:
"""按 >=3% 脱饱和口径重算 AHI(每小时睡眠事件数)。
若 XML 事件自带脱饱和属性,按属性过滤;否则使用全事件口径并在
论文中显式声明。tst_minutes 取官方派生变量 slpprdp5,勿用记录时长。
"""
if tst_minutes <= 0:
return np.nan
selected = [e for e in events if e["desat"] is None or desat_key in str(e["desat"])]
return len(selected) / (tst_minutes / 60.0)
def quality_report(channels_quality: dict) -> bool:
"""逐通道质量码(1-7,7 最好)过滤:全通道 >=6 才算高质量。
JMIR 2023 的高质量子集(276 例)即"全通道 >=6 小时可评"口径。
"""
return all(q >= 6 for q in channels_quality.values())
# 典型三档分析口径(与 §3.2 表对应):
# 宽口径:官方派生变量非缺失(约 2,035-2,057 例)
# 中口径:自算 AHI 可用 + 记录时长 >=240 分钟(约 2,000 例级)
# 严口径:quality_report 通过(约 276 例,参考 JMIR 2023)
</details>
产出物三件套建议随实验代码一起归档:(1) 每名受试者的纳入/排除原因表;(2) 口径声明(AHI 定义、质量阈值、TST 来源变量);(3) 剔除前后的族群/性别构成对比——审稿人最常追问的就是这三张表。
§6.4 PyTorch DataLoader 完整代码
<details>
<summary>Dataset 类 + transform + DataLoader 实例化(约 70 行)</summary>
import os
import glob
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
import xml.etree.ElementTree as ET
STAGE_MAP = {"W": 0, "N1": 1, "N2": 2, "N3": 3, "REM": 4}
EPOCH_SEC, SFREQ = 30, 100
WIN = EPOCH_SEC * SFREQ
class MesaSleepDataset(Dataset):
"""MESA 睡眠分期数据集。
目录预期(与 §4.0 一致):
root/polysomnography/edfs/mesa-sleep-XXXX.edf
root/polysomnography/annotations-events-nsrr/mesa-sleep-XXXX-nsrr.xml
每个样本 = (n_chans, 30, 100) 的单 epoch 信号 + 分期标签。
"""
def __init__(self, root: str, subject_ids=None, zscore=True):
self.root = root
self.zscore = zscore
xmls = sorted(
glob.glob(os.path.join(root, "polysomnography", "annotations-events-nsrr", "*-nsrr.xml"))
)
if subject_ids:
xmls = [p for p in xmls if any(f"-{sid}-" in os.path.basename(p) for sid in subject_ids)]
self.samples = [] # (edf_path, xml_path, epoch_index, label)
for xp in xmls:
edf = xp.replace(os.path.join("polysomnography", "annotations-events-nsrr"),
os.path.join("polysomnography", "edfs")).replace("-nsrr.xml", ".edf")
for idx, lab in enumerate(self._stages(xp)):
self.samples.append((edf, idx, lab))
@staticmethod
def _stages(xml_path):
out = []
for ev in ET.parse(xml_path).getroot().iter("ScoredEvent"):
name = ev.findtext("Name", "")
if name in STAGE_MAP:
out.append(STAGE_MAP[name])
return out
def __len__(self):
return len(self.samples)
def __getitem__(self, i):
edf, idx, lab = self.samples[i]
raw = _edf_cache_get(edf) # 见下方缓存实现;或每次 mne.io.read_raw_edf
seg = raw[:, idx * WIN:(idx + 1) * WIN][0].astype(np.float32)
if self.zscore:
mu, sd = seg.mean(axis=1, keepdims=True), seg.std(axis=1, keepdims=True) + 1e-8
seg = (seg - mu) / sd
return torch.from_numpy(seg), lab
_EDF_CACHE = {}
def _edf_cache_get(path, max_cache=4):
import mne
if path not in _EDF_CACHE:
if len(_EDF_CACHE) >= max_cache:
_EDF_CACHE.pop(next(iter(_EDF_CACHE)))
raw = mne.io.read_raw_edf(path, preload=True, verbose="ERROR")
chans = [c for c in raw.ch_names
if any(k in c.upper() for k in ("EEG", "EOG", "EMG"))]
_EDF_CACHE[path] = raw.pick(chans).resample(SFREQ)
return _EDF_CACHE[path].get_data()
# 实例化:受试者级划分(防泄漏),训练集开 shuffle
train_ds = MesaSleepDataset("/data/mesa", subject_ids={"0001", "0002", "0003"})
val_ds = MesaSleepDataset("/data/mesa", subject_ids={"0004"})
train_loader = DataLoader(train_ds, batch_size=64, shuffle=True, num_workers=4, pin_memory=True)
val_loader = DataLoader(val_ds, batch_size=128, shuffle=False, num_workers=2)
</details>
生产提示:逐 epoch 随机访问会让 EDF 反复解码,正式训练请先离线把每夜的
(epochs, channels, 3000)张量存为npz/hdf5(385 GB 数据会膨胀约 1.5 倍,预留磁盘),训练时只读缓存文件。
离线缓存 + 完整训练循环的最小骨架(与上面的 Dataset 配套):
<details>
<summary>离线缓存与训练循环(约 45 行)</summary>
import numpy as np
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from sklearn.metrics import cohen_kappa_score
def build_cache(ds, out_dir):
"""把 Dataset 一次性物化为 npz:每夜一个文件,键 = epochs/labels。"""
import os, collections
by_night = collections.defaultdict(lambda: ([], []))
for edf, idx, lab in ds.samples:
by_night[edf][0].append(idx)
by_night[edf][1].append(lab)
os.makedirs(out_dir, exist_ok=True)
for edf, (idxs, labels) in by_night.items():
nid = edf.split("/")[-1].replace(".edf", "")
raw = ds._stages(edf) # 标签已在 samples 中;此处读取信号
sig = np.stack([_edf_cache_get(edf)[:, i * 3000:(i + 1) * 3000]
for i in idxs]).astype(np.float32)
np.savez_compressed(f"{out_dir}/{nid}.npz", x=sig, y=np.array(labels))
class CachedDataset(torch.utils.data.Dataset):
def __init__(self, cache_files):
self.files = cache_files
self.index = [(f, i) for f in self.files
for i in range(np.load(f, mmap_mode="r")["y"].shape[0])]
def __len__(self):
return len(self.index)
def __getitem__(self, i):
f, j = self.index[i]
d = np.load(f, mmap_mode="r")
return torch.from_numpy(d["x"][j]), int(d["y"][j])
def run_epoch(model, loader, opt, criterion, device, train=True):
model.train(train)
ys, ps = [], []
for x, y in loader:
x, y = x.to(device), y.to(device)
with torch.set_grad_enabled(train):
logits = model(x)
loss = criterion(logits, y)
if train:
opt.zero_grad(); loss.backward(); opt.step()
ps += logits.argmax(1).tolist(); ys += y.tolist()
return loss.item(), cohen_kappa_score(ys, ps)
</details>
loss 权重建议按训练折的类频率倒数初始化(N1 类权重通常最大);κ 的逐 epoch 打印有助于提前发现"全预测 N2"的退化模式。
§6.5 坑点 8 个
⚠️ 坑点 1:日期脱敏后 PSG 与活动计无法按时间对齐(分类:工程陷阱)
问题:NSRR 把日历日期视为标识符全部移除,PSG EDF 与活动计 CSV 都没有"是哪一天"的信息,跨模态任务直接按索引拼接会把不同日期的数据错配。
症状:活动计输入与 PSG 分期的重叠时长为零或为负;模型在活动计特征上的贡献接近随机。
解决:
- 简单方法:只用
overlap/目录下的 PSG-活动计重叠辅助文件确定共同窗口,截取重叠段。- 进阶方法:以 HRV 派生变量的
seconds列为时间锚,把活动计计数序列与 PSG 信号按秒对齐(NSRR 官方在 actigraphy-introduction 页明确建议此法,且提醒部分受试者本来就没有重叠夜)。- SOTA 方法:像 Sridhar/PLoS ONE 2023 一类工作那样,用活动计数与心率序列的互相关峰值做粗对齐,再以重叠 ≥6.6 小时作为纳入门槛。
参考:NSRR 论坛官方回复(日期脱敏与对齐);PLoS ONE 2023
⚠️ 坑点 2:把 2,237 当有效样本量(分类:偏倚陷阱)
问题:NSRR 收录 2,237 名受试者,但完成 PSG 2,166 例、评分完整约 2,057 例、主流 AI 论文可分析口径 2,056 例;高质量全通道子集只有 276 例。不同论文口径差 10 倍,直接照抄别人报告的 N 会在同行评审时被要求修回。
症状:数据加载时因缺文件/缺标注崩溃;自己报告的基线比发表值系统性偏差。
解决:
- 简单方法:以
slpprdp5非缺失(约 2,057)为起点,再按你的任务做质量过滤,并在论文中写明口径。- 进阶方法:使用官方逐通道质量码(1-7)过滤,例如"全通道质量 ≥6 且可评时长 ≥6 小时"(对应 JMIR 论文的高质量子集 276 例)。
- SOTA 方法:同时报告"宽口径全队列"与"严口径高质量子集"两套结果,并检验子集选择的族群构成漂移(高质量子集中非裔占比更高,见 JMIR 论文)。
参考:Nature Communications 2025(可分析 n=2,056);JMIR 2023
⚠️ 坑点 3:R 点文件缺失或起始段错位(分类:工程陷阱)
问题:官方
-rpoint.csv并非所有记录都有(sleepecg 文档明确标注 “not available for all records”);且中央阅片技师核查发现录音最初约 15 秒内 R 点与 ECG 常不一致。
症状:HRV/心率任务的 epoch 数对不上;第一个心拍时刻与 ECG 目测不符。
解决:
- 简单方法:加载时检测文件是否存在,缺失者直接跳过并记录清单。
- 进阶方法:丢弃每夜前 15 秒的 R 点,用其后的序列计算心率/HRV。
- SOTA 方法:用 sleepecg 的
detect_heartbeats()在 ECG 上自行检测心拍并缓存为npy(官方库内置了 MESA 的缓存目录约定),彻底绕开标注文件的完整性问题。
参考:NSRR 论坛 HRV 帖;sleepecg API 文档
⚠️ 坑点 4:ProFusion XML 与 NSRR XML 的分期序列对不上(分类:标签理解)
问题:数据集同时存在原始 ProFusion 导出与 NSRR 重导出两套标注。二者起点不同、长度不同,HRV 派生数据的分期与 ProFusion 分期甚至存在整体相位偏移(论坛用户对 mesaid=2 的实测:长度 1319 对 1060,且中段序列错位)。
症状:分期标签与信号错位后模型准确率封顶在低位;两套 XML 训练出的模型互相复现失败。
解决:
- 简单方法:全流程只用一套标注——推荐
annotations-events-nsrr(NSRR 官方重导出、文档化最全)。- 进阶方法:如必须用 ProFusion 事件,按事件时间戳(相对记录起点的秒数)对齐到信号,而不是按 epoch 索引对齐。
- SOTA 方法:以 SpO2/OXSTAT 确定的记录起止为统一时钟轴(见坑点 8 关联说明),把所有来源的事件重投影到该时间轴后再切 epoch。
参考:NSRR 论坛用户实测帖;JMIR 2023(SpO2 定起止)
⚠️ 坑点 5:AHI 口径(≥3% 脱饱和)与临床常用口径混淆(分类:评估误用)
问题:MESA 呼吸事件按"振幅下降 ≥30% 持续 ≥10 秒 + ≥3% 脱饱和"评分(SHHS 适配指南),而临床报告与 AASM 推荐表格常用 1% 或 4% 口径。跨数据集直接比 AHI 数值会引入系统性偏移。
症状:你的模型在 MESA 上 MAE 与临床文献不可比;把 MESA AHI 阈值 15 直接套到 1% 口径数据上分级错位。
解决:
- 简单方法:在论文方法节显式声明"AHI ≥3% 脱饱和口径",引用中央阅片评分定义。
- 进阶方法:事件 XML 内含每个事件关联的脱饱和属性,可重算 4%/1% 口径的事件数再除以 TST。
- SOTA 方法:与 SHHS/MrOS 做跨队列验证时,统一重算同一口径(NSRR 的 harmonized 数据集已对部分核心指标做跨队列对齐,优先使用)。
参考:Thorax 论文评分定义;NSRR 论坛 AHI 变量说明
⚠️ 坑点 6:把"在 MESA 上测过"当成"跨队列泛化"——测试集污染(分类:数据泄漏)
问题:U-Sleep、PFTSleep、SleepFM 等主流模型的预训练语料覆盖了 MESA(或其部分)。如果你的方法在这些权重上微调后再"在 MESA 上外测",实际是 in-domain 评估,泛化结论不成立。PFTSleep 的消融非常直观:MESA 完全独立测试 κ 0.60,MESA 仅入分类头训练即升至 0.76。
症状:基于公开权重的 MESA"外测"成绩远高于社区独立测试口径,泛化声明在同行评审时被质疑。
解决:
- 简单方法:读模型论文的队列使用表,确认 MESA 是否参与训练。
- 进阶方法:划分时以受试者为单位剔除预训练见过的记录不可行(权重不可逆),改为自建训练集并只引用其独立测试数字做上下文对照。
- SOTA 方法:采用 SLEEPYLAND(npj Digit Med 2025)式的公平评测框架,统一重跑各模型并标注 in-domain/out-of-domain 状态。
参考:Sleep 2025 PFTSleep;SLEEPYLAND, npj Digit Med 2025
⚠️ 坑点 7:N1 稀缺 + 老年 N3 偏少导致分类指标虚高(分类:评估误用)
问题:MESA 夜间分期分布极度不平衡(N1 占比个位数、N2 占主导),受试者平均 69 岁、N3 天然偏少。按整体 accuracy 评估时,"永远预测 N2"即可拿到漂亮分数;N3%>40% 的极端值(9 例)还可能是老年 EEG 慢化的伪象。
症状:accuracy 0.85+ 但混淆矩阵里 N1 几乎全错;离群 N3 受试者主导回归损失。
解决:
- 简单方法:以 macro-F1 与 Cohen’s kappa 为主指标,按 stage 分别报告。
- 进阶方法:训练用类别加权或 focal loss,N3 回归任务按分位数截断(社区有剔除 N3%>40% 的先例,JCEM 论文以 3.3 个标准差为界剔除 9 例)。
- SOTA 方法:epoch 级 AUROC/AUPRC 分 stage 报告(PFTSleep 的 MESA 口径:Wake AUROC 0.94、N1 仅 0.77),并用按记录中位数的聚合方式做跨论文比较。
参考:PMC10686689(N3 离群处理);Sleep 2025 PFTSleep 外测表
⚠️ 坑点 8:385 GB 批量下载超时与断点恢复(分类:工程陷阱)
问题:全量下载偶发 TCP 连接中断(NSRR 论坛有官方确认的下载超时报告);浏览器逐文件下载 10,364 个文件不现实。
症状:nsrr download中途报网络错误;解压后发现文件数量与官方清单对不上。
解决:
- 简单方法:分目录多次执行
nsrr download mesa/...(工具会跳过已存在文件,天然断点续传)。- 进阶方法:写校验循环,对比 NSRR 文件浏览器的目录清单与本地文件数,缺哪个补哪个。
- SOTA 方法:只下载任务必需子集(如分期任务仅 EDF+nsrr XML,约 385 GB 的大头;HRV 任务仅 rpoints),把全量镜像留给机构存储。
参考:NSRR 论坛下载问题官方回复;nsrr gem 文档
§6.6 数据增强(安全 ✅ / 危险 ❌)
| 类别 | 操作 | 说明 |
|---|---|---|
| ✅ 安全 | 夜内 z-score / 每通道 Robust 缩放 | 抵消居家采集的幅值个体差异 |
| ✅ 安全 | 时间平移(±1 epoch 内) | 模拟分期边界主观性,标签不变 |
| ✅ 安全 | 高斯噪声(σ ≤ 0.1×信号 SD)、随机通道 dropout | 模拟居家伪迹;注意 EEG/EOG/ECG 分组独立 |
| ✅ 安全 | 随机裁剪更长上下文窗口(如 30-60 epoch 序列输入) | 与序列模型(U-Sleep 类)一致 |
| ❌ 危险 | SpO2 幅值缩放/平移 | 脱饱和深度是 OSA 标签的直接依据,缩放等于改标签 |
| ❌ 危险 | 跨受试者混合通道(channel mixup) | 破坏个体生理一致性,且族群差异会被洗掉 |
| ❌ 危险 | 时间轴重采样改变时长 | 会破坏与活动计/事件的 epoch 级对齐 |
| ❌ 危险 | 对 N3 段做幅值放大"增强" | 变相伪造慢波数量,改变诊断相关形态 |
§6.7 模型推荐表
| 任务 | 推荐起点 | 输入 | 理由 |
|---|---|---|---|
| 5 期睡眠分期 | U-Sleep / XSleepNet2 | EEG+EOG(任意组合) | MESA MF1 0.79 已发表;全卷积对 3 导 EEG 精简 montage 友好 |
| 全夜上下文分期/基础模型 | PFTSleep(公开权重) | 7 通道整夜 PSG | Sleep 2025 发表,MESA 独立测试 κ 0.60、入训练 κ 0.76 |
| 多模态表征学习 | SleepFM | EEG+ECG+呼吸 | Nature Medicine 2026,MESA MF1 0.78,支持疾病结局迁移 |
| OSA 筛查/AHI 回归 | 1D-CNN + 事件检测头 | 流量+RIP+SpO2 | XML 有逐事件脱饱和属性,监督信号丰富 |
| 活动计睡眠/觉醒 | CNN/LSTM(Palotti 基线) | 30 秒活动计数(+心率) | 有完整开源基准可复现 |
| 无 EEG 可穿戴分期 | 心率+活动计双流网络 | ECG 派生 HR + counts | MESA 是该任务最大公开基准(acc 约 0.80 口径见 §8.2) |
§6.8 硬件需求表
| 任务 | 最低配置 | 推荐配置 | 备注 |
|---|---|---|---|
| 表型分析/统计 | 8 GB 内存笔记本 | 16 GB | 仅需 7.5 MB CSV |
| 分期模型训练(30 秒 epoch 输入) | 单卡 11 GB(RTX 2080 Ti 级) | 单卡 24-40 GB | batch 64 × (3-7 通道 × 3000 点) |
| 整夜上下文/基础模型微调 | 单卡 40 GB(A100) | 多卡 A100 ×4 | PFTSleep 类整夜 8 h 输入 |
| 存储 | 500 GB 数据盘 | 1 TB NVMe + 冷备 | 全量 385 GB + 预处理缓存 |
§6.9 评估指标代码
import numpy as np
from sklearn.metrics import (
cohen_kappa_score, f1_score, balanced_accuracy_score,
confusion_matrix, roc_auc_score,
)
STAGES = ["Wake", "N1", "N2", "N3", "REM"]
def eval_staging(y_true, y_pred, y_prob=None):
"""睡眠分期标准指标组:kappa / macro-F1 / 逐期 F1 / 混淆矩阵 / 分期 AUROC。"""
k = cohen_kappa_score(y_true, y_pred)
mf1 = f1_score(y_true, y_pred, average="macro")
per_stage = dict(zip(STAGES, f1_score(y_true, y_pred, average=None, labels=range(5))))
cm = confusion_matrix(y_true, y_pred, labels=range(5))
out = {"kappa": k, "macro_f1": mf1, "per_stage_f1": per_stage}
if y_prob is not None: # y_prob: (n, 5) softmax 概率
out["auroc_per_stage"] = {
STAGES[i]: roc_auc_score((y_true == i).astype(int), y_prob[:, i])
for i in range(5)
}
out["balanced_accuracy"] = balanced_accuracy_score(y_true, y_pred)
return out
def eval_ahi(y_true, y_pred, severity_bins=(0, 5, 15, 30)):
"""AHI 回归 + 四级严重度分级的联合评估。"""
from sklearn.metrics import mean_absolute_error
sev_t = np.digitize(y_true, severity_bins) - 1
sev_p = np.digitize(y_pred, severity_bins) - 1
return {
"ahi_mae": mean_absolute_error(y_true, y_pred),
"severity_kappa": cohen_kappa_score(sev_t, sev_p, weights="quadratic"),
}
§6.10 MLOps 笔记
- 版本锚定:数据用 v0.6.0 并在实验配置中记录 CHANGELOG 哈希;NSRR 未来更新版本时受试者集与变量定义可能变化。
- 口径即配置:把"可分析 N、质量码阈值、AHI 口径"写进配置文件,训练/评估共用,避免 §6.5 坑点 2/5 的口径漂移。
- 数据预留:预处理缓存约为原数据 1.5 倍,CI 环境用 10 名受试者的烟雾测试子集(约 2 GB)。
- 隐私合规:DUA 禁止公网再分发;日志与 wandb 等面板不得上传受试者级原始数据;导出指标须聚合成组级统计。
- 评估服务化:kappa/macro-F1/AUROC 的计算封装成独立评估容器,保证内部复训与外部验证用同一套打分代码。
- 获取审计:记录每名受试者用到了哪些文件(EDF/XML/rpoints/活动计),坑点 3 类的文件级缺失应出现在数据卡片而非只活在日志里。
- 可复现种子策略:MESA 单夜数据量小(单夜约 2,000-3,000 epochs/人),划分随机性对结果影响可达数个千分点——报告均值±标准差而非单次运行。
- 长期维护:NSRR 论坛是唯一官方答疑渠道,把官方回复(如对齐方法、排除标准)截图/存档进内部知识库,防止帖子迁移后丢失。
§7 质量评估与局限性
§7.1 已知偏倚表
| 偏倚类型 | 描述 | 严重程度 | 缓解 |
|---|---|---|---|
| 年龄偏倚 | 睡眠访视时 54-95 岁老年队列,N3 少、觉醒多,不能外推到青年/儿童 | 高 | 明示适用人群;跨年龄结论需联合 CFS/儿童队列 |
| 幸存者偏倚 | 只有存活至 Exam 5 的母队列成员才可能入选 | 中 | 结局建模时注意死亡竞争风险 |
| 治疗排除偏倚 | 规律 PAP/口腔矫治器/氧疗者被排除,重度 OSA 治疗人群缺位 | 中 | 用于筛查任务尚可,勿推断治疗人群 |
| 质量选择偏倚 | 高质量 PSG 子集的族群构成与全队列不同(非裔占比更高) | 中 | 报告子集筛选前后的族群构成 |
| 信号质量偏倚 | 居家无人值守,通道质量 1-7 分层明显 | 高 | 质量码过滤 + 低质量子集单独评估(JMIR 论文做法) |
| 单夜偏倚 | 每人仅 1 晚 PSG,无法建模夜间变异 | 中 | 结论限定为"单夜表型" |
| 族群子群规模 | 华裔 n=265,子群分析功效有限 | 中 | 子群结论加置信区间;避免过拟合子群 |
| 中心效应 | 6 个临床中心的采集操作差异未在派生变量中显式标注 | 低 | 敏感性分析时以中心为随机效应 |
| 时代漂移 | 2010-2013 年的活动计与消费级今日设备存在代差 | 中 | 跨设备部署前做通道级校准(§7.3) |
§7.2 标注质量
人工评分集中于 BWH 中央阅片中心,信度体系完整:分期 ICC 0.79-0.99,分 stage 的 ICC 为 Wake 0.96 / N1 0.86 / N2 0.63 / N3 0.81 / REM 0.96(JMIR 论文)。N2 的 0.63 提示 N2/N3 边界与纺锤波判读存在主观空间——监督模型在 N2 上的错误更多反映评分者间差异而非纯信号问题。呼吸事件评分有 SHHS 适配指南约束且与血氧/EEG 软件联动,AHI 类标签的一致性风险低于纯分期。
§7.3 泛化性表
| 部署场景 | 失效风险 | 证据 |
|---|---|---|
| 实验室级高密度 PSG 训练 → MESA 居家 3 导 EEG 测试 | 显著退化:κ 从 0.81(SHHS 内部)降至 0.60(MESA 独立测试) | PFTSleep, Sleep 2025 |
| MESA → 更年轻人群 | 高风险:队列最小 54 岁 | 队列年龄窗(NSRR) |
| MESA 活动 → 消费级手环 PPG | 心率派生方法可迁移(ECG→PPG 仍有域差) | PLoS ONE 2023 |
| MESA 训练 → 其他 NSRR 队列 | 中低风险:harmonized 变量已对齐,U-Sleep 多队列含 MESA | SLEEPYLAND 2025 |
| 低质量通道输入 | 模型在低质量子集仍可运行但精度下降(607 人 642,962 epochs 的泛化评估证实可用) | JMIR 2023 |
§7.4 伦理与合规
各临床中心 IRB 批准、参与者书面知情同意(PLoS ONE 2023 伦理声明)。NSRR 分发数据经去标识化(日历日期移除),获取需线上签署 DUA;禁止向第三方再分发、禁止再识别。商业用途与非商业用途的边界以 DUA 条款为准(DUO 速查:HMB/NPUNCU/IRB 类约束)。
§7.5 公平性
四族群设计是 MESA Sleep 的核心公益价值,但公平性分析须注意:各族群 PSG 质量分布不均(高质量子集族群构成漂移);华裔子群 n=265 使分层估计的置信区间宽;问卷类变量(失眠症状)的跨语言(英语/西语/汉语)测量等值性未见专门验证。发表差异结论时建议同时报告组内分布与组间差异的不确定性。
§7.6 数据漂移
时间漂移有限(采集集中于 2010-2013,单窗口);设备漂移不存在(单一 PSG 型号 + 单一活动计型号,跨站点一致性优于多机型数据集)。真正的漂移来自"部署目标漂移":现代消费设备的信号特性(PPG、IMU 采样率)与 2010 年代的研究级设备不同,跨设备部署前应做通道级校准实验(参考 §7.3 场景行)。
§7.7 DAIMS 24 项评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | mesa-sleep-dataset-0.6.0.csv 一行一受试者,665 变量 |
| 2 | 唯一标识 | ✅ | mesaid 受试者主键 + nsrrid 文件级 ID |
| 3 | 特殊字符 | ✅ | CSV/EDF 均为标准 ASCII 通道命名与编码 |
| 4 | 重复行 | ✅ | 一人一行 + 文件按 nsrrid 唯一 |
| 5 | 缺失编码 | ✅ | NSRR 约定空值即缺失,字典三层标注 |
| 6 | 标签标识 | ✅ | 分期/事件标签在 XML 结构化存储,派生指标在 CSV |
| 7 | 罕见类分组 | ⚠️ | N1 稀缺、华裔 n=265 子群功效有限 |
| 8 | 偏倚评估 | ✅ | 大量发表文献覆盖年龄/族群/质量偏倚 |
| 9 | 数据字典 | ✅ | variables/forms/domains 三层 CSV 字典 |
| 10 | 信息性缺失解释 | ⚠️ | 质量码存在但"为何缺 rpoints/重叠"需读文档与论坛拼图 |
| 11 | 设备记录 | ✅ | 型号、导联配置、Oakley θ=40 均文档化 |
| 12 | 共线性 | ⚠️ | AHI/ODI/觉醒指数及母队列 CVD 协变量间高度相关 |
| 13 | 编码映射 | ✅ | 分期/族群/性别编码有官方变量定义 |
| 14 | 时间戳处理 | ⚠️ | 日历日期被移除(合规必需),跨模态对齐须借助 overlap 文件 |
| 15 | 划分建议 | ⚠️ | 无官方划分,社区多协议并存(§5.2) |
| 16 | 泄漏讨论 | ⚠️ | 需自行核查公开权重的预训练队列污染 |
| 17 | 标签分布 | ✅ | NSRR 变量页提供分群体统计表 |
| 18 | 测量偏倚 | ⚠️ | 居家单夜、质量分层、各族群质量不均 |
| 19 | 外部验证建议 | ✅ | SHHS/MrOS/CFS 同框架可及,跨队列协议成熟 |
| 20 | 版本记录 | ✅ | CHANGELOG.md + 归档目录(0.6.0,2023-05-02) |
| 21 | 预处理脚本 | ⚠️ | 官方提供 nsrr 工具与 HRV 方法页,无官方端到端预处理管线;社区脚本(sleepecg、qcri 基准)可补位 |
| 22 | 合规要求 | ✅ | DUA 明确,注册即签,条款清晰 |
| 23 | 多模态对齐 | ⚠️ | PSG-活动计-ECG 可对齐但依赖补充文件且部分受试者无重叠 |
| 24 | 去标识化 | ✅ | 日期等标识符移除,DUA 管控 |
DAIMS 评分:18.5 / 24(✅ 14 项、⚠️ 9 项、❌ 0 项)
评分解读:这是一份"数据治理教科书级、工程细节要自己拼图"的数据集。所有硬性治理项(标识、字典、版本、合规、去标识化)全部满分;扣分集中在三类真实的居家队列特性——信号质量分层、跨模态对齐需辅助文件、无官方划分与预训练污染风险。没有任何一项属于"数据本身不可信",全部可以通过文档阅读与工程流程化解。
对你意味着什么:
- 可以直接开工:宽格式表 + 字典 + 空值约定使表型分析当天可跑(§6.1 三行代码)。
- 开工前先定口径:把可分析 N(§3.2 表)、质量码阈值、AHI 口径写进实验配置并随论文发布。
- 跨模态任务预留排障时间:日期脱敏对齐(坑点 1)与 rpoints 缺失(坑点 3)是两个必然踩到的工程点,先写对齐与缺失检测的单元测试。
- 引用公开权重前先查食谱:确认 U-Sleep/PFTSleep/SleepFM 是否见过 MESA,再决定你的评估是 in-domain 还是 out-of-domain(坑点 6)。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| SHHS/WSC/MrOS 训练 → MESA 独立测试 | Icahn School of Medicine at Mount Sinai | 5 期分期 | MESA κ 0.60 / Acc 72.7%(内部 κ 0.81) | κ 降 0.21 | 居家 3 导 EEG 与精简 montage 是主要退化源 |
| 同上,MESA 入分类头训练 | 同上 | 5 期分期 | MESA κ 0.76 / Acc 83.2% | κ 降 0.05 | 分类头本地化即可恢复大部分性能 |
| U-Sleep 跨 16 队列(含 MESA) | 哥本哈根大学 | 高频分期 | MESA MF1 0.79 | 多队列联合训练口径 | 高频输出 + 多 montage 泛化设计有效 |
| SleepFM 多模态基础模型 | 斯坦福等 | 5 期分期 | MESA MF1 0.78 | 与 SHHS/MrOS 同量级 | EEG+ECG+呼吸联合预训练跨队列稳定 |
| SOMNUS 公平评测框架 | npj Digit Med 2025 | 5 期分期 | MESA Acc 0.89(in-domain);YASA 基线 0.84 | 记录级中位数口径 | 统一聚合方式后各模型差距缩小 |
| 活动计+ECG 心率 → MESA 内部分期 | PLoS ONE 2023 | 4-5 期分期 | 808 例质量过滤子集 | 相对 PSG 输入大幅降低 | 无 EEG 可穿戴分期可行但上限明确 |
上表数值均出自同行评审论文或其官方表格;口径互不相同,不可直接横向比较(详见 §8.1 说明)。
§8 基准性能与生态
§8.1 排行榜(MESA 相关代表性结果)
| 排名 | 模型 | 性能(MESA) | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | SOMNUS | Acc 0.89(in-domain,记录级中位) | 2025 | 统一公平评测框架下的分期模型 | npj Digital Medicine, 2025, 10.1038/s41746-025-02237-2 | 论文附源码声明 |
| 2 | PFTSleep(MESA-trained GRU) | Acc 83.20 / κ 0.76 / MF1 74.23 | 2025 | 整夜 8 h patch transformer 自监督 + GRU 头 | Fox B, Jiang J, Wickramaratne S, Kovatch P, Suarez-Farinas M, Shah NA, Parekh A, Nadkarni GN., 2025, Sleep 48(8):zsaf061. DOI 10.1093/sleep/zsaf061 | medRxiv/官方 |
| 3 | U-Sleep | MF1 0.79 | 2021 | 全卷积 + 16 队列联合训练 + 高频输出 | Perslev M, Darkner S, Kempfner L, Nikolic M, Jennum PJ, Igel C., 2021, npj Digital Medicine 4:72. DOI 10.1038/s41746-021-00440-5 | sleep.ai.ku.dk |
| 4 | SleepFM | MF1 0.78 | 2026 | EEG+ECG+呼吸多模态对比预训练 | Thapa R, Kjaer MR, He B, et al., 2026, Nature Medicine 32:752-762. DOI 10.1038/s41591-025-04133-4 | GitHub |
| 5 | YASA(经典基线) | Acc 0.84 | 2025 口径 | 规则+算法混合分期库 | SLEEPYLAND 论文同表复现 | GitHub |
⚠️ 数值不可直接比较:各行输入通道(3 导 EEG / 7 通道 / 多模态)、训练队列(是否含 MESA)、聚合方式(记录级中位数 / epoch 级)与任务定义不同;SOMNUS 与 YASA 为 in-domain 口径,PFTSleep 同时报告了 MESA 独立测试 κ 0.60 的 out-of-domain 口径。跨论文引用时必须注明协议。
§8.2 SOTA 总结与选型建议
睡眠分期在 MESA 上已接近工程天花板:in-domain Acc 0.84-0.89、MF1 0.78-0.79;真正的科研增量在两处——跨域稳健性(out-of-domain κ 0.60 提示居家精简 montage 仍是痛点)与低信号成本(仅心率+活动计的四期分类可达 acc 约 0.80 / κ 0.69、简洁模型约 0.66 / κ 0.59 的结果分别有发表,转引口径见 J Sleep Res 2026 综述性讨论)。
选型建议按目标分三档:要临床级分期——直接用 U-Sleep/PFTSleep/SleepFM 公开权重起步,把 MESA 作为本地校准集重训分类头(PFTSleep 消融显示仅此一步即可把 κ 从 0.60 提到 0.76);做方法学创新——把 MESA 留作纯外测,主战场放在 SHHS/MrOS 训练,保证泛化声明的干净;做产品原型——先复现 Palotti 活动计基准建立基线意识,再上多模态(活动计+心率),因为该任务的公开数据规模只有 MESA 一个量级。OSA 方向没有统一的 MESA 专属榜单,建议以 XML 事件为监督自训并对照 Nature Communications 2025 的 MESA n=2,056 口径。
§8.3 评测协议
- 分期:30 秒 epoch、受试者级划分、宏平均 F1 + Cohen’s κ + 分期 AUROC/AUPRC;跨队列论文应同时给 in-domain 与 out-of-domain 两套口径。
- AHI/OSA:以 ≥3% 脱饱和口径回归 AHI,四级严重度(如 <5 / 5-15 / 15-30 / ≥30)用二次加权 κ;Nature Communications 2025 的 MESA n=2,056 口径可作对照。
- 活动计:遵循 Palotti 协议(Task Night / Night&Day 两任务,与 Oakley θ=40、人工注释、Always-Sleep/Wake 四基线对比)。
- 公平性:按四族群分层报告;不要用整体均值掩盖子群差异。
§8.4 相关数据集表
| 数据集 | 机构/托管 | 模态 | 与 MESA Sleep 的关系 |
|---|---|---|---|
| SHHS(千方已收录) | NSRR | 家庭 PSG ×2 访视 | 最大 SDB 队列,常与 MESA 互为外测 |
| MrOS Sleep(千方已收录) | NSRR | 家庭 PSG + 活动计 | 老年男性对照队列,PFTSleep 外测伴集 |
| Cleveland Family Study(CFS) | NSRR | 实验室 PSG | 家系队列,含非裔样本 |
| HCHS/SOL(Sueño) | NSRR | 活动计 16,415 人 | 西裔/拉丁裔睡眠专项,32.7 GB |
| MESA 母队列其他 Exam 数据 | BioLINCC | CT/心电/问卷/随访 | 睡眠-心血管结局建模的结局侧数据源 |
§8.5 关键论文 Top 6
- Chen X, Wang R, Zee P, Lutsey PL, Javaheri S, Alcántara C, Jackson CL, Williams MA, Redline S. Racial/Ethnic Differences in Sleep Disturbances: The Multi-Ethnic Study of Atherosclerosis (MESA). Sleep. 2015;38(6):877-888. DOI 10.5665/sleep.4732 —— MESA Sleep 子研究的奠基方法学论文,定义队列、协议与族群差异发现。
- Zhang GQ, Cui L, Mueller R, Tao S, Kim M, Rueschman M, Mariani S, Mobley D, Redline S. The National Sleep Research Resource: towards a sleep data commons. J Am Med Inform Assoc. 2018;25(10):1351-1358. DOI 10.1093/jamia/ocy064 —— NSRR 平台论文,定义 MESA 等数据集的统一分发与 harmonized 变量框架。
- Palotti J, Mall R, Aupetit M, Rueschman M, Singh M, Sathyanarayana A, Taheri S, Fernandez-Luque L. Benchmark on a large cohort for sleep-wake classification with machine learning techniques. npj Digital Medicine. 2019;2:50. DOI 10.1038/s41746-019-0126-9 —— 把 MESA 打造成最大活动计睡眠/觉醒基准并开源全套代码。
- Perslev M, Darkner S, Kempfner L, Nikolic M, Jennum PJ, Igel C. U-Sleep: resilient high-frequency sleep staging. npj Digital Medicine. 2021;4:72. DOI 10.1038/s41746-021-00440-5 —— 跨 16 队列分期基线,MESA MF1 0.79。
- Fox B, Jiang J, Wickramaratne S, Kovatch P, Suarez-Farinas M, Shah NA, Parekh A, Nadkarni GN. A foundational transformer leveraging full night, multichannel sleep study data accurately classifies sleep stages. Sleep. 2025;48(8):zsaf061. DOI 10.1093/sleep/zsaf061 —— 整夜 transformer 基础模型,系统量化了"MESA in/out of training"的性能差异。
- Thapa R, Kjaer MR, He B, et al. SleepFM: 多模态睡眠基础模型的临床验证. Nature Medicine. 2026;32:752-762. DOI 10.1038/s41591-025-04133-4 —— EEG+ECG+呼吸联合预训练,MESA 在其多队列验证之列。
§8.6 社区活跃度
NSRR 官方论坛有 MESA 专区的活跃问答(数据对齐、HRV 排除标准、下载问题均有官方账号 mrueschman 直接回复);GitHub 上 qcri/sleep_awake_benchmark(活动计基准)、sleepecg(MESA 下载与心拍工具链)、sleepfm-clinical(基础模型)等仓库构成可复现生态。截至 2026-09,MESA 仍是 NSRR 各队列中 AI 论文引用密度最高的数据集之一。
§8.7 生态快照表
| 资源 | 类型 | 链接 | 开源状态(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| nsrr gem | 官方下载工具 | github.com/nsrr/nsrr-gem | 已发布 | 断点续传、按子目录下载的唯一官方途径 |
| sleep_awake_benchmark | 基准代码 | github.com/qcri/sleep_awake_benchmark | 已发布 | 活动计任务定义+四基线+CNN/LSTM 全套 |
| sleepecg | Python 库 | sleepecg 文档 | 已发布 | 一行代码拉取 MESA、心拍检测与缓存 |
| SleepFM 代码库 | 模型代码 | github.com/zou-group/sleepfm-clinical | 已发布 | 多模态基础模型参照实现 |
| U-Sleep | 模型服务 | sleep.ai.ku.dk | 已发布 | 在线分期 + 预训练权重 |
| NSRR 论坛 MESA 板块 | 社区问答 | sleepdata.org 论坛 | 活跃 | 坑点一手信息源,官方团队直接回复 |
§9 相关资源与引用
§9.1 官方资源
| 资源 | 链接 | 说明 |
|---|---|---|
| 数据集主页 | sleepdata.org/datasets/mesa | 概览、变量浏览、申请入口 |
| 变量字典 | 变量页示例(ai_all5) | 每个变量带分组统计表 |
| PSG 操作手册 | 数据页 Protocols 区(Polysomnography Manual of Procedures / Scoring Manual) | 采集与评分细节 |
| 活动计手册 | Actigraphy Manual of Procedures / Scoring Manual | 佩戴与评分规则 |
| 设备与采样率 | Equipment Montage and Sampling Rate Information | 各通道技术参数权威来源 |
| HRV 方法页 | HRV Analysis | R 点/NN 间期排除标准 |
| MESA 母队列 | mesa-nhlbi.org 与 BioLINCC MESA Collection | 其他 Exam 数据与随访结局 |
| DOI 引用页 | 10.25822/n7hq-c406 | 引用文本与资助声明的官方出处 |
§9.2 BibTeX 引用块
@article{Chen2015mesasleep,
title = {Racial/Ethnic Differences in Sleep Disturbances: The Multi-Ethnic Study of Atherosclerosis (MESA)},
author = {Chen, Xiaoli and Wang, Rui and Zee, Phyllis and Lutsey, Pamela L. and Javaheri, Sogol and Alc{\'a}ntara, Carmela and Jackson, Chandra L. and Williams, Michelle A. and Redline, Susan},
journal = {Sleep},
volume = {38},
number = {6},
pages = {877--888},
year = {2015},
doi = {10.5665/sleep.4732}
}
@article{Zhang2018nsrr,
title = {The National Sleep Research Resource: towards a sleep data commons},
author = {Zhang, Guo-Qiang and Cui, Licong and M{\"u}ller, Remo and Tao, Shao and Kim, Matthew and Rueschman, Michael and Mariani, Sara and Mobley, Daniel and Redline, Susan},
journal = {Journal of the American Medical Informatics Association},
volume = {25},
number = {10},
pages = {1351--1358},
year = {2018},
doi = {10.1093/jamia/ocy064}
}
@article{Palotti2019benchmark,
title = {Benchmark on a large cohort for sleep-wake classification with machine learning techniques},
author = {Palotti, Joao and Mall, Raghvendra and Aupetit, Michael and Rueschman, Michael and Singh, Meghna and Sathyanarayana, Aarti and Taheri, Shahrad and Fernandez-Luque, Luis},
journal = {npj Digital Medicine},
volume = {2},
pages = {50},
year = {2019},
doi = {10.1038/s41746-019-0126-9}
}
@article{Perslev2021usleep,
title = {U-Sleep: resilient high-frequency sleep staging},
author = {Perslev, Mathias and Darkner, Sune and Kempfner, Lykke and Nikolic, Miki and Jennum, Poul J{\o}rgen and Igel, Christian},
journal = {npj Digital Medicine},
volume = {4},
pages = {72},
year = {2021},
doi = {10.1038/s41746-021-00440-5}
}
@article{Fox2025pftsleep,
title = {A foundational transformer leveraging full night, multichannel sleep study data accurately classifies sleep stages},
author = {Fox, Benjamin and Jiang, Joy and Wickramaratne, Sajila and Kovatch, Patricia and Suarez-Farinas, Mayte and Shah, Neomi A. and Parekh, Ankit and Nadkarni, Girish N.},
journal = {Sleep},
volume = {48},
number = {8},
pages = {zsaf061},
year = {2025},
doi = {10.1093/sleep/zsaf061}
}
@article{Thapa2026sleepfm,
title = {SleepFM: multi-modal representation learning for sleep across EEG, ECG and respiratory signals},
author = {Thapa, Roshan and Kj{\ae}r, Mads Ravn and He, Bo and others},
journal = {Nature Medicine},
volume = {32},
pages = {752--762},
year = {2026},
doi = {10.1038/s41591-025-04133-4}
}
§9.3 引用指南
使用 MESA Sleep 数据时,NSRR 官方要求至少引用 Zhang 2018(NSRR 平台)与 Chen 2015(MESA Sleep)两文,并在致谢中包含 NSRR 与 NHLBI 资助声明(R01 HL098433 等,全文见 官方引用页)。若使用了 Palotti 基准的同步数据构建或 U-Sleep/PFTSleep 权重,请额外引用对应论文。
§10 AI 使用声明卡
§10.1 AI 模型列表
- 主写作模型:CodeBuddy Code(fast-model)
- 辅助工具:WebSearch(事实核查)、check_md.py(结构校验)
§10.2 AI 参与范围
AI 完成初稿撰写、结构组装、代码示例编写与格式校验;所有规模数字、日期、协议细节与基准数字经 6 轮 WebSearch 对官方与文献来源核实并记录于 FACTS.md;未能核实的信息已整行省略。
§10.3 输入来源列表
- Chen X, et al. Racial/Ethnic Differences in Sleep Disturbances: The MESA. Sleep. 2015;38(6):877-888. DOI 10.5665/sleep.4732
- Zhang GQ, et al. The National Sleep Research Resource: towards a sleep data commons. JAMIA. 2018;25(10):1351-1358. DOI 10.1093/jamia/ocy064
- Palotti J, et al. Benchmark on a large cohort for sleep-wake classification with machine learning techniques. npj Digital Medicine. 2019;2:50. DOI 10.1038/s41746-019-0126-9
- Perslev M, et al. U-Sleep: resilient high-frequency sleep staging. npj Digital Medicine. 2021;4:72. DOI 10.1038/s41746-021-00440-5
- Fox B, et al. A foundational transformer leveraging full night, multichannel sleep study data accurately classifies sleep stages. Sleep. 2025;48(8):zsaf061. DOI 10.1093/sleep/zsaf061
- Thapa R, et al. SleepFM: multi-modal representation learning for sleep. Nature Medicine. 2026;32:752-762. DOI 10.1038/s41591-025-04133-4
- NSRR MESA 数据集主页与引用页:sleepdata.org/datasets/mesa、DOI 10.25822/n7hq-c406
- NSRR MESA v0.6.0 文件浏览器与 CHANGELOG(2023-05-02)
- NSRR 变量统计页:ai_all5、slpprdp5
- Associations of Slow-Wave Sleep With Type 2 Diabetes in MESA. J Clin Endocrinol Metab(PMC10686689)
- Multiple, Objectively-Measured Sleep Dimensions including Hypoxic Burden and CKD in MESA(PMC8175452)
- Automated Sleep Stages Classification Using CNN From Raw and Time-Frequency EEG Signals(JMIR,PII S1438887123001000)
- AI-Driven sleep staging from actigraphy and heart rate. PLoS ONE. 2023(2023PLoSO…1885703S)
- Transparent AI-enabled sleep apnea assessment across flexible monitoring scenarios. Nature Communications. 2025. DOI 10.1038/s41467-025-62864-x
- SLEEPYLAND: trust begins with fair evaluation of automatic sleep staging models. npj Digital Medicine. 2025. DOI 10.1038/s41746-025-02237-2
- NSRR 论坛帖:日期脱敏与下载问题、HRV/R 点、分期序列不一致实测
- sleepecg API 文档(MESA 下载与目录约定)
- Detecting sleep in free-living conditions without sleep-diaries. medRxiv 2020.10.05.20188367
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(ICD-11/SNOMED 映射、疾病定义) | 千方病案医学编辑部 | 与 SHHS/MrOS 条目交叉核对 + ICD-11 工具核对 | ✅ 已验证 |
| §3/§4 规模数字、目录树、字段字典 | 千方病案医学编辑部 | 对照 NSRR 官方页面与文献逐项核实 | ✅ 已验证 |
| §6 代码与 8 个坑点 | 医疗 AI 数据工程师 | 代码静态审查 + 坑点溯源至论坛/论文原文 | ✅ 已验证 |
| §7/§8 偏倚、DAIMS、基准数字 | 千方病案医学编辑部 | 基准数字逐条溯源至发表表格 | ✅ 已验证 |
§10.5 AI 生成章节标注
全文初稿由 AI 生成;经 §10.4 所列人工交叉审核后发布。数字类断言 100% 具有可追溯来源(见 §10.3)。
§10.6 最后人工审核日期
最后人工审核日期:2026-09-05(与 §0 审核声明一致)
页面状态:published(全部内容已完成审核并发布)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- shhs — 共享标签:生理信号 / 睡眠信号 / 队列研究
- mros-sleep — 共享标签:生理信号 / 睡眠信号 / 队列研究
- nsrr — 共享标签:生理信号 / 睡眠信号 / 队列研究
- dreamt — 共享标签:生理信号 / 可穿戴传感 / 睡眠信号
- cinc-2011 — 共享标签:生理信号 / 可穿戴传感 / 心血管疾病
- icentia11k — 共享标签:生理信号 / 可穿戴传感 / 心血管疾病
- physionet-cinc-2017 — 共享标签:生理信号 / 可穿戴传感 / 心血管疾病
- hls-cmds — 共享标签:生理信号 / 心血管疾病
- ppg-dalia — 共享标签:生理信号 / 可穿戴传感
- physionet-cinc-2016 — 共享标签:生理信号 / 心血管疾病
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
