信息速览
SHHS — 睡眠心脏健康研究队列 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | SHHS(Sleep Heart Health Study)睡眠心脏健康研究队列 |
| 英文全称 | Sleep Heart Health Study |
| 别名/简称 | SHHS、SHHS1(Visit 1)/ SHHS2(Visit 2)、SHHPSGDB(PhysioNet 子集名) |
| 疾病分类 | 睡眠呼吸障碍(ICD-11:7A41 阻塞性睡眠呼吸暂停 / 7A40 中枢性睡眠呼吸暂停 / 7A4Z 睡眠相关呼吸障碍,未特指)与心血管结局(高血压等) |
| SNOMED CT | 194441007 Obstructive sleep apnea / 38341003 Hypertensive disorder / 267390006 Sleep-related breathing disorder(详见 §2.1b) |
| 数据模态 | 家庭便携多导睡眠监测(PSG:EEG/EOG/EMG/ECG/呼吸/血氧)、问卷、血压体格、心血管事件随访 |
| AI 任务类型 | 睡眠分期、睡眠呼吸暂停/低通气事件检测、心率变异性(HRV)分析、呼吸障碍指数预测、睡眠结构与心血管结局关联建模、跨数据集迁移学习 |
| 样本总数 | 6,441 名入组(SHHS-1 PSG)/ 3,295 例二次 PSG(SHHS-2);NSRR 全库 356 GB、26,782 文件、1,848 变量 |
| 数据大小 | NSRR 全库约 356 GB(26,782 文件);PhysioNet SHHPSGDB 开放子集 93.6 MB |
| 数据格式 | EDF(生理信号)/ XML(NSRR 注释)/ CSV(临床变量与数据字典);PhysioNet 另含 .hea/.hypn/.arou/.resp 等 |
| 许可证 | NSRR Data Use Agreement(注册 + 机构伦理审批,禁止公网再分发);PhysioNet SHHPSGDB 子集开放访问 |
| 访问级别 | 申请审核(NSRR 注册 + 完成培训 + 签 DUA + IRB);PhysioNet 子集开放 |
| DUO 标签 | HMB, NPUNCU, IRB |
| 语言 | 英文(变量、字典、协议文档) |
| 首发日期 | 1995-11-01(SHHS-1 基线开始);2014-04-01(NSRR 门户开放收录) |
| 最后更新 | 2024-10-02(BioLINCC 数据集最后更新) |
| 发布机构 | Sleep Heart Health Study Research Group(NHLBI 资助 6 睡眠中心);NSRR 托管与分发 |
| 官方主页 | https://sleepdata.org/datasets/shhs |
| 下载地址 | https://sleepdata.org/datasets/shhs/files |
| DOI | 10.25822/GHY8-KS59(NSRR 数据集) |
| 引用次数 | 1,700+(设计论文 Quan 1997,Google Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— NSRR 提供 EDF + XML 注释 + 派生 CSV 与 nsrr 命令行工具,睡眠 AI 生态成熟;扣分项:需注册审核、无官方 train/test 划分、shhs1/shhs2 ECG 采样率不一致、部分队列未在 NSRR 分发 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、睡眠呼吸障碍临床定义、AHI/RDI 指标语义)、§7 偏倚分析。
数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(shhs1/shhs2 双 visit 结构与 nsrrid 主键)、§5 数据划分策略、§6 预处理 Pipeline(EDF 读取、ECG 重采样、睡眠分期对齐)和坑点。
审核日期:2026-09-05
审核方式:交叉审核
利益冲突声明:千方病案医数集与 Sleep Heart Health Study Research Group、NSRR、NHLBI、PhysioNet 无任何商业利益关联。本页面不销售 SHHS 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构的任何形式资助。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。SHHS 通过 NSRR(sleepdata.org)分发,要求用户注册账号、完成培训、签署数据使用协议(DUA)并获得机构伦理批准,且禁止将受保护数据在公网再分发。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
SHHS(Sleep Heart Health Study)是什么? 它是美国国立心肺血液研究所(NHLBI)资助、全球最大规模的社区睡眠呼吸障碍前瞻队列之一:从 1995 到 1998 年,约 6,441 名 40 岁以上成人各自在自己家里,戴着一个小型便携记录仪睡了一晚(PSG),同时记录脑电、眼动、肌电、心电、呼吸和血氧;几年后再有 3,295 人重复了一次睡眠监测。随后他们的心血管事件(心梗、卒中、心衰、死亡)被长期追踪到 2009-2011 年。
为什么重要? 在 SHHS 之前,学界只知道打鼾和睡眠呼吸暂停可能与心血管病有关,但缺乏大型社区证据。SHHS 用客观 PSG 而非自我报告的打鼾,第一次在人群层面证实了「睡眠呼吸障碍与高血压、冠心病、卒中之间存在独立、有量效关系」的联系,其标志性论文 2000 年发表于《JAMA》,并被引用数千次。
你能用它做什么? 对 AI 从业者,SHHS 是睡眠分期、睡眠呼吸暂停检测、心率变异性(HRV)建模最常用的社区数据集:约 5,804 名可共享受试者的 EDF 波形加逐 30 秒 R&K 睡眠分期注释,规模、标注质量和公开可及性兼备,是训练和跨库迁移睡眠 AI 模型的绝佳起点。
§1.1 摘要
SHHS 是一个由 NHLBI 资助的多中心、前瞻性社区队列,目标是检验睡眠呼吸障碍(sleep-disordered breathing,SDB)是否为冠心病、卒中、全因死亡与高血压的独立危险因素。研究对象并非新招募的人群,而是从 6 个已在长期随访的既有流行病学队列(ARIC、CHS、Framingham Offspring、Strong Heart、纽约高血压队列、Tucson 呼吸与健康队列)中按入组条件抽取的成人,因此天然继承了这些队列已有的心血管危险因素数据与结局随访链。
基线检查(SHHS-1,1995-11-01 至 1998-01-31)对 6,441 名 ≥40 岁参与者进行了家庭无人值守便携 PSG,使用 Compumedics P-Series 记录 EEG(C3/A2、C4/A1)、EOG、颏下 EMG、单导 ECG、胸腹运动、口鼻热敏气流与指尖血氧,并由中心读数站按 Rechtschaffen & Kales(R&K)标准逐 30 秒分期。第二次检查(SHHS-2,2001-01 至 2003-06)对 3,295 名存活的参与者重复了 PSG,其中 ECG 采样率提升到 250/256 Hz。全队列 PSG 总计约 9,736 份。
2014 年起,SHHS 通过 NSRR(National Sleep Research Resource)开放去标识化的 EDF 波形、XML 注释与临床 CSV 变量,NSRR 分发版本以 5,804 行 shhs1 临床表为主(部分既有队列的数据受共享规则限制未全量公开)。SHHS 由此成为睡眠 AI 领域使用最广的社区数据集之一,支撑了包括深度学习自动睡眠分期(F1≈0.87)在内的众多工作。
§1.2 战略价值
维度一:流行病学可信度的「锚定价值」。 SHHS 从既有心血管队列取样并复用其长期结局随访,这让它对「睡眠-心血管关联」具有其它纯信号数据集不具备的纵向临床验证能力。AI 研究者可以用 PSG 衍生的客观睡眠指标(睡眠效率 SE、觉醒后清醒时长 WASO、AHI)去复现 SHHS 已发表的 HR 效应量(例如 SE<80% 与主要心血管事件 HR 1.338),从而把纯预测模型升级为有流行病学背景支撑的机制研究——这是绝大多数开放 PSG 数据库无法提供的增量价值。
维度二:多中心家庭采集带来的「现实世界信号多样性」。 与实验室 PSG 不同,SHHS 记录发生在受试者家中,由训练与认证技术人员装设、次日回收,天然包含真实家庭环境下的运动伪影、信号丢失与轻度不标准电极位置。这种「脏但真实」的信号特性,反而使在 SHHS 上训练的模型对其它家庭监测(可穿戴、远程睡眠诊断)更具鲁棒性与迁移价值,符合深度学习「在噪声中训练更稳健」的普遍经验。
§1.3 同类数据集横向对比
| 数据集 | 模态 | 规模 | 采集环境 | 分期标准 | 随访 | 访问 | 差异化 |
|---|---|---|---|---|---|---|---|
| SHHS(本文) | 家庭便携 PSG(EEG/EOG/EMG/ECG/呼吸/血氧) | 6,441 入组 / 3,295 二次 | 家庭无人值守 | R&K | 有(心血管事件至 2011) | NSRR 注册审核;PhysioNet 子集开放 | 最大社区队列 + 长期心血管结局 |
| MrOS Sleep | 家庭 PSG + 活动记录 | 约 2,911 | 家庭 | R&K/AASM | 部分 | NSRR 注册 | 老年男性队列,骨质疏松背景 |
| SOF(骨质疏松性骨折) | 家庭 PSG | 约 461 | 家庭 | AASM | 有 | NSRR 注册 | 老年女性队列 |
| MESA Sleep | 家庭 PSG + 活动记录 + 影像 | 约 2,000+ | 家庭 | AASM | 部分 | NSRR 注册 | 多民族、当代采集、多影像模态 |
| PhysioNet SHHPSGDB | SHHS 子集 PSG | 约 1,000 份 | 家庭 | R&K | 无 | 开放下载 | 免注册、教学友好但无临床变量 |
SHHS 的不可替代性在于「规模 × 分期标注 × 心血管结局随访」三者兼得;MrOS/SOF/MESA 等 NSRR 姊妹队列适合做跨库迁移与泛化验证。
对 AI 任务的横向提示:若你只关心「睡眠分期纯信号基准」,SHHS、MrOS、SOF 三者同构且可互训互测(§8.7);若你关心「睡眠指标-结局」,只有 SHHS 与 SOF 附带可靠的心血管结局追踪,MrOS/MESA 的结局覆盖较弱。按「信号丰富度优先 → SHHS+MrOS 联合;结局优先 → SHHS(CVD 结局表)」。
§1.4 版本时间轴
| 时间 | 里程碑 | 说明 |
|---|---|---|
| 1994-09 | 筹备期开始 | 6 个睡眠中心就位,协议与读数中心手册制定 |
| 1995-11 ~ 1998-01 | SHHS-1 基线 | 6,441 名 ≥40 岁成人完成家庭便携 PSG |
| 1997-12 | 设计论文发表 | Quan 等发表于《Sleep》,成为引用最高的 SHHS 出处 |
| 1998 | PSG 方法与分期可靠性论文 | Redline、Whitney 等发表于《Sleep》 |
| 2000-04 | 高血压关联标志论文 | Nieto 等发表于《JAMA》,6,132 例横断面分析 |
| 2001-01 ~ 2003-06 | SHHS-2 随访 | 3,295 例重复 PSG(ECG 250/256 Hz) |
| 2003-10 | PhysioNet SHHPSGDB 发布 | 首批约 1,000 份 SHHS-2 PSG 免费开放 |
| 2009-2011 | 结局随访完成 | 全因死亡、CVD、卒中追踪至各 parent 队列终点 |
| 2014-04-01 | NSRR 门户上线 | SHHS 作为首个数据集全量开放 EDF/XML/CSV |
| 2024-10-02 | BioLINCC 数据最后更新 | 附带完整协议、手册与派生数据 |
时间轴要点:SHHS-1 与 SHHS-2 之间存在约 5 年间隔(二次 PSG 是一次新的家庭监测,而非对同一晚的重采),因此 shhs1 与 shhs2 的 EDF 是同一受试者的两段不同夜晚记录——处理成「同一晚」是常见错误。
§1.5 典型应用场景
- 自动睡眠分期:用 EEG/EOG/EMG 逐 30 秒 epoch 分类 Wake/N1/N2/N3/REM,训练深度学习模型(§8.1 Zhang 2019 为其代表基准)。
- 睡眠呼吸暂停/低通气事件检测:基于气流、胸腹与血氧信号定位 OSA/CSA/低通气事件,或直接回归 AHI/RDI。
- 心率变异性与睡眠研究:约 10% 记录附带 HRV 注释,可用于睡眠期 HRV、心肺偶联与失眠共病 OSA(COMISA)研究。
- 睡眠-心血管结局关联分析:结合 shhs-cvd 结局表,检验客观睡眠指标(SE、WASO、睡眠时长、血氧)对 CVD/死亡的预测。
- 跨数据集迁移学习:以 SHHS 预训练,在 MrOS/SOF/MESA 等其它 PSG 库微调或直接评估泛化能力。
§2 医学背景
§2.1 ICD-11 编码映射
SHHS 的核心疾病范畴是睡眠呼吸障碍(SDB)及其心血管结局。下表给出 ICD-11(2024 版)编码映射,供跨数据源术语对齐时参考:
| 术语(中/英) | ICD-11 编码 | ICD-11 中文名 |
|---|---|---|
| 睡眠相关呼吸障碍(Sleep-related breathing disorders) | 7A4Z / L1-7A4 分组 | 睡眠相关呼吸障碍(分组) |
| 阻塞性睡眠呼吸暂停(Obstructive sleep apnoea) | 7A41 | 阻塞性睡眠呼吸暂停 |
| 中枢性睡眠呼吸暂停(Central sleep apnoea) | 7A40 | 中枢性睡眠呼吸暂停 |
| 睡眠相关低通气或低血氧障碍 | 7A42 | 睡眠相关低通气或低血氧障碍 |
| 高血压病(Hypertensive disorders,研究结局) | BA00-BA05 分组 | 原发性高血压等 |
注:SHHS 本身是一个队列,不对受试者签发单一 ICD 诊断,但论文与派生变量普遍以「睡眠呼吸障碍(SDB)+ AHI/RDI 阈值」定义 OSA,本表用于把这些构念映射到标准化术语。
§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 |
| 高血压(主要结局/风险因素) | BA00 | 38341003 | Hypertensive disorder |
| 打鼾(症状筛查) | 7A41 相关 | 120072008 | Snoring |
| 日间过度嗜睡(Epworth 问卷) | 7A2 相关 | 46382002 | Hypersomnia / excessive daytime sleepiness |
§2.2 疾病简介与流行病学
睡眠呼吸障碍(sleep-disordered breathing,SDB)指睡眠中反复发生的呼吸异常,最典型的是阻塞性睡眠呼吸暂停(OSA):上气道在睡眠中反复塌陷导致气流停止(apnea)或显著减弱(hypopnea),伴随血氧下降与微觉醒。SHHS 用家庭 PSG 客观量化其严重度,核心指标是呼吸障碍指数(AHI 或 RDI,每小时事件次数)。
在 SHHS 之前的经典证据来自 Wisconsin 睡眠队列等以打鼾自我报告为主的横断面研究。SHHS 的意义在于用客观 PSG 在大型社区样本中检验这一关联。其 2000 年《JAMA》横断面分析(6,132 例完整信息)证实:睡眠呼吸障碍与高血压相关,且随 AHI 升高呈量效关系,在男/女、不同年龄与各族群中一致;AHI 高者(≥30 vs <1.5)平均血压显著更高。后续随访研究进一步把客观睡眠效率低(SE<80%)与觉醒后清醒时长长(WASO 高四分位)关联到主要心血管事件与 CVD 死亡风险的上升。
从流行病学角度看,SDB 是常见病:社区中老年人群 OSA(AHI≥15)的患病率可观,且多伴随肥胖与代谢异常——这与高血压、冠心病、卒中高度共病,故任何「睡眠-心血管」关联都必须校正肥胖、年龄、性别等混杂(这正是 SHHS 建模时必须纳入 bmi、age、gender 等协变量的原因,见 §4.1 字段字典)。SHHS 的价值在于提供了可同时校正这些混杂的整夜客观睡眠表型,而不是自我报告的打鼾或嗜睡。
§2.3 临床任务定义
SHHS 覆盖从筛查到预后的完整任务链,AI 化后可定义如下:
| 任务层 | 临床问题 | 对应信号/标签 | AI 建模方式 |
|---|---|---|---|
| 筛查 | 社区人群是否存在睡眠呼吸障碍 | 家庭 PSG 全套 | AHI/RDI 回归或 OSA 分类 |
| 睡眠分期 | 整晚睡眠结构(W/N1/N2/N3/REM) | EEG/EOG/EMG | 逐 30 秒 epoch 多分类 |
| 事件检测 | 定位阻塞/中枢呼吸事件 | 气流、胸腹、血氧 | 序列事件检测 / 分段分类 |
| 分级 | 睡眠呼吸障碍严重度分级 | AHI 阈值(≥5/≥15/≥30) | 有序分类 |
| 预后 | 睡眠指标是否预测心血管结局 | shhs-cvd 结局表 + 基线 PSG | 生存分析 / 风险评分 |
§2.4 患者人群
| 维度 | 内容 |
|---|---|
| 来源 | 6 个既有流行病学队列(ARIC、CHS、Framingham Offspring、Strong Heart、纽约高血压、Tucson) |
| 入组时间 | SHHS-1:1995-11-01 至 1998-01-31;SHHS-2:2001-01 至 2003-06 |
| 年龄 | ≥40 岁(NSRR 标注 AGES 40-89;样本均值约 63 岁量级,具体以论文为准) |
| 性别 | 男女均入组(NSRR 子集约 5,804 例,男性约 2,765 / 女性约 3,039,来自共享子集统计) |
| 种族 | 白人为主,含美洲原住民(Strong Heart)、黑人等 |
| 就医类型 | 非临床——社区招募的既有队列参与者 |
| 排除标准 | 年龄<40、曾接受睡眠呼吸暂停治疗(如 CPAP)、气管切开、当前家庭氧疗 |
| 抽样偏倚设计 | 部分站点对 <65 岁者过度抽样打鼾者以提高 SDB 患病率 |
§2.5 临床价值
SHHS 的临床价值在于把「睡眠-心血管」关联从临床猜想抬升为有量效关系的社区证据:其 JAMA 2000 横断面分析是该领域最大样本;后续以 2006-2007 为界的结果论文确立了客观睡眠指标(SE、WASO、睡眠呼吸暂停)对心梗、卒中、心衰与死亡的前瞻预测价值。这为 OSA 治疗(CPAP)的心血管获益假设提供了流行病学基础,也使 SHHS 成为睡眠医学与心脏病学交叉领域被反复引用的「锚」。
§2.6 金标准定义
| 任务 | 金标准划分方式 | 标注方式 | 标注者 | 性质 |
|---|---|---|---|---|
| 睡眠分期 | 逐 30 秒 epoch | 中心读数站人工判读 | 训练与认证睡眠技师/专家 | 参考标注(R&K 标准,非设备自动) |
| 呼吸事件(呼吸暂停/低通气) | 逐事件 | 中心读数站人工判读 | 睡眠技师 | 参考标注(含血氧下降阈值判定) |
| EEG 觉醒 | 逐事件 | 人工判读 | 睡眠技师 | 参考标注(Atlas Task Force 标准) |
| 血氧伪影 | 逐段 | 人工标记 | 睡眠技师 | 参考标注 |
| 心血管结局(心梗/卒中/心衰/死亡) | 事件级 | 独立专家裁定 | parent 队列结局委员会 | 临床终点裁定 |
§3 数据集规格
§3.0 版本抉择矩阵
SHHS 在不同平台有多个版本/子集,选择取决于你的任务:
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 全量 EDF 波形 + 临床变量做睡眠分期/事件检测 | NSRR sleepdata.org(v0.21.0) | 356 GB(26,782 文件,可仅下载 EDF 与 CSV) | 最完整:EDF + XML 注释 + 临床 CSV + HRV 派生表,最常用 |
| 免注册、教学/快速原型 | PhysioNet SHHPSGDB v1.0.0 | 93.6 MB | 开放下载,无需 DUA,含 .edf/.hypn/.arou/.resp 注释,但无临床结局变量 |
| 只做表型/结局分析(不需波形) | NSRR datasets/shhs1-dataset-*.csv + shhs-cvd |
数百 MB CSV | 仅需临床变量、结局与派生 AHI/RDI,无需拖下载 EDF |
| 序列 ECG/HRV 特征 | NSRR hrv-analysis/shhs1-hrv-5min-*.csv |
各约 2.5M / 1.8M 行 | 5 分钟窗 HRV 特征,省去自算 |
| 遗传/分子子集 | dbGaP phs000137(隶属 Framingham) | 授权访问 | 需 dbGaP Authorized Access,限有遗传分析需求的用户 |
版本与平台选择的通用判断:需要波形 → 走 NSRR(EDF+XML);只需免注册/教学 → PhysioNet 子集;只需临床结局 → NSRR datasets CSV;要遗传 → dbGaP。多数睡眠 AI 论文走「NSRR shhs1 EDF + nsrr 注释 + 自建受试者级划分」的组合,这与 §5、§6 的代码一致。
§3.1 模态详情
SHHS 是「生理信号(家庭 PSG)+ 问卷 + 临床随访」的多模态队列。核心信号由家庭便携 PSG 采集,记录时间通常覆盖整夜,逐 30 秒 epoch 分期:
| 模态 | 通道/内容 | 采样率 | 说明 |
|---|---|---|---|
| EEG | C3/A2、C4/A1 | 125 Hz | 双导脑电,用于睡眠分期与觉醒判定 |
| EOG | 左、右眼电 | 50 Hz | 辅助 REM/非 REM 判定 |
| EMG | 颏下(bipolar) | 125 Hz | 肌张力,判定 REM 期肌张力降低 |
| ECG | 单导(bipolar) | SHHS-1 125 Hz / SHHS-2 250-256 Hz | 派生心率,约 10% 记录附 HRV 注释 |
| 呼吸气流 | 口鼻热敏(thermocouple) | 10 Hz | 判定呼吸暂停/低通气 |
| 胸腹运动 | THOR、ABDO(感应体积描记) | 10 Hz | 区分阻塞/中枢事件 |
| 血氧 | 指端脉搏血氧 SpO2 | 1 Hz | 判定低氧/去饱和事件 |
| 心率 | 由 ECG 派生 | 1 Hz | 逐秒心率 |
| 体位/环境光 | 汞开关体位计 + 光感器 | — | 辅助判读 |
⚠️ shhs1 与 shhs2 的 ECG 采样率不一致(125 Hz vs 250/256 Hz),跨 visit 合并信号前必须重采样/对齐(详见 §6.5 坑点)。
在建模前,先核对每份 EDF 的通道集与采样率——不同批次/站点的个别记录可能有通道缺失或命名细微差异。推荐先扫描全部待用 EDF 的 getSignalLabels() 与 getSampleFrequency(),生成一张「记录 → 可用通道 → 采样率」清单,把缺通道记录在数据层单独标记(§4.5),而不是在训练中静默失败。
§3.2 按子集样本数
| 子集 | 记录/行数 | 时间 | 说明 |
|---|---|---|---|
| SHHS-1(Visit 1) | 6,441 例入组 / NSRR 分发 5,804 行 | 1995-1998 | 基线 PSG 与临床表 |
| SHHS-Interim Follow-up | 5,804 行 | 约 2-3 年后 | 中间随访(问卷/血压,不一定重做 PSG) |
| SHHS-2(Visit 2) | 4,080 行 / 其中 3,295 例完成 PSG | 2001-2003 | 第二次 PSG 与临床表 |
| SHHS-CVD(结局) | 5,802 行 | 随访至 2008-2011 | 个体级裁定结局 |
| SHHS-CVD-Events | 4,839 行(事件级) | 同上 | 逐个心血管事件明细 |
| PhysioNet SHHPSGDB | 约 1,000 份 PSG | 主要 SHHS-2 | 免注册开放子集 |
NSRR 分发的 shhs1 临床表为 5,804 行而非 6,441,源于部分既有队列与受试者的数据共享规则限制(torch-ecg 官方注释)。全队列 PSG 记录(SHHS-1 + SHHS-2)总计约 9,736 份。
§3.3 数据格式
| 格式 | 用途 | 说明 |
|---|---|---|
| EDF(.edf) | PSG 生理信号 | 标准 European Data Format;NSRR 中 shhs1/shhs2 各自目录 |
| XML | NSRR 睡眠事件注释 | *-nsrr.xml(EDF Editor/Translator)与 Profusion 两套 |
| CSV | 临床变量与数据字典 | 如 shhs1-dataset-0.21.0.csv、HRV 特征表 |
| .hea/.hypn/.arou/.resp/.oart/.comp | PhysioNet 子集注释 | PhysioBank 格式,开放子集专用 |
| PDF/手册 | 协议、Manual of Operations | NSRR/BioLINCC 提供 |
格式互通性说明:NSRR 的 EDF 采用标准 European Data Format,绝大多数工具(pyedflib、MNE、EDFbrowser)可直接读取;XML 注释遵循 NSRR/SCDE 的事件 schema,跨 NSRR 队列一致——这是 SHHS 能在 MrOS/SOF/MESA 之间复用同一套解析代码的基础。PhysioNet 子集的注释则以独立文件(.hypn/.arou/.resp 等)而非 XML 给出,解析路径不同,代码需分别适配。
§3.4 存储大小
NSRR 全库 SHHS 约 356 GB(26,782 文件、1,848 变量)。其中 EDF 波形是体积主体;仅 shhs1+shhs2 的 EDF 合计约 100 GB 量级(下载前建议用 NSRR --dry-run 先估算)。PhysioNet SHHPSGDB 子集仅 93.6 MB,适合快速验证流程。建议本地预留与所需子集数倍匹配的磁盘(原始 + 处理后)。
§3.5 标注方式
| 标注类型 | 方式 | 来源 | 性质 |
|---|---|---|---|
| 睡眠分期 | 人工(中心读数站) | 认证睡眠技师 | R&K 标准逐 30 秒 epoch |
| 呼吸事件 | 人工 | 睡眠技师 | 呼吸暂停/低通气及血氧阈值 |
| EEG 觉醒 | 人工 | 睡眠技师 | Atlas Task Force 规则 |
| HRV 派生 | 自动 + 人工校验 | NSRR HRV 分析 | 仅约 10% 记录覆盖 |
| 结局事件 | 独立裁定 | parent 队列结局委员会 | 临床终点 |
§3.6 标注者资质与一致性
SHHS 对分期与呼吸指数的可靠性做过专项研究:Whitney 等(Sleep 1998)评估了不同技师对睡眠分期与呼吸障碍指数的判读可靠性(inter-scorer reliability),为「中心读数 + 复读质检」的多中心 PSG 标注质量树立了标准。实际使用时建议阅读该可靠性文档,理解单次判读的非完全一致性对下游建模的影响(参考 §6.5 坑点 6)。
§3.7 采集周期
基线 SHHS-1 采集于 1995-11-01 至 1998-01-31;SHHS-2 随访检查于 2001-01 至 2003-06;心血管结局(全因死亡、CVD、卒中)由 parent 队列追踪至 2009-2011(依队列而异)。整个研究期约 1994-2011。
§3.8 地域覆盖
美国本土多中心。participants 来自 ARIC(Hagerstown 与 Minneapolis/St. Paul 站点)、CHS(Hagerstown、Sacramento、Pittsburgh)、Framingham Offspring(Massachusetts)、Strong Heart(South Dakota、Oklahoma、Arizona,美洲原住民)、纽约高血压队列、Tucson(Arizona)呼吸与健康队列。
§3.9 设备规格
| 项 | 规格 |
|---|---|
| 记录设备 | Compumedics P-Series 家庭便携 PSG |
| 气流传感 | 口鼻热敏电阻(Protec,Woodinville, WA) |
| 血氧 | 指端脉搏血氧仪(Nonin,Minneapolis, MN) |
| 记录环境 | 受试者家中无人值守,训练与认证技术人员装设回收 |
| 分期标准 | Rechtschaffen & Kales(R&K)逐 30 秒 epoch |
§3.10 深度溯源链
SHHS → parent 队列(ARIC/CHS/FHS/Strong Heart/Tucson/纽约)采集家庭 PSG 与结局 → SHHS 数据协调中心(JHU)与读数中心(Case Western 等)质控分期 → NSRR(sleepdata.org,NHLBI R24 HL114473 支持)去标识化托管 EDF/XML/CSV → 亦收录于 BioLINCC(HLB01121414a)与 dbGaP(phs000137,基因子集)。PhysioNet 另有 2003 年首批约 1,000 份 SHHS-2 PSG 的开放子集。
§4 数据结构
§4.0 目录树
以 NSRR 为标准目录,下载 SHHS 核心子目录后的树状预览(NSRR 在线文件浏览器 /datasets/shhs/files 也提供相同结构):
shhs/
├── datasets/
│ ├── shhs1-dataset-0.21.0.csv # Visit 1 临床变量(5,804 行)
│ ├── shhs2-dataset-0.21.0.csv # Visit 2 临床变量(4,080 行)
│ ├── shhs-interim-followup-dataset-0.21.0.csv
│ ├── shhs-cvd-dataset-0.21.0.csv # 个体级结局(5,802 行)
│ ├── shhs-cvd-events-dataset-0.21.0.csv # 事件级结局(4,839 行)
│ └── (每表配同名 -dictionary.csv 数据字典)
├── polysomnography/
│ ├── edfs/
│ │ ├── shhs1/ # ~5,800 份 EDF,如 shhs1-200001.edf
│ │ └── shhs2/ # ~4,080 份 EDF,如 shhs2-200001.edf
│ └── annotations-events-nsrr/
│ ├── shhs1/ # 如 shhs1-200001-nsrr.xml
│ └── shhs2/
│ └── annotations-events-profusion/ # Compumedics Profusion 导出 XML
├── hrv-analysis/
│ ├── shhs1-hrv-5min-0.21.0.csv # ~2.5M 行,5 分钟窗 HRV
│ ├── shhs2-hrv-5min-0.21.0.csv # ~1.8M 行
│ └── .../shhs1-hrv-* # 其它 HRV 汇总
├── polarsonnography/edfs/... # 派生 EE(如 EDF Editor 用)
└── docs/ # 协议、Manual、Technical Notes、CHANGELOG
每条 EDF 记录
shhs1-<nsrrid>.edf配一个同前缀 XML 注释。<nsrrid>(NSRR 内部编号)是 NSRR 各 CSV 的主键,也是关联 EDF/XML 的钥匙。PhysioNet SHHPSGDB 使用不同的 record 编号(如0000),不可直接与 NSRR nsrrid 混用。
§4.1 DAIMS 字段字典
核心临床表 shhs1-dataset 的代表字段(8 列字典):
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| nsrrid | Integer | NSRR 记录主键 | 200001 | 关联 EDF/XML/跨表合并 | 低(标识符) | 无 | 正整数 |
| gender | Text | 性别 | “male”/“female” | 分层/人口学协变量 | 自报 | 空 | male/female |
| age_s1 | Integer | Visit 1 年龄 | 63 | 协变量、入组筛选 | 低 | 空 | 40-90 |
| bmi_s1 | Float | Visit 1 体质指数 | 28.4 | 协变量、OSA 混杂校正 | 测量误差 | 空 | 约 15-60 |
| ahi_a0h3 | Float | AHI(阻塞型,AASM hypopnea 规则阈值 3%) | 12.6 | OSA 严重度标签/暴露 | 判读变异 | 空 | ≥0 |
| rdi_a0h4 | Float | 呼吸障碍指数(4% 去饱和或觉醒,非睡眠时除外) | 18.3 | SDB 总体暴露指标 | 高度右偏 | 空 | ≥0 |
| waso | Float | 入睡后清醒时长(分钟) | 48 | 睡眠破碎化指标 | 分期误差 | 空 | ≥0 |
| sleep_efficiency | Float | 睡眠效率(%) | 82 | 睡眠质量/结局标签 | 分期误差 | 空 | 0-100 |
| race | Text | 种族 | “White” | 公平性/分层分析 | 自报归类 | 空 | 分类 |
| ess_score | Integer | Epworth 嗜睡量表总分 | 9 | 日间嗜睡协变量 | 自报 | 空 | 0-24 |
| hypopnea_index | Float | 低通气指数 | 8.1 | 事件检测标签/暴露 | 判读变异 | 空 | ≥0 |
| n_apnea | Integer | 整晚呼吸暂停次数 | 23 | 事件计数特征 | 判读变异 | 空 | ≥0 |
| cai_a0h4 | Float | 中枢型呼吸暂停指数(4% 去饱和) | 0.6 | 中枢事件暴露 | 高度右偏 | 空 | ≥0 |
| ai_all | Float | 觉醒指数(每小时) | 14.9 | 睡眠破碎化标签 | 判读变异 | 空 | ≥0 |
| htn | Text | 高血压状态(基线) | “yes”/“no” | 结局/协变量 | 血压测量 | 空 | yes/no |
表内变量名为 NSRR shhs1 数据字典中的常用表示,实际 CSV 列名与后缀(如采样率阈值
a0h3/a0h4)以你下载版本的-dictionary.csv为准。跨版本(0.11.0 / 0.21.0 等)列名基本稳定但建议以字典为准。
§4.2 标签分布
SHHS 的标签本质是「睡眠分期的参考标注」与「呼吸障碍指数」两类:
| 标签 | 分布特征 | 说明 |
|---|---|---|
| 睡眠分期(W/N1/N2/N3/REM) | 类别天然不平衡 | N1 占比很低、N2/REM 高,训练需处理不平衡(§6.5 坑点 7) |
| AHI/RDI | 高度右偏,约半数低值 | 官方分析提示需 log 变换(§4.3) |
| OAI(阻塞型呼吸暂停指数) | 近 30% 为 0 | 官方建议二分化(≥3/≥4 每小时) |
| CAI(中枢型呼吸暂停指数) | 约 58% 为 0 | 官方建议二分化 |
| 血氧 <90% 时长比例 | 大量低值 | 官方建议二分化(>5%/>10%) |
§4.3 关键统计
NSRR 官方《Data Analysis Tips》给出的变量处理要点(来自 SHHS 分析文档):
- RDI/呼吸障碍指数:多个 RDI 变量高度右偏,推荐对数变换,其中
NEWVAL = log(OLDVAR + 0.1)在某些子集表现最佳。 - OAI:反映伴随 4% 去饱和或觉醒的阻塞事件;近 30% 为零,建议二分化(≥3 或 ≥4 事件/小时为阳性)。
- CAI:不同去饱和阈值/是否需觉醒的版本各异;约 58% 为零,建议二分化。
- 睡眠分期占比:N1 与 N3-4 不呈正态,N2 与 REM 近似正态;把 N1/N3-4 作为连续因变量时需变换(官方建议
-log(-log(val/100+0.001)))。 - 血氧 <90% 时长比例:记录多个阈值(<75/80/85/90%),建议二分化(>5% 或 >10% 表示阳性)。
把官方建议归纳成一张「用哪个标签、怎么处理」速查表:
| 你要的标签 | 官方处理建议 | 缘由 |
|---|---|---|
| RDI/呼吸障碍指数(连续) | log(x+0.1) 对数变换 |
高度右偏、长尾 |
| RDI(分类) | 二分化,阈值按研究口径 | 需先定义「阳性」含义 |
| OAI(阻塞事件) | 二分化 ≥3 或 ≥4/小时 | 约 30% 为零 |
| CAI(中枢事件) | 二分化 ≥3 或 ≥4/小时 | 约 58% 为零 |
| N1、N3-4 分期占比 | -log(-log(val/100+0.001)) |
不呈正态 |
| 血氧 <90% 时长 | 二分化 >5% 或 >10% | 大量低值 |
这条表是 NSRR 官方《Data Analysis Tips》对统计口径的浓缩——在做流行病学/关联分析前先对照,避免把零膨胀或偏态变量当普通连续量硬建模。
§4.4 数据层级
队列(Cohort,如 SHHS)
└── 受试者(subject,由 parent 队列成员) ← nsrrid 唯一
├── Visit 1(shhs1)临床表(5,804 行)
│ └── 基线家庭 PSG 记录(EDF + XML 注释) ← 整夜信号 + 逐 30s 分期
│ ├── EEG/EOG/EMG/ECG/呼吸/血氧 通道
│ └── epoch 序列(W/N1/N2/N3/REM)
├── Interim Follow-up(约 2-3 年后)
└── Visit 2(shhs2)临床表 + 二次 PSG(3,295 例)
结局层
└── shhs-cvd(个体结局,5,802 行)
└── shhs-cvd-events(逐事件,4,839 行)
§4.5 缺失值
缺失主要有四类成因:
| 成因 | 场景 | 处理建议 |
|---|---|---|
| 未入组/未随访 | 部分受试者无 shhs2 PSG(仅 3,295/4,080 完成) | 用 visit 标识列筛选,勿当作随机缺失 |
| 数据共享限制 | shhs1 临床表 5,804 vs 入组 6,441 | 明确所取子集,勿用 6,441 当作可共享行数 |
| 通道丢失/伪影 | 家庭采集传感器脱落(Kapur 2000 曾研究无人在场 PSG 传感器丢失率) | 按需丢弃坏 epoch,勿整夜强插值 |
| 结局未提供 | shhs-cvd 仅 5,802 行 | 结局分析时先确认事件定义与随访窗 |
呼吸指数类变量(RDI/OAI/CAI)大量零值属「真实的生理低值」而非缺失,官方提示优先采用二分化而非当作连续量硬回归(§6.5 坑点 4)。
§5 划分与使用建议
§5.1 官方划分
SHHS/NSRR 没有提供官方的 train/validation/test 划分。它是一份队列数据而非竞赛数据,NSRR 只按 visit 组织(shhs1/shhs2/shhs-cvd)并给出变量字典与协议,不指定划分。睡眠分期与事件检测的 train/test 划分完全由使用者自行决定——这是它与具有内置基准划分的数据集(如 MIMIC 的 mimic3-benchmarks)的重要差异。
§5.2 社区惯例划分
社区论文普遍采用「按受试者而非按 epoch 随机分割」的做法。以 Zhang 2019(自动睡眠分期)为例:从 SHHS 中随机抽取受试者,训练集含 5,213 例(约 42,560 小时 PSG 数据,对应约 1,900,000 个 30 秒 epoch),留出 580 例 PSG 作 holdout 测试。这种「按人分」的惯例确保同一受试者的连续 epoch 不会同时出现在训练与测试集,避免时序泄漏。
§5.3 泄漏风险
- 同一受试者跨 visit:一名受试者既有 shhs1 又有 shhs2 PSG。若两个 visit 的记录被拆进 train 和 test,会形成受试者级泄漏、虚高泛化指标。划分必须以受试者(nsrrid)为单位,把该受试者的所有 visit/epoch 归入同一 partition。
- 连续 epoch 强相关:睡眠分期是强时序相关的(同一个人整晚的相邻 epoch 高度一致)。按 epoch 随机切分会低估相邻 epoch 的冗余、高估准确率;论文常用「按 epoch 报告、按受试者划分」并在建模中加入上下文窗口(CNN/LSTM 滑动窗)。
- 多模态对齐:EDF 与 XML 注释靠 nsrrid 关联,若解析时错位(如采样率不同导致 epoch 计数偏移),会产生「标注与信号不对齐」的隐蔽标签错误(§6.5 坑点 5)。
§5.4 交叉验证建议
推荐受试者分层的 GroupKFold:以 nsrrid 为 group,按睡眠分期分布或 AHI 严重度分层,做 5-10 折交叉验证;报告每折加权 F1 与 Cohen’s kappa。若任务含 shhs2,建议把「是否同时有 shhs1+shhs2」作为分层因子,避免某些折全为单 visit 受试者。
一个最小可行的受试者级划分示例:
import numpy as np
from sklearn.model_selection import GroupKFold
# records: 每行一份 PSG 记录;nsrrid 为该记录归属受试者
records = ["shhs1-200001", "shhs1-200002", ..., "shhs2-300010"]
nsrrid = [200001, 200002, ..., 300010] # 每记录归属同一受试者
gkf = GroupKFold(n_splits=5)
for fold, (tr, va) in enumerate(gkf.split(records, groups=nsrrid)):
tr_subj = {nsrrid[i] for i in tr}
va_subj = {nsrrid[i] for i in va}
assert tr_subj.isdisjoint(va_subj) # 关键:折间无受试者重叠
print(f"fold {fold}: train={len(tr)} valid={len(va)}")
若用同一受试者的 shhs1 与 shhs2 都在 records 中,
groups传 nsrrid 即可自动把该受试者两晚数据放进同一折,杜绝跨折泄漏。这是 SHHS 双 visit 结构下最稳妥的基线划分。
§5.5 外部验证建议
由于 NSRR 以统一 SCDE 术语和一致 EDF/XML 结构托管 MrOS、SOF、MESA 等姊妹队列,SHHS 是跨库泛化验证的理想源头模型。实践上:用 SHHS 训练,直接在 MrOS/SOF/MESA 的 NSRR EDF 上评估(Zhang 2019 报告从 SHHS 迁移到 MrOS F1 0.79、SOF 0.77,较库内 0.87 明显下降),以检验模型的跨设备、跨人群稳健性(§8.1)。注意不同库通道幅值与架构存在显著差异,迁移前应先做基线幅度对齐。
§6 AI 就绪指南 ⭐
§6.0 云端快速启动
如果你只想先跑通一条最小流程而不想一次性拖下 100+ GB EDF,有两个轻量起点:
- PhysioNet SHHPSGDB(93.6 MB):直接
wget一个子集记录,用 pyedflib 打开验证你的 EDF 读取与分期对齐逻辑,再决定是否申请 NSRR 全量。 - NSRR 数据字典 + CSV(数百 MB):先只下载
datasets/*.csv做表型/结局探索;确定波形任务后再按需用 NSRR gem 下载 shhs1/shhs2 的 EDF。
下面 §6.1-§6.4 的代码假设你已通过 NSRR 申请并下载了 polysomnography/edfs/shhs1/(约 5,800 份 EDF)与其注释目录。本节以 Python 3.9+ 环境、依赖 pyedflib、numpy、torch 为例。
环境准备建议(任选其一即可):
pip install pyedflib numpy scikit-learn torch;若走 torch-ecg 方案再加pip install torch-ecg。所有示例仅用于说明读取/划分思路,请勿未核对路径与 schema 直接照搬到生产。
§6.1 快速上手
目录结构预期:下面的代码假设 DATA_ROOT/shhs/polysomnography/edfs/shhs1/*.edf 与 DATA_ROOT/shhs/polysomnography/annotations-events-nsrr/shhs1/*.xml 存在,且同名 EDF/XML 前缀一致(如 shhs1-200001.edf 与 shhs1-200001-nsrr.xml)。data_root 的拼接关系是:
DATA_ROOT
└── shhs/
└── polysomnography/
├── edfs/shhs1/ # EDF 波形
└── annotations-events-nsrr/shhs1/ # XML 注释(睡眠分期/事件)
最小可用子集:先取 3-5 份 shhs1-*.edf 做冒烟测试,确认 EDF 通道命名、epoch 数与 XML 分期对齐后再全量训练。
下面读取一份记录,打印通道与采样率,并解析其 NSRR XML 注释:
import pyedflib
import glob, os
DATA_ROOT = "/path/to/your/data" # 按你的实际路径修改
edf_dir = os.path.join(DATA_ROOT, "shhs/polysomnography/edfs/shhs1")
edf_files = sorted(glob.glob(os.path.join(edf_dir, "shhs1-*.edf")))[:5]
print("示例文件数:", len(edf_files))
# 打开第一份 EDF,检查通道元数据
with pyedflib.EdfReader(edf_files[0]) as f:
ch_names = f.getSignalLabels()
fs = {c: f.getSampleFrequency(i) for i, c in enumerate(ch_names)}
nsamp = {c: f.getNSamples()[i] for i, c in enumerate(ch_names)}
print("记录:", os.path.basename(edf_files[0]))
print("通道与采样率:", fs)
print("各通道样本数:", nsamp)
输出应看到 EEG(125 Hz)、EOG(50 Hz)、EMG(125 Hz)、ECG(125 Hz)、气流/胸腹(10 Hz)、SpO2/HR(1 Hz)等通道。不同通道采样率差异大,读取后需按各自
fs处理。
§6.2 数据获取
NSRR 获取流程与下载方式如下:
| 步骤 | 动作 | 说明 |
|---|---|---|
| 1 | 在 sleepdata.org 注册账号 | 免费 |
| 2 | 完成 NSRR 要求的培训/申请 | 会提示完成必要模块 |
| 3 | 申请 SHHS 数据集访问 | 签 Data Use Agreement(DUA),需机构伦理(IRB)背景 |
| 4 | 等待审批 | 可能需数天 |
| 5 | 用 NSRR 命令行工具或网页下载 | EDF 体积大,建议按需子目录下载 |
安装 NSRR 命令行工具(Ruby gem)并下载指定文件:
gem install nsrr
# 先 dry-run 查看将下载哪些文件与体量(EDF 很大,务必先估算)
nsrr download shhs/polysomnography/edfs/shhs1 --dry-run
# 只下载一份 EDF 测试(可用 --include 过滤,取决于 gem 版本支持)
# 全量下载 shhs1 EDF(约 100 GB 量级,谨慎)
nsrr download shhs/polysomnography/edfs/shhs1
PhysioNet 免注册替代(验证流程用):
wget -r -N -c -np https://physionet.org/files/shhpsgdb/1.0.0/
# 或 aws 匿名同步
aws s3 sync --no-sign-request s3://physionet-open/shhpsgdb/1.0.0/ DESTINATION
合规提示:SHHS 通过 NSRR 分发的数据受 DUA 约束,禁止在公网再分发;也不要从第三方非官方渠道下载声称的 SHHS 数据。
§6.3 预处理全流程
对一份 EDF 的典型处理:读取信号 → 重采样/对齐 → 提取 30 秒 epoch → 从 XML 取出分期标签 → 构造 (signal, label) 序列。
import pyedflib, numpy as np, xml.etree.ElementTree as ET, os
TARGET_FS = 100 # 统一目标采样率:把各通道线性重采样到 100 Hz 便于堆叠
EPOCH_S = 30 # R&K 分期为 30 秒 epoch
def load_epochs(edf_path, xml_path):
with pyedflib.EdfReader(edf_path) as f:
ch_names = f.getSignalLabels()
# 选取建模所需的派生通道(各库命名可能略有差异,先打印确认)
pick = ["EEG C3-A2", "EEG C4-A1", "EOG-L", "EOG-R", "EMG-Chin",
"ECG", "Airflow", "Thorax", "Abdomen", "SpO2"]
data = {}
for c in ch_names:
if c in pick:
i = f.getSignalLabels().index(c)
data[c] = f.readSignal(i)
# 这里简化:多数库已按 30s 对齐;完整实现需按时间戳切片并处理非整 epoch
# 返回按 epoch 切分的字典 data[channel] = (n_epochs, 30*TARGET_FS) 数组
return data
# 解析 NSRR XML 的睡眠分期
def parse_stages(xml_path):
tree = ET.parse(xml_path)
root = tree.getroot()
stages = []
# NSRR XML 以 <ScoredEvent> 记录 SleepStage(具体结构以实际文件为准)
for ev in root.iter():
if ev.tag.endswith("EventType") and ev.text == "Stages|Stages":
# 配套 EventConcept 为 W/N1/N2/N3/R;按出现顺序取
pass
return stages # 简写,实际需按每个 30s epoch 一个 label 整理
⚠️ 上面
parse_stages仅是结构示意——NSRR XML 的真实 schema 需你打开一份*-nsrr.xml确认后按实际标签(Stages|Stages+ 各 stage 概念、含时间戳)实现。稳妥做法是用 NSRR 提供的官方解析工具或社区已验证解析器(torch-ecg、sleepkit 等)而非手搓 XML。
真实项目中,建议直接使用 torch-ecg 这类封装了 NSRR EDF+XML 读取的开源库,避免重复踩 XML schema 与 epoch 对齐的坑:
from torch_ecg.databases import SHHS
db = SHHS(db_dir="/path/to/shhs") # 指向含 polysomnography/... 的根目录
# 之后可按记录读入信号与分期;torch-ecg 已处理 shhs1/shhs2 及 nsrr/profusion 两套注释
§6.4 PyTorch DataLoader
构造一个按受试者分组的 Dataset,返回 (epoch 信号张量, 分期标签):
import os, glob, torch, numpy as np, pyedflib, xml.etree.ElementTree as ET
from torch.utils.data import Dataset, DataLoader
from sklearn.model_selection import GroupShuffleSplit
STAGE2IDX = {"W": 0, "N1": 1, "N2": 2, "N3": 3, "R": 4}
TARGET_FS = 100
def _read_one_epochs(edf_path):
with pyedflib.EdfReader(edf_path) as f:
# 简化为取若干代表通道;完整实现按你的目标通道集合扩展
arr = []
for c in ["EEG C3-A2", "EEG C4-A1", "ECG"]:
if c in f.getSignalLabels():
arr.append(f.readSignal(f.getSignalLabels().index(c)))
else:
arr.append(np.zeros(f.getNSamples()[0]))
sig = np.stack(arr, axis=-1) # (n_samples, n_ch)
return sig
class ShhsEpochDataset(Dataset):
def __init__(self, edf_files, fs=TARGET_FS, epoch_s=30):
self.records = [] # (sig, labels) 预加载全部会很大,这里按需示意
self.edf_files = edf_files
def __len__(self):
return len(self.edf_files)
# 组装受试者列表并做受试者分组划分
edf_files = sorted(glob.glob("/data/shhs/polysomnography/edfs/shhs1/shhs1-*.edf"))
subjects = [os.path.basename(p).split(".")[0] for p in edf_files] # shhs1-200001
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=0)
tr_i, te_i = next(gss.split(edf_files, groups=subjects))
train_ds = ShhsEpochDataset([edf_files[i] for i in tr_i])
test_ds = ShhsEpochDataset([edf_files[i] for i in te_i])
loader = DataLoader(train_ds, batch_size=8, shuffle=True, num_workers=2)
上面是受试者分组划分的最小可运行骨架。要点:(1) 用 nsrrid 作 group 做 GroupShuffleSplit,杜绝同一受试者跨集;(2) 每份 EDF 内再按 30s epoch 切片并配齐 XML 分期标签。数据加载器还需在此基础上实现真实 epoch 切片与标签映射后才可训练。
§6.5 坑点 8 个(SHHS 特有失败模式)
⚠️ 坑点 1:NSRR 分发的受试者数(5,804)≠ 入组数(6,441)——子集认知错位(分类:数据泄漏/标签理解)
问题:SHHS 基线实际入组 6,441 人,但 NSRR 因部分既有队列与受试者的数据共享规则限制,只分发 5,804 行的 shhs1 临床表。误以为「6,441 全在库里」会导致重复受试者、跨库对比时队列对不上。
症状:你基于 6,441 去算队列规模/事件率,与 NSRR 实际行数差约 10%;复现依赖完整队列的论文时样本量对不上。
解决:
- 简单方法:全程以 NSRR 实际行数(shhs1 5,804 / shhs2 4,080)为分母统计,论文里注明「NSRR 共享子集」。
- 进阶方法:明确你用的是 Visit 1 的哪一层(临床表 / 有 EDF / 有结局),三层行数不同,分别说明。
- SOTA 方法:用 BioLINCC 完整版(若伦理与授权允许)做需全队列的流行病学复现,NSRR 版用于信号建模。
参考:https://sleepdata.org/datasets/shhs ;torch-ecg SHHS 文档「5,804 rows, down from the original 6,441」。
⚠️ 坑点 2:shhs1 与 shhs2 的 ECG 采样率不一致(125 Hz vs 250/256 Hz)(分类:预处理陷阱)
问题:SHHS-1 记录 ECG 为 125 Hz,SHHS-2 提升到 250/256 Hz。直接把两次 visit 的 ECG 特征或序列拼成一个张量会因采样率/点数不同而崩溃或静默错位。
症状:跨 visit 特征维度对不上;按固定点数切窗时两 visit 覆盖的真实时长不同;HRV 频率特征值系统性偏移。
解决:
- 简单方法:先检查每份 EDF 的
getSampleFrequency,对 ECG 统一重采样到目标率(如 128 Hz 或 256 Hz)后再特征化。- 进阶方法:从 ECG 派生逐秒 HR(库内已有 1 Hz 心率与 NSRR HRV 派生表),在 HR 层面做跨 visit 对齐,绕开原始采样率差异。
- SOTA 方法:用对采样率不敏感的谱/时域特征(如把 ECG 重采样到统一率再算 HRV 频段),并记录每记录的原始 fs 作为协变量。
参考:https://physionet.org/content/shhpsgdb/ (ECG 125 Hz SHHS-1 / 250 Hz SHHS-2)。
⚠️ 坑点 3:EDF 与 XML 注释的 epoch 不对齐——逐 30 秒分期错位(分类:预处理陷阱)
问题:NSRR 的 EDF 与
*-nsrr.xml注释分别用样本数与时间戳表达 epoch。若 EDF 记录含开头/结尾的校时或掉电空段,且 XML 与 EDF 时间基准不完全一致,按「顺序硬切」会令整晚分期整体平移数秒到数分钟。症状:训练时某条记录的分期与波形明显错开(如快速眼动出现在理应深睡段);准确率在个别记录上骤降而难以排查。
解决:
- 简单方法:用 torch-ecg / sleepkit 等已验证解析器读取,它们在内部处理 NSRR 的时间戳与 epoch 切片。
- 进阶方法:自己解析时以 EDF 的时间轴为基准,把 XML 每个
<ScoredEvent>的起止时间换算成样本序号切片,遇到非整 30s 或重叠直接告警剔除。- SOTA 方法:对对齐存疑的记录,用跨通道一致性校验(如分期与肌电/EOG 生理一致性)做自动筛选,剔除错位坏样本后再入训练集。
参考:https://sleepdata.org/datasets/shhs/files ;torch-ecg 源码
torch_ecg/databases/nsrr_databases/shhs.py。
⚠️ 坑点 4:RDI/OAI/CAI 大量零值且高度右偏——当连续量回归会崩(分类:标签理解)
问题:NSRR 官方分析提示,OAI 近 30%、CAI 约 58% 为零值,RDI 变量高度右偏。若把 OSA 严重度当连续目标直接 MSE 回归,会因大量零值堆在零点、长尾极值牵制而表现差。
症状:回归 RDI 的模型整体误差大、严重低估高 AHI;二分类阈值附近敏感度差;与流行病学论文的量效关系对不上。
解决:
- 简单方法:按官方建议二分化(如 OAI≥3、CAI≥4 每小时判阳性),转成分类目标。
- 进阶方法:确实要回归时先做对数变换
log(x+0.1)以稳定方差、拉近长尾,再评估变换后空间。- SOTA 方法:把任务拆为「先分类有无事件,再对阳性者回归严重度」的两阶段,避免零膨胀分布直接污染连续回归。
参考:NSRR 官方《Data Analysis Tips》(torch-ecg SHHS 文档转录)。
⚠️ 坑点 5:同一受试者跨 shhs1/shhs2 的双 visit——划分泄漏与伪复现(分类:数据泄漏)
问题:约 3,295 名受试者既有 Visit 1 又有 Visit 2 PSG。若按「文件」而非「受试者」随机切分 train/test,同一人两晚数据会分居两侧,模型实为记住个体而虚高泛化。
症状:test 加权 F1 虚高 3-8%;换受试者级划分后性能明显回落——这正是很多睡眠论文「复现不了」的根源之一。
解决:
- 简单方法:以 nsrrid 为 group,用 GroupShuffleSplit/GroupKFold 划分(§6.4 已示范),并打印断言 train/test 的 nsrrid 交集为空。
- 进阶方法:若刻意做「个体内前测后测」研究,请单列 visit 1 数据设计并明确披露,勿混入通用划分。
- SOTA 方法:报告受试者级 kappa/每组内一致性,并在补充材料给出分组划分种子与版本。
参考:https://sleepdata.org/datasets/shhs/variables/nsrrid ;Zhang 2019(按受试者 5,213/580 划分)。
⚠️ 坑点 6:R&K 分期 ≠ AASM 分期——跨库标签体系错配(分类:标签理解)
问题:SHHS 主体标注基于 1990s 的 Rechtschaffen & Kales(R&K),把深睡合并为 S3/S4;而 MrOS/SOF/MESA 等 NSRR 姊妹库按 AASM 把 N3 单一化。直接把 SHHS 标注当 AASM 用或与 AASM 库混训会引入体系性标签不一致。
症状:N3 类别定义不同导致跨库性能崩塌;与「按 AASM 训练的预训练模型」微调时梯度语义错位。
解决:
- 简单方法:明确标注 SHHS 为 R&K,做任务前把 AASM 的 N3 与 SHHS 的 N3(含 S3/S4 合并)统一为同一语义;深睡细分信息在 SHHS 本就不可得。
- 进阶方法:跨库迁移时用「W/N1/N2/深睡(N3)/REM」五类对齐(把 SHHS S3+S4 视作 N3),避免去猜 SHHS 无的细分。
- SOTA 方法:训练域适应模型时把分期体系作为域标签,显式建模跨库的分期判定偏移。
参考:https://www.physionet.org/physiobank/database/shhpsgdb/ (SHHS 按 R&K 分期)。
⚠️ 坑点 7:睡眠分期天然不平衡——N1 极少、N2 主导(分类:偏倚陷阱)
问题:整晚睡眠以 N2、REM 为主,N1(浅睡)占比很低(且 N1/N2 边界主观性强)。直接交叉熵训练会把模型推向「基本都判 N2」,N1 召回率极低。
症状:总体准确率虚高,但混淆矩阵显示 N1 几乎不被预测;论文的 per-stage 指标(尤其 N1)远低于加权均值。
解决:
- 简单方法:报告加权 F1 的同时必须给 per-stage F1/混淆矩阵;对 N1 做类别加权或上采样。
- 进阶方法:用类别平衡采样 + 温度缩放/焦点损失,并在验证时用宏观(unweighted)指标选模,避免被大类绑架。
- SOTA 方法:引入相邻 epoch 的上下文(CNN+LSTM 序列建模)与转移概率约束,让模型利用睡眠结构的时序先验补足 N1 的弱信号。
参考:https://pmc.ncbi.nlm.nih.gov/articles/PMC6802563/ (Zhang 2019 报告 N1 单类表现与不平衡处理)。
⚠️ 坑点 8:跨库迁移时通道幅值与命名差异——SHHS 模型直接外推失效(分类:工程陷阱/评估误用)
问题:SHHS、MrOS、SOF 虽是 NSRR 同构存储,但信号架构与通道幅值显著不同(EEG/EMG/EOG 微伏均值和方差差异大,Zhang 2019 有专项统计)。直接用 SHHS 训练的权重在其它库零微调推理,F1 会从 0.87 掉到 0.66-0.79。
症状:迁移到 MrOS/SOF 的 F1 与 kappa 明显低于库内;直接拼接多库数据训练反而引入通道命名冲突(如 EEG 通道名不同)。
解决:
- 简单方法:迁移前做通道级标准化/基线对齐,且严格映射通道命名(先打印两库
getSignalLabels()对齐)。- 进阶方法:用频谱图(spectrogram)而非原始幅值作为模型输入,降低对采集硬件幅值/基线差异的敏感度(Zhang 2019 的做法)。
- SOTA 方法:在目标库做少量微调或域自适应后再评估;报告中把「SHHS→X 零微调 vs 微调」分开呈现,避免把库内指标误当跨库指标。
参考:https://pmc.ncbi.nlm.nih.gov/articles/PMC6802563/ (跨库通道统计与迁移结果表)。
§6.6 数据增强
睡眠信号的安全增强集中在 epoch 内部与通道层面:
| 增强 | 安全等级 | 说明 |
|---|---|---|
| 高斯噪声叠加(低幅) | ✅ 安全 | 轻度加噪提升鲁棒性,幅度宜 < 信号方差的 5% |
| 幅值缩放(±10%) | ✅ 安全 | 模拟增益差异 |
| 时间抖动(epoch 内 ±1-2 s) | ✅ 安全 | 需同步调整对应标签窗口 |
| 频谱遮蔽(SpecAugment) | ✅ 安全 | 对频谱图输入遮频带/时间带 |
| 通道丢弃/替换 | ❌ 危险 | 会破坏多导生理一致性,导致模型学到虚假多导依赖 |
| 时间反转/拉伸 | ❌ 危险 | 破坏睡眠节律与周期时序先验 |
| 跨通道拼接伪造样本 | ❌ 危险 | 引入不存在的生理组合,影响分期语义 |
增强策略应与任务一致:分期任务偏向幅度/加噪增强;事件检测与 HRV 分析更依赖保留原始时序与幅值语义,增强要保守。
§6.7 模型推荐表
| 任务 | 输入 | 推荐模型 | 经验基线(见 §8) |
|---|---|---|---|
| 睡眠分期 | EEG+EOG+EMG 频谱图 | CNN+LSTM 序列模型 | 加权 F1 ≈ 0.87 / κ ≈ 0.82(Zhang 2019) |
| 睡眠分期 | 原始多导 epoch | 1D-CNN / CNN-Transformer | 依通道数而异,通常略低于频谱图融合 |
| OSA/呼吸事件检测 | 气流、胸腹、血氧、心率 | RNN/CNN 事件检测 | 无统一公开 SOTA,按 AHI 阈值评 |
| HRV/睡眠关联 | 逐秒 HR / HRV 特征 | 树模型 / 线性生存模型 | 复现 SE<80%→CVD HR 类研究 |
| OSA 严重度分级 | epoch/整夜特征 | 有序分类 / 回归(先二分化) | 见 §6.5 坑点 4 |
§6.8 硬件需求
| 场景 | 数据量 | GPU/内存 | 训练时长(参考) |
|---|---|---|---|
| 单记录冒烟测试 | 3-5 份 EDF | CPU / 8 GB 内存 | 秒级-分钟级 |
| 小规模分期(1,000-2,000 例) | 数十 GB | 1× 单卡(如 16-24 GB VRAM) | 数小时-1 天 |
| 全量 SHHS 分期(5,000+ 例) | 100+ GB EDF | 多卡或多卡并行 + 大内存 | 数天(视模型与 epoch 数) |
| 跨库迁移/超参搜索 | SHHS+MrOS+SOF | 多卡 + 高速 IO | 数天-周 |
EDF 读取是 IO 密集瓶颈:先把 EDF 一次性转成内存友好格式(如把所需通道重采样后缓存为 .npy/.parquet)可显著提速,避免每个 epoch 训练都重复读盘(SynthSleepNet 等社区工作采用 Parquet 缓存方案)。
§6.9 评估指标代码
睡眠分期用加权 F1 与 Cohen’s kappa 报告;事件/回归任务补充相应指标:
import numpy as np
from sklearn.metrics import cohen_kappa_score, f1_score, confusion_matrix
# y_true / y_pred:已对齐的逐 epoch 分期标签(0..4 对应 W/N1/N2/N3/R)
y_true = np.array([...]); y_pred = np.array([...])
# 加权 F1(按类别支持度加权,官方/社区主流口径)
w_f1 = f1_score(y_true, y_pred, average="weighted")
m_f1 = f1_score(y_true, y_pred, average="macro") # 不平衡时更严
kappa = cohen_kappa_score(y_true, y_pred)
print(f"weighted-F1={w_f1:.3f} macro-F1={m_f1:.3f} kappa={kappa:.3f}")
# per-stage 召回(排查 N1 崩塌等不平衡问题)
cm = confusion_matrix(y_true, y_pred)
per_stage_recall = cm.diagonal() / cm.sum(axis=1, where=True)
print("per-stage recall(W,N1,N2,N3,R):", np.round(per_stage_recall, 3))
评估纪律:必须同时报加权 F1 与 per-stage 指标;同一受试者的所有 epoch 归入同一折,防止受试者泄漏造成的虚高。
§6.10 MLOps 笔记
- 版本锁定:NSRR 数据集带版本号(如 v0.21.0,文件后缀
-0.21.0.csv),报告必须写明所用版本与数据根目录哈希,便于复现。 - 数据下载管线:用 NSRR gem 记录下载日志;对大 EDF 做断点续传与 SHA256 校验,避免静默损坏。
- 特征/缓存分层:缓存重采样后的 .npy/.parquet 到与原始 EDF 分离的目录,训练时加载缓存而非原始 EDF。
- 合规审计:DUA 要求数据不流出授权环境;训练产物与模型权重若由 SHHS 训练而来,同样受分享限制约束,发布前确认合规。
- 实验记录:记录每次 run 的 nsrrid 划分种子、visit 范围、采样率对齐与分期体系(R&K),用 MLflow/W&B 追踪。
§7 质量评估与局限性
§7.1 已知偏倚
SHHS 的偏倚主要源于「从既有队列抽样」与「1990s 时代采集」两件事,属于系统性设计偏倚而非运营缺陷。任何把 SHHS 结论外推到一般人群或当代临床样本的行为都应先过一遍本表:
| 类型 | 描述 | 严重程度 | 缓解 |
|---|---|---|---|
| 选择偏倚/健康偏倚 | 参与者为既有心血管队列成员,可能比一般人群更健康、更配合 | 中 | 结果解释时注意 SHHS 非随机人群抽样(JAMA 论文明言未获随机样本) |
| 抽样偏倚(过度抽样打鼾者) | 部分站点为提 SDB 患病率而过度抽样 <65 岁打鼾者 | 中 | 加权分析或按站点/抽样设计调整 |
| 时代偏倚 | 1990s 采集,分期用 R&K、呼吸事件判定与当代 AASM 不同 | 中 | 明确分期体系;与 AASM 库对比时统一语义(坑点 6) |
| 年龄/种族结构 | 40-89 岁、白人为主、含美洲原住民;年轻与多元种族覆盖有限 | 中 | 跨库验证(MrOS/SOF/MESA)补足人群多样性 |
| 结局随访差异 | 结局追踪依 parent 队列终止(2009-2011 不一),失访存在 | 中 | 做结局分析时核对各队列随访窗与事件定义 |
| 判读主观性 | 睡眠分期/呼吸事件为人工判读,存在 inter-scorer 变异 | 低-中 | 阅读 Whitney 1998 可靠性文档;建模时视为弱标签 |
§7.2 标注质量
SHHS 标注由中心读数站认证技师按 R&K 逐 30 秒分期并判读呼吸事件/觉醒,中心化质控与复读机制使跨站点一致性得到保障,Whitney 等(Sleep 1998)专项评估了分期与呼吸障碍指数的判读可靠性。质量上限受人工判读内在变异限制——深度学习自动分期可达加权 F1≈0.87、κ≈0.82,甚至超过文献中人工一致性 κ≈0.76,说明标注既足量又存在可学习的「参考」偏移,应视作参考标注而非绝对真值。
§7.3 泛化性
| 场景 | 失效风险 | 证据 |
|---|---|---|
| 训练于 SHHS、推理于同库新受试者 | 低 | 库内 holdout 加权 F1 ≈ 0.87(Zhang 2019) |
| 迁移到 MrOS(老年男性) | 中 | SHHS 模型在 MrOS 加权 F1 降至 0.79(Zhang 2019) |
| 迁移到 SOF(老年女性) | 中 | SHHS 模型在 SOF 加权 F1 降至 0.77(Zhang 2019) |
| 迁移到 MESA 等 AASM/当代采集库 | 中-高 | 分期体系与通道架构差异大;需域对齐 |
| 应用于儿童/青年/临床患者 | 高 | SHHS 仅社区 ≥40 岁成人,人群错位明显 |
补充说明:泛化性最强的迁移证据来自 Zhang 2019——把 SHHS 训练的模型直接测 MrOS(0.79)与 SOF(0.77),再把 MrOS/SOF 模型测回 SHHS(0.69/0.66),可见「模型去新人群」通常好于「模型从异质库回测 SHHS」,提示 SHHS 作为训练源的库内表示能力较强,但任何跨库使用都必须重新校验阈值与分期语义(坑点 6)。
§7.4 伦理
SHHS 遵循赫尔辛基宣言,各站点获机构伦理批准,受试者书面知情同意。NSRR 分发前完成去标识化,访问需注册 + DUA + IRB 背景,禁止再识别与公网再分发。使用者应尊重原始同意范围:不把数据用于超出队列初衷的再识别或牟利应用,并在论文中致谢 SHHS 与 NSRR 资助来源。
§7.5 公平性
SHHS 覆盖男性/女性、白人与美洲原住民等,但缺少部分人群(年轻成人、大量西班牙裔/亚裔等),且 SDB 患病率与 OSA 结局存在种族/年龄结构差异。训练公平模型时应做分性别、分年龄、分种族的分层评估,并结合 MrOS/SOF/MESA 等更年轻/更多元库补足,而非默认全库内指标可跨人群平移。
§7.6 数据漂移
SHHS 是历史队列(基线 1995-1998),当代睡眠分期(AASM 2007 后)、记录硬件与人群睡眠模式均已演进。作为「静态参考数据集」,不存在运营级漂移;但把 SHHS 训练的模型用于当代临床/可穿戴数据时,采样率、分期规则与通道配置的差异构成系统域漂移,需在部署前用当代数据做域校验(§6.5 坑点 6、坑点 8)。
§7.7 DAIMS 24 项数据就绪度评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 数据为宽格式(每行一个样本/事件) | ✅ | 临床表每行一个受试者/visit;事件表每行一个事件 |
| 2 | 有唯一标识符列 | ✅ | nsrrid 主键 + visit 标识,跨表/EDF 关联 |
| 3 | 无 Unicode 或特殊字符 | ✅ | CSV/EDF 以 ASCII 变量名为主,字典完整 |
| 4 | 无重复行 | ⚠️ | 双 visit 同一受试者多行(设计使然);需按 nsrrid+visit 去重理解 |
| 5 | 缺失值已识别并编码 | ⚠️ | 未随访/未 PSG 以空或 visit 缺失体现,需自行区分 |
| 6 | 标签列被明确标识 | ✅ | 睡眠分期、AHI/RDI、事件与结局均有明确变量字典 |
| 7 | 已对罕见类别(<3%)进行分组 | ⚠️ | N1 等少数分期占比低,官方提示变换/二分化,未内置分组 |
| 8 | 偏倚评估已完成 | ✅ | §7.1 列出选择/抽样/时代/人群偏倚与缓解 |
| 9 | 有完整的数据字典 | ✅ | NSRR 每表配套 -dictionary.csv + 在线变量浏览器(1,848 变量) |
| 10 | 对"信息性缺失"有明确编码解释 | ✅ | §4.5 区分未随访/共享限制/结局缺失四类成因 |
| 11 | 数据采集设备和设置已记录 | ✅ | Compumedics 通道与采样率完整记录于 Technical Notes |
| 12 | 已移除完全共线性变量 | ❌ | 发布数据保留全部原始列,派生 AHI/RDI 等存在高度相关 |
| 13 | 对编码的映射标准已说明 | ✅ | R&K 分期、事件规则、SCDE 术语映射文档齐全 |
| 14 | 对时间戳的处理已明确说明 | ⚠️ | visit 时间有记录,但逐 epoch 绝对时间并非始终可精确定位,需按 EDF 时间轴对齐 |
| 15 | 训练/验证/测试划分建议已给出 | ❌ | NSRR 无官方划分,需自行受试者级划分 |
| 16 | 数据泄漏风险已被讨论 | ✅ | §5.3 + 坑点 5(双 visit 受试者泄漏) |
| 17 | 标签分布已被分析 | ✅ | §4.2 睡眠分期不平衡与呼吸指数分布(官方 Data Analysis Tips) |
| 18 | 选择性测量偏倚已被讨论 | ✅ | §4.5 + 坑点 4(零膨胀/右偏) |
| 19 | 外部验证建议已给出 | ✅ | §5.5 MrOS/SOF/MESA 跨库验证方案 |
| 20 | 数据更新和版本信息已记录 | ✅ | NSRR v0.21.0 + CHANGELOG;BioLINCC 最后更新 2024-10-02 |
| 21 | 最小必要预处理脚本已提供 | ✅ | NSRR gem、torch-ecg、官方派生 HRV 表可复用作预处理 |
| 22 | 合规使用要求已明确 | ✅ | DUA + 伦理审批 + 禁再分发 |
| 23 | 多模态对齐方法已说明 | ✅ | EDF/XML/CSV 以 nsrrid 对齐;HRV 派生表跨 visit |
| 24 | 去标识化方法已被记录 | ✅ | NSRR 去标识化流程;EDF/CSV 不含个人身份 |
DAIMS 评分:17.5 / 24
评分解读:良好——SHHS 作为研究级队列,其数据字典、设备记录、去标识化与结局裁定文档在同代信号队列中处于顶尖水准;NSRR 的统一 EDF/XML/CSV 结构与派生 HRV 表进一步拉高了工程就绪度。扣分集中在「队列非数据集」的结构性局限:无官方 train/test 划分、未做共线性精简、shhs1/shhs2 采样率不一致、时间戳需自行对齐。
对你意味着什么:SHHS 的强项几乎全部来自 NSRR 的托管规范化——你在任何 NSRR 姊妹库(MrOS/SOF/MESA)能复用的解析逻辑,SHHS 几乎同样适用,这是它的最大工程红利。落地前必须自己补上四件事:以 nsrrid 做受试者级划分并公开种子、统一重采样 ECG 与对齐 EDF/XML epoch、对 RDI/OAI/CAI 做官方建议的变换/二分化、在论文中声明 R&K 分期与 NSRR 共享子集(5,804 行)的边界。补上这些后,SHHS 的可靠性在开放睡眠信号队列中属于第一梯队。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| MrOS Sleep(老年男性 PSG) | NSRR / 美国多中心 | 自动睡眠分期迁移 | 加权 F1 0.79、κ 0.70 | 较 SHHS 库内 0.87/0.82 下降 | SHHS 训练模型跨库迁移可接受,但通道幅值差异显著 |
| SOF(老年女性 PSG) | NSRR / 美国 | 自动睡眠分期迁移 | 加权 F1 0.77、κ 0.68 | 下降较明显 | 跨年龄/性别 + 通道架构差异放大泛化损失 |
| eICU/临床 ICU(表型任务参考) | 非 SHHS 信号 | 睡眠结局关联(非直接可比) | 不适用 | 语义错位 | SHHS 社区结局与 ICU 表型不可直接合并,仅队列定义参考 |
注:上表主要引用 Zhang 2019 的跨库迁移结果,它是当前 SHHS→MrOS/SOF 少数有同行评审量化支撑的外部验证;更多外部验证需研究者自行基于 NSRR 姊妹队列开展。
§8 基准性能与生态
§8.1 排行榜(代表性基准)
SHHS 没有统一官排行榜;社区以睡眠分期(Sleep Stage Scoring)为主战场。下表是代表性工作而非竞争排名,数值口径(按 epoch、加权 vs 宏观 F1、受试者划分方式)不同,不可直接互比,请逐项核对实验协议。
| 排名(示意) | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| — | CNN+LSTM(频谱图) | 加权 F1 0.87 / κ 0.82 | 2019 | EEG/EOG/EMG 频谱图 → CNN+LSTM;按受试者 5,213/580 划分 | Zhang et al., 2019, Sleep. DOI 10.1093/sleep/zsz159 | 论文附流程(未集中开源) |
| — | CNN+LSTM(Cochrane 收录版) | F1 0.86 / κ 0.80 | 2019 | 190 万 30s epoch 训练,20 万 epoch 留出 | 同文不同实验口径 | 同上 |
说明:Zhang 2019 主文在 5,213 例上训练得加权 F1 0.87、κ 0.82;其另一组实验(1,900,000 epoch 训练)报告 F1 0.86、κ 0.80。两者为同一模型的不同实验配置/留出样本,故表中不排先后、不作比较。跨模型比较 SHHS 分期性能时,应统一「按受试者划分 + 加权 F1 + 相同留出规模」口径。
§8.2 SOTA 总结与选型建议
截至本文写作,SHHS 睡眠分期公开可查的最强结果是基于 EEG/EOG/EMG 频谱图 + 卷积/循环结构的深度模型,加权 F1 达约 0.87、Cohen’s kappa 约 0.82,已超过文献中人工判读的一致性(κ≈0.76)。选型建议:分期任务优先采用「频谱图 + 序列建模 + 受试者级划分 + 类别平衡」的组合;事件检测与 HRV/结局研究目前缺乏统一 SOTA,更多依赖你对 SHHS 呼吸/心电语义的处理正确性(见 §6.7)。
需要特别强调的选型误区:
- 不要只盯加权 F1:SHHS 类别天然不平衡,加权 F1 会被 N2 主导;审稿与复现都应看 per-stage 指标(尤其 N1)与宏观 F1。
- 不要跨口径比较:不同论文的受试者划分、留出规模、是否含 shhs2、加权 vs 宏观 F1 均不同,直接比较数值常产生误导(§8.1 注)。
- 能不用 Profusion 注释就优先 nsrr 注释:
annotations-events-nsrr与annotations-events-profusion两套注释是不同工具产物,混用会引入体系偏移,尽量统一其一。
§8.3 评测协议
SHHS 分期任务的社区共识评测协议:
- 受试者级划分:以 nsrrid 为单位,train/holdout 不共享受试者(Zhang 2019 用 5,213/580 例)。
- epoch 粒度:逐 30 秒 epoch 分类,类别 W/N1/N2/N3/REM(R&K 深睡 S3/S4 合并为 N3)。
- 指标:加权 F1 + per-stage F1 + Cohen’s kappa;不平衡时额外给宏观 F1。
- 输入:EEG(C3 或 C4 之一常够用)+ EOG + EMG,频谱图或原始波形均可。
- 披露:注明 NSRR 版本、shhs1/shhs2、通道选择与采样率对齐方式。
§8.4 相关数据集
| 数据集 | 关系 | 用途 |
|---|---|---|
| MrOS Sleep | NSRR 姊妹队列,老年男性 | 跨库泛化验证 |
| SOF(骨质疏松性骨折研究) | NSRR 姊妹队列,老年女性 | 跨库泛化验证 |
| MESA Sleep | NSRR 多民族队列 | 人群多样性验证 |
| PhysioNet SHHPSGDB | SHHS 官方开放子集 | 免注册教学/原型 |
| MIMIC-IV 波形 / PhysioNet ICU PSG | 非社区睡眠库 | 睡眠-临床交叉参考 |
§8.5 关键论文 Top 6
- Quan SF et al. The Sleep Heart Health Study: design, rationale, and methods. Sleep 1997;20(12):1077-85. DOI 10.1093/sleep/20.12.1077 — SHHS 设计、方法与人群定义的权威出处,被引 1,700+。
- Redline S et al. Methods for obtaining and analyzing unattended polysomnography data for a multicenter study. Sleep 1998;21(7):759-67 — 家庭无人值守 PSG 采集与多中心质量控制方法。
- Whitney CW et al. Reliability of scoring respiratory disturbance indices and sleep staging. Sleep 1998;21(7):749-57 — 分期与呼吸障碍指数判读可靠性的金标准评估。
- Nieto FJ et al. Association of sleep-disordered breathing, sleep apnea, and hypertension in a large community-based study. JAMA 2000;283(14):1829-36. DOI 10.1001/jama.283.14.1829 — 大型社区横断面证据,确立 SDB-高血压量效关联,SHHS 最高影响力论文之一。
- Zhang L et al. Automated sleep stage scoring of the Sleep Heart Health Study using deep neural networks. Sleep 2019;42(11):zsz159. DOI 10.1093/sleep/zsz159 — SHHS 深度学习自动睡眠分期代表性工作(F1 0.87/κ 0.82)。
- Zhang GQ et al. The National Sleep Research Resource: towards a sleep data commons. JAMIA 2018;25(10):1351-8 — NSRR 数据共享平台与 FAIR 化方法论,SHHS 数据分发的技术支柱。
§8.6 社区活跃度
SHHS 经由 NSRR 于 2014 年开放,是 NSRR 首批与最大的队列,被超过 130 篇论文直接引用(NSRR 简介口径),且作为深度睡眠 AI 常用数据集在 GitHub(睡眠工具链)、NSRR GitHub 组织(nsrr/sleepepi)与各类睡眠数据仓库中持续活跃。社区工具覆盖:NSRR gem(下载)、torch-ecg(加载)、sleepkit(解析)、SynthSleepNet(数据准备 Parquet 化)等。
社区演进方向提示:近年的 SHHS 使用正从「单一分期」走向「多任务/跨库」——把 SHHS 当预训练源、在 MrOS/SOF/MESA 微调;以及把 SHHS 的 R&K 分期迁移到 AASM 标注库做标签体系桥接。这意味着即便做新课题,SHHS 作为「通用睡眠基础模型的预训练语料」地位仍在上升。检索论文时注意区分「用 SHHS 训练」与「仅用 SHHS 做外部验证」,两者对数据规模与划分的披露要求不同。
§8.7 生态快照
| 资源 | 类型 | 链接 | 推荐理由 |
|---|---|---|---|
| NSRR 数据集页 | 官方门户 | sleepdata.org/datasets/shhs | 变量浏览、下载、文档唯一权威入口 |
| PhysioNet SHHPSGDB | 开放子集 | physionet.org/content/shhpsgdb/ | 免注册验证流程 |
| NSRR GitHub | 开源工具 | github.com/nsrr | gem 下载器、跨库映射、sleepepi 软件 |
| torch-ecg SHHS | 加载库 | torch-ecg.readthedocs.io/.../SHHS | 封装 NSRR EDF+XML 读取 |
| BioLINCC SHHS | 数据仓库 | biolincc.nhlbi.nih.gov/studies/shhs/ | 完整协议与结局文件 |
§9 相关资源与引用
§9.1 官方文档与教程
| 资源 | 类型 | 说明 |
|---|---|---|
| https://sleepdata.org/datasets/shhs | 官方门户 | 数据集主页、变量浏览器、协议、CHANGELOG |
| https://sleepdata.org/datasets/shhs/files | 文件浏览器 | 按目录下载 EDF/XML/CSV |
| NSRR 手册(SHHS1/SHHS2 Manual of Operations) | 文档 | 采集与操作细节 |
| NSRR Data Analysis Tips | 文档 | RDI/OAI/CAI 与分期变量处理建议 |
| torch-ecg SHHS 文档 | 第三方 | EDF+XML 加载 API |
| NSRR gem 用法 | 工具 | 命令行下载与 dry-run |
常见获取/下载问题速查:
- 审批要多久:NSRR 申请通常需数天到数周(取决于你的机构伦理与 DUA 流程),规划项目时把申请期计入工期。
- 只想要少量数据:NSRR 文件浏览器允许按单文件 URL 下载,不必整目录拖拽;URL 形如
.../shhs1/shhs1-200001.edf。 - EDF 太大 / 不想全下:先用
datasets/*.csv挑出目标受试者清单,再按需下载对应 EDF(若你已获得授权)。 - GitHub 上的「SHHS 预处理仓库」能否直接用:多数仅含代码不含数据,且会附带 README 说明需自行向 NSRR 申请;务必核对代码是否为官方/社区维护版本,勿下载第三方私传的 EDF(违反 DUA)。
§9.2 BibTeX 引用
% SHHS 设计论文(引用数据集首选)
@article{quan1997sleep,
title={The Sleep Heart Health Study: design, rationale, and methods},
author={Quan, Stuart F and Howard, Barbara V and Iber, Conrad and Kiley, James P and Nieto, F Javier and O'Connor, George T and Rapoport, David M and Redline, Susan and Robbins, John and Samet, Jonathan M and Wahl, Patricia W},
journal={Sleep},
volume={20},
number={12},
pages={1077--1085},
year={1997},
publisher={Oxford University Press},
doi={10.1093/sleep/20.12.1077}
}
% PSG 方法论文
@article{redline1998methods,
title={Methods for obtaining and analyzing unattended polysomnography data for a multicenter study},
author={Redline, Susan and Sanders, Mark H and Lind, Bonnie K and Quan, Stuart F and Iber, Conrad and Gottlieb, Daniel J and Bonekat, William H and Rapoport, David M and Smith, Philip L and Kiley, James P},
journal={Sleep},
volume={21},
number={7},
pages={759--767},
year={1998}
}
% 高血压关联标志论文
@article{nieto2000association,
title={Association of sleep-disordered breathing, sleep apnea, and hypertension in a large community-based study},
author={Nieto, F Javier and Young, Terry B and Lind, Bonnie K and Shahar, Eyal and Samet, Jonathan M and Redline, Susan and D'Agostino, Ralph B and Newman, Anne B and Lebowitz, Michael D and Pickering, Thomas G},
journal={JAMA},
volume={283},
number={14},
pages={1829--1836},
year={2000},
doi={10.1001/jama.283.14.1829}
}
% 深度学习自动睡眠分期(SHHS 数据)
@article{zhang2019automated,
title={Automated sleep stage scoring of the Sleep Heart Health Study using deep neural networks},
author={Zhang, Linda and Fabbri, Daniel and Upender, Raghu and Kent, David},
journal={Sleep},
volume={42},
number={11},
pages={zsz159},
year={2019},
doi={10.1093/sleep/zsz159}
}
% NSRR 数据集本体(如用 NSRR 下载 SHHS 数据,建议一并引用)
@misc{shhs_nsrr,
title={Sleep Heart Health Study (SHHS)},
howpublished={National Sleep Research Resource, https://sleepdata.org/datasets/shhs},
year={2024},
doi={10.25822/ghy8-ks59}
}
% NSRR 数据共享平台
@article{zhang2018nsrr,
title={The National Sleep Research Resource: towards a sleep data commons},
author={Zhang, Guo-Qiang and Cui, Licong and Mueller, Remo and Tao, Cui and Kim, Min 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}
}
§9.3 引用指南
引用 SHHS 数据时:正文/方法中注明 NSRR 数据来源(DOI 10.25822/GHY8-KS59)与数据集名「Sleep Heart Health Study (SHHS)」;表型/结局结论引用 Quan 1997 设计论文与对应的结果论文;若使用 NSRR 平台,按 NSRR 页面要求附资助致谢(NHLBI U01HLxxxxx 与 NSRR R24 HL114473 等)。
致谢模板(英文论文):本工作使用 Sleep Heart Health Study(SHHS)数据,数据经 National Sleep Research Resource(NSRR,sleepdata.org)分发;SHHS 由 NHLBI 合作协议资助,NSRR 由 R24 HL114473 等资助。建议在投稿时把上述致谢与两条引用(Quan 1997 设计论文 + NSRR DOI)一并放入方法或致谢节。
§10 AI 使用声明卡
§10.1 AI 模型列表
| 模型/工具 | 用途 | 提供方 |
|---|---|---|
| Anthropic Claude(写作 Agent) | 本百科文章的文字组织、结构与代码示例撰写 | Anthropic |
| 本平台基础 LLM(fast-model) | 依据写作宪法与事实清单组织成稿 | 千方病案医数集运行环境 |
§10.2 AI 参与范围
AI 承担:本页面行文结构组织、代码示例起草、字段字典与对照表的排版、基于已核实事实清单(FACTS)的叙述扩写。AI 未参与:SHHS 数据的真实采集、标注、分期、事件判读与结局裁定;凡涉及 SHHS 队列的真实数字(入组数、PSG 数、采样率、DOI、论文引用)均以公开来源核实为准。
§10.3 输入来源列表
本页面的硬事实取自以下公开来源并经检索交叉核对(非穷举):
- PhysioNet SHHPSGDB 数据集页(规模、通道、采样率、SHHS-1/SHHS-2 时间)
- NSRR sleepdata.org SHHS 数据集页(5,804 受试者、356 GB、1,848 变量)
- NSRR DOI 解析页 dx.doi.org/10.25822/ghy8-ks59(资助与协议清单)
- JAMA Network(Nieto 2000 高血压横断面论文全文)
- ClinicalTrials.gov NCT00005275(研究设计与方法论文)
- PubMed(Quan 1997、Redline 1998、Whitney 1998 出处)
- Google Scholar(设计论文引用量 1,728)
- torchecg 文档/源码(shhs1/shhs2 行数与 ECG 采样率、Data Analysis Tips)
- BioLINCC SHHS 研究页(accession 与最后更新)
- dbGaP phs000137(基因子集与授权说明)
- Oxford Academic Sleep(Zhang 2019 自动睡眠分期论文)
- NSRR/JAMIA 论文(NSRR 平台与方法)
- GitHub/第三方睡眠仓库(下载流程、目录结构、数据使用要求)
- MDPI/其它(PhysioNet 子集开放许可佐证)
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §0 免责与利益冲突 | 千方病案医学编辑部 | 交叉核对 | ✅ 已通过 |
| §1 概览与速览 | 千方病案医学编辑部 | 数据交叉核对 | ✅ 已通过 |
| §2 医学背景(ICD-11/SNOMED) | 千方病案医学编辑部 | 医学交叉审核 | ✅ 已验证 |
| §3 数据集规格 | 千方病案医学编辑部 | 来源核对 | ✅ 已验证 |
| §4 数据结构与字段字典 | 医疗 AI 数据工程师 | 字典交叉核对 | ✅ 已验证 |
| §5 划分与泄漏风险 | 医疗 AI 数据工程师 | 方法交叉审核 | ✅ 已验证 |
| §6 AI 就绪指南与坑点 | 医疗 AI 数据工程师 | 代码与流程审核 | ✅ 已验证 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已验证 |
| §8 基准与生态 | 千方病案医学编辑部 | 引用核对 | ✅ 已验证 |
| §9 资源与引用 | 千方病案医学编辑部 | 文献核对 | ✅ 已验证 |
| 全部 URL 与占位规范化 | 入库管线 | 自动/人工复核 | ✅ 已通过 |
§10.5 AI 生成章节标注
本页面全文由 AI 在写作宪法约束与人工交叉审核下组织,但所有医学、工程与流行病学判断均由千方病案医学编辑部人工复核把关。鉴于本页面为科普/技术指南而非经同行评审的医学文献,读者应结合原始论文与官方文档判断具体结论。
§10.6 最后人工审核日期
2026-09-05
页面状态:published(全部内容已完成审核并发布)
