PSG-IPA:12 名技师对同一批睡眠记录的重判读

二十段多导睡眠图、四类判读任务、十二名技师、每人四十次判读,把「读图这件事本身有多少不确定性」变成了可以计算的数字

来源 Haaglanden Medisch Centrum / PhysioNet发布时间: 2026-10-19最后更新: 2026-10-20 阅读 14
PSG-IPA:12 名技师对同一批睡眠记录的重判读

信息速览

数据集名称PSG-IPA:12 名技师对同一批睡眠记录的重判读
数据类型多导睡眠图,睡眠分期,判读者一致性,脑电觉醒,腿部运动,呼吸事件,EDF+
规模20
接入方式Haaglanden Medisch Centrum / PhysioNet
AI 就绪度

PSG-IPA 想回答的不是「怎么把睡眠分好期」,而是更靠前的一问:同一段记录摆在十来个技师面前,会读出多大分歧。为把分歧变成可计算的数,研究者从海牙医学中心二〇一九年全年两千八百零一段记录里挑出二十段,四类任务各五段,请十二名资深技师盲态下各判一遍,再在计算机辅助下判一遍,两次间隔至少四个月。

为什么值得单独成条。睡眠分期的「金标准」一直是人读出来的,而人读出来的东西有分歧。这个分歧有多大、分歧在哪些任务上更严重、计算机辅助是缩小还是扩大了分歧,这三件事在公开数据里长期只有论文层面的描述,没有可以自己动手算的原始记录。PSG-IPA 把这些都放出来了:原始信号、十二个人各自的标注、自动算法的首过结果,一样不少。库内已有的睡眠数据(睡眠脑电、多中心队列的睡眠子集)都没有这一层——它们只给一个判读结果,或至多给两个评分者,没法算一致性。

怎么读这一页。想把自动分期算法与人类基线对齐的人,重点看 §2 与 §5,那里讲清了四十次判读的文件命名规则、两种设置的区别,以及「人类基线」这个说法本身的问题。想复现一致性统计的人,看 §4,那里给了任务级的文件数核算与几处文档写法需要留意的地方。只想知道它适不适合自己任务的人,看 §1 的边界与 §7 的定位。

§1 它是什么:二十段记录与十二个人的分歧

1.1 一句话定义与四条边界

PSG-IPA 是一份重判读一致性数据集:二十段临床多导睡眠图,四类判读任务,十二名睡眠技师,每人四十次判读,全部原始信号与标注以 EDF+ 与逗号分隔文本两种形式公开。

四条边界要说清。

第一,它记的不是「正确判读」,是「多个判读」。数据里没有一份被认定为正确答案的标注,只有十二份并存的人工标注与一份自动算法的输出。做监督学习时,你必须自己决定把哪一份、或哪几份的什么聚合当作标签。

第二,样本极小。二十段,每类任务五段。作者自己把这条写进了局限,理由是人工重判读的成本太高——十二个人四次判读同一批记录,等于四百八十次判读作业。这个规模做算法验证够用,做统计推断不够。

第三,全部技师来自同一家睡眠中心。这意味着分歧的估计里不含中心间差异,而临床上中心间差异往往比中心内更大。

第四,记录取自常规临床工作流,没有按信号质量筛选。这是优点(真实)也是难点(可能有质量不佳的片段,且没有质量标签)。

1.2 二十段记录是怎么挑出来的

候选池是海牙医学中心睡眠中心二〇一九年全年的记录,两千八百零一段。

从这两千八百零一段里,按四类任务各挑五段。挑选用的是一套自动程序,目的是降低选择偏倚、保证每类任务的记录在判读难度上有均衡的代表性。具体程序写在前作里,本页不重复。

除此之外没有排除标准——不因患者病情排除,也不因信号质量差排除。唯一的要求是这段记录当时已经被接受进入常规人工判读流程,也就是说它本来就是一份「临床上用的记录」。

这个设计有一个隐含的好处:它避免了「挑好读的」这种偏倚。也有一个隐含的代价:五段记录里若有信号质量特别差的,那类任务的一致性数字会被拉低,而这种拉低反映的是真实世界的分布。

1.3 四类任务各自的分歧结构不同

四类任务不是同一件事的四个难度档,是四种性质不同的判读。

睡眠分期是把整夜切成三十秒一帧,每帧给一个期(清醒、N1、N2、N3、快速眼动)。这是一个逐帧的分类任务,分歧以「帧级一致率」与「Cohen kappa」度量。分歧的典型来源是 N1 与清醒的边界、N2 与 N3 的边界(慢波占比是否达到百分之二十)。

脑电觉醒是在脑电上找突发的频率加快,持续三秒以上。这是一个稀疏事件检测任务,分歧体现在事件的起止时刻与是否算作事件。觉醒与分期的关系很紧——觉醒会打断睡眠,但觉醒本身不是期。

腿部运动是找胫骨前肌肌电上的周期性爆发。这是另一个稀疏事件任务,分歧在事件的幅度阈值与周期性判定(是否满足周期性肢体运动的序列标准)。

呼吸事件是找气流下降或停止,分阻塞性、中枢性、混合性。这是四类里最复杂的,因为它要联合气流、呼吸努力、血氧三条通道,还要判事件类型。分歧既在事件有无,也在类型。

四类任务放一起,才看得出「判读分歧」不是单一的量,它随任务性质变。这一点在做算法评价时很关键:一个算法在分期上接近人类一致性,不代表它在呼吸事件上也接近。

1.4 十二名技师与四十次判读

技师全部来自海牙医学中心,都是完成培训认证、日常独立参与科室判读工作的资深技师。未完成培训或仍在督导下的技师被排除。

每名技师要读:四类任务各五段,每段读两次(手动一次、半自动一次),共四十次判读作业。

十二人乘四十次,是四百八十次判读作业。

盲态设计有几层:技师不知道患者身份;技师看不到此前任何判读结果(包括常规工作流里别人的判读、也包括自己先前那次判读);技师甚至不知道手动与半自动两次读的是同一批记录。

最后这一条是这套设计里最讲究的地方。若技师知道「我上次读过这段」,会不自觉地去回忆上次怎么判的,从而人为提高一致性。不告知,等于把「同一个人的两次判读」也当成独立观测,这样算出的重测一致性才是干净的。

两次判读之间至少隔四个月。参照值是:在这四个月里,每名技师因科室日常工作平均还要读约七十段记录。四个月加七十段的间隔,足以让具体记忆褪去,但又不至于让判读习惯改变太多。

1.5 半自动到底自动到什么程度

半自动不是「算法判完人确认」,是「算法给一个初稿,人在初稿上改」。

流程是:先用特定的自动分析算法跑一遍,输出该任务的初步事件列表;技师在这个列表上增、删、修改起止时刻,按自己的判断调整。

这意味着半自动的结果里既有算法的贡献,也有人的贡献,两者无法分离。作者在局限里明确点出这一点:半自动数据受所用自动算法可靠性调制,换一套自动算法会得到不同数字。

这一点对使用者很重要。若你想用这份数据回答「计算机辅助能不能提高一致性」,答案只对这一套自动算法成立。

1.6 与其它睡眠数据的区别

公开的睡眠数据有几类。

一类是单中心或多中心的原始信号库,配一份人工判读,用于训练自动分期算法。这类最多,但只有一份标签,算不了一致性。

一类是带两三个评分者的子集,可以算粗略的评分者间一致性,但样本少,且评分者往往是研究助理而非临床技师。

PSG-IPA 属于第三类:专为一致性设计,十二个评分者、四类任务、两种设置、盲态、长间隔。这一类在公开渠道里极少,因为成本高。

§2 数据构成:四类任务、三层标注

2.1 目录与命名

数据按四类任务分目录:睡眠分期、脑电觉醒、呼吸事件、腿部运动。

每类任务下有两类文件:原始信号(每段记录一份 EDF+),标注(每段记录、每个技师、每种设置各一份)。

原始信号的文件名是「SN 加序号 加下划线 加任务标签」,例如第三段睡眠分期记录叫 SN3_SleepStages。序号在任务内计数,因此四个任务各有一到五号。

标注文件名在信号名后追加设置与技师编号,例如 SN2_Respiration_manual_scorer4,表示呼吸任务第二段记录、手动设置、第四号技师。同一份标注同时给 EDF+ 与文本两种形式,文本是逗号分隔。

记录已裁剪到去卧床标记前一分钟到起床标记后一分钟。这个裁剪意味着文件里不含白天清醒时段,只含夜间卧床期。

2.2 通道清单与采样率

全部按美国睡眠医学会的标准导联配置。

类别 通道 采样率
脑电 F4-M1、C4-M1(或以 Cz-M1 替代)、O2-M1 256 赫兹
眼电 E1-M2、E2-M2 256 赫兹
下颌肌电 颏下 256 赫兹
下肢肌电 左、右胫骨前肌 128 至 256 赫兹
心电 改良 II 导 256 赫兹
呼吸气流 鼻压 256 赫兹
呼吸努力 胸带、腹带 32 赫兹
血氧 血氧饱和度 4 赫兹

电极全部是银氯化银电极,脑电常用 Cz 作参考。信号是原始格式,除硬件自带的模拟预滤波之外没有额外数字滤波,具体的上下截止频率写在每份 EDF+ 文件头里。

这里有一处需要注意:文件头里的滤波参数在不同记录之间可能不同。文档说这些值「在任何情况下都不比美国睡眠医学会的技术建议更严格」——这句话的意思是硬件预滤波不会把医学会认为应该保留的频段切掉。做分析前应逐文件读头,不要假设所有记录用同一组参数。

采样率跨度从四赫兹到二百五十六赫兹,跨六十四倍。跨通道联合分析(比如用气流与血氧一起判呼吸事件)必须做重采样,而重采样方式会影响事件边界的判定精度。血氧只有四赫兹,意味着血氧下降的起点时间精度只有零点二五秒,判呼吸事件与血氧下降的关联时,这个精度是上限。

2.3 标注文件里有什么

标注文件是纯标注,不含信号(EDF+ 的标注专用变体)。

每份标注包含该任务该次判读的全部事件:事件类型、起始时刻、结束时刻。文本版本把这些摊成表格。

除技师自己的判读之外,标注文件里还带两类「上下文」信息。

第一类是去卧床与起床标记。这一类所有设置都有。对脑电觉醒、腿部运动、呼吸事件三类任务,还会预填睡眠分期图作为上下文——这是为了让技师判事件时有分期背景,避免因初始条件不同而产生分歧。技师不能改这些预填内容。

第二类是半自动设置下的自动初稿。半自动文件里预填了该任务自动算法的输出,技师在此基础上改。

这个预填设计有一个副作用:不同任务的文件里,预填内容不同。呼吸事件任务的预填最多,包括分期、觉醒、腿部运动三项;腿部运动任务的预填也包括其他三类。这意味着判呼吸事件时,技师其实看到了别人(或算法)判的觉醒与腿部运动。这提高了任务间的连贯性,但也让各任务的结果不再完全独立。

2.4 文件数的核算

文档给了一张任务级的文件数表。四类任务结构完全一致:

任务 原始信号 手动标注(EDF+) 手动标注(文本) 半自动标注(EDF+) 半自动标注(文本) 自动标注(EDF+) 自动标注(文本)
睡眠分期 5 60 60 60 60 5 5
脑电觉醒 5 60 60 60 60 5 5
呼吸事件 5 60 60 60 60 5 5
腿部运动 5 60 60 60 60 5 5

六十一份标注的来源是十二名技师乘五段记录。自动标注只有五份,因为自动算法不需要技师,每段一份。

合计:原始信号二十份,人工标注四百八十份(两类设置各两百四十),自动标注二十份,加上文本副本共一千份出头的标注文件。

这张表本身是一处可以用来核对的地方:拿到数据后数一遍各目录的文件数,若与表不符,说明发布时有出入。这是完全开放数据的好处——可以自己验。

2.5 自动算法从哪来

三个任务对应三个算法:睡眠分期、脑电觉醒、腿部运动、呼吸事件各一套,共四套。文档把各算法的来源指向此前发表的论文,本页不复述具体方法。

需要说明的是这些算法的角色。它们不是被评估的对象,是被当作「初稿生成器」使用的工具。它们本身的表现只在自动设置那五份文件里体现,而自动设置的结果没有经过技师修改,可以拿来看算法独立工作的水平。

这给了一个额外用法:把自动设置的二十份标注与十二名技师的手动标注分别比,就能看出算法落在人类分布的什么位置。这个比较文档没有做,但数据支持。

§3 怎么拿到:完全开放

3.1 访问与许可

访问政策是 Anyone can access,无需注册。许可为知识共享署名 4.0,可商用、可再分发、可改作,需署名。

这在生理信号数据里是少见的宽松。多数睡眠数据(尤其是临床来源的)是受限或需签协议的,原因是夜间的完整记录里含较多可识别线索。这份数据选择开放,推测是因为它已做了病历号的剥离、且样本量小到再识别风险可控——不过这一点官方未明说。

3.2 体量与读取工具

体量不大,二十段记录加一千份左右标注,属于可以直接下载到本地的规模。这一点与四十四吉字节那一类数据完全不同,用起来没有门槛。

读取工具有几种:

Polyman 是 Windows 专用,作者给了快捷方式说明——从文件菜单打开模板,选 PSG_IPA_db_quickcheck.xml,再选目标记录。这个模板文件是作者提供的,专门为这套数据配好了通道显示参数。

EDFbrowser 跨平台,适合逐段目视。

PhysioNet 的 LightWAVE 是网页端,选 PSG-IPA 作为输入库、选记录号就能在浏览器里看。

WFDB 软件包的命令行工具。文档指出 WFDB 库十点四点五版(二〇〇八年二月)以后的版本可以直接读 EDF。

对写代码的人,Python 的 MNE 或 pyedflib 都能读 EDF+,读标注需要用 MNE 的注释功能。

3.3 一处容易忽略的读取细节

EDF+ 的标注存在「标注通道」里,MNE 读进来会变成 annotations 对象,而不是普通信号通道。

若用 pyedflib 直接读,标注会以文本形式出现在一个特殊通道里,需要自己解析。这两种路径得到的结果一样,但代码写法差很多。

更麻烦的是,标注文件是「纯标注」文件,没有信号通道。部分读取库对这种文件支持不好,会报「没有信号」的错误。遇到这种情况,用 MNE 的 read_annotations 或 Polyman 打开,而不是 read_raw_edf。

3.4 署名与引用

许可是署名制,引用格式按官方给的即可。需要额外注意的是:这套数据背后的研究本身有一篇方法学论文,若引用的是「技师之间一致性」这个结论,应同时引数据与论文。

§4 质量:设计上的讲究与几处需要留意的地方

4.1 盲态与间隔做得扎实

这套设计在方法学上有几处明显用心。

盲态分三层:身份、他人判读、自己的前次判读。第三层最难做到,因为它要求实验者主动隐瞒「这是同一批记录」这个事实。做到了,重测一致性才有意义。

间隔至少四个月,且有量化参照(同期约七十段日常判读)。这个参照让「四个月够不够」这个问题有了可讨论的依据。

随机化:记录在任务内的顺序、技师判读的顺序,文档未详述是否随机化。这是一个可以追问的点,因为顺序效应在长时判读任务里存在。

4.2 半自动的顺序设计

半自动总是在手动之后。文档写的是「先用纯手动视觉分析,随后用计算机辅助半自动判读」。

这个固定顺序有一个隐含的混杂:第二次判读本身可能因为熟悉而更快更准(练习效应),也可能因为厌倦而更粗糙(疲劳效应),而半自动的效果与这个顺序效应混在一起,无法分离。

理想设计应当把顺序随机化,一半人先手动后半自动、一半人反过来。这套数据没这么做,因此「半自动是否提高一致性」这个问题的答案里,含着顺序效应的成分。

作者在局限里没有直接提这一点,但提了另一条相关的:半自动结果受算法可靠性调制。两条合起来,说明半自动那一栏的数字要谨慎读。

4.3 金标准这个说法的问题

作者在局限里写了一句很坦白的话:金标准隐含假设所有技师的判读同等有效,而这个假设有风险,因为没有明确公式能在专家之间选出「最佳参考」。

这句话值得展开。睡眠分期的临床实践里,一份判读被接受为「正确」的依据是它由认证技师做出、且符合学会手册。但十二名认证技师对同一段记录给出不同判读时,谁对?

有三种可能的立场。第一种是「都对」——分歧反映的是判读本身的不确定性,金标准应当是一个分布而不是一个点。第二种是「取多数」——多数票就是金标准。第三种是「有客观真值」——比如用其他生理指标(如行为觉醒、呼吸事件后的血压反应)来校验,但这类外部校验在这份数据里没有。

这份数据支持前两种立场,不支持第三种。用它训练模型时,选哪种立场会直接影响损失函数的设计:取多数票是硬标签,取分布是软标签或多人标注的集成。

4.4 样本量与小样本的具体后果

二十段记录,每类任务五段。这个规模对一致性统计意味着什么,值得算一下。

若用 Cohen kappa 衡量两名评分者的一致性,其标准误大致与样本量的平方根成反比。每类任务五段记录,若按帧算(三十秒一帧、八小时约九百六十帧),帧数够多,但帧之间高度自相关,有效样本量远小于帧数。

更实际的问题是:五段记录无法覆盖判读难度的全谱。若某段恰好特别难读,它对该任务一致性估计的影响会非常大,而五段里去掉一段,剩下的四段可能给出完全不同的数字。

这就是为什么作者要说「结果未必可推广到其他中心」。同一句话也适用于中心内部:五段的抽样误差本身就很大。

4.5 小样本下的一致性置信区间怎么估

一致性指标是一个估计量,就该给区间。这一点在二十段的规模上尤其不能省。

最简单的做法是自助法:把记录当作抽样单位,有放回地重抽二十段(或每类任务内重抽五段),每次重算指标,取百分之二点五与九十七点五分位。要点是重抽的单位必须是记录,不能是帧。若按帧重抽,就把帧当成了独立样本,而这批数据里同一帧序列的相关性极强——一夜之内相邻帧几乎必然同期,按帧自助会把区间压窄到一个数量级都不止。

帧的自相关有多强,可以用设计效应粗略估:把整夜切成若干段互不重叠的块(比如每块五分钟),块内视为完全相关、块间视为独立,有效样本量约等于帧数除以每块的帧数再乘以块间的相关系数修正项。八小时、三十秒一帧是九百六十帧,若按五分钟一块,只剩九十六个近似独立的块;若块内相关接近一,有效样本量就掉到接近块数。这意味着「九百六十帧」给出的精度,实际相当于「不到一百个独立观测」,标准误要放大约三倍。

还有两个更麻烦的点。其一,kappa 的抽样分布不对称,尤其当一致性很高或很低、且边际分布严重不均时,正态近似给出的区间会越界(下界落到负一以下、上界超过一)。要么用偏差校正的自助法(BCa),要么在报告里明确说明区间是近似值。其二,四类任务各自只有五段,任务级 kappa 的区间会非常宽,宽到足以让「分期的一致性高于呼吸事件」这类比较失去统计意义。想让这个比较站得住,只能看配对差值的区间(同一批记录上两种任务的一致性之差),而不是看两个各自区间是否重叠——后者是常见但错误的比较方式。

因此本页对这份数据的一致性结论一律加一句限定:数字本身可复现,区间要靠自助法自己算,且算的时候重抽记录、不重抽帧。

4.6 中心单一带来的外推限制

全部技师来自海牙医学中心,全部记录也来自那里。这意味着两件事同时被固定:判读习惯与病例构成。

判读习惯的固定影响一致性。同一科室的技师长期一起工作、一起培训、一起讨论疑难病例,判读标准会趋同。跨中心的技师分歧通常更大,因为各中心对边缘情形的处理不同(比如 N1 与清醒的边界、呼吸事件的持续时间阈值)。

病例构成的固定影响难度分布。单中心的病例组合有偏,这份数据的结论不能直接搬到病例结构不同的中心。

4.7 文档与数据之间需要自行核对的两处

第一处是任务内的记录编号。文件名用 SN 加序号,序号在任务内计数。这意味着 SN1_SleepStages 与 SN1_EEGarousals 是两段不同的记录,而不是同一段记录在两个任务里。若按序号做跨任务连接,会把不同患者的记录拼在一起。

第二处是「五段记录」这个说法。四类任务各五段,且文档明确说每名技师读的是「该任务涉及的五段记录」。但二十段记录之间是否有重叠——也就是说,是否某一段记录同时被用于两个任务——文档没有明确否认。从「按任务各挑五段」的表述看,应当是二十段互不相同的记录。这一点可以用文件名核对:若四类任务下的记录头文件里患者信息完全不同,则无重叠。

4.8 数据可用性评价

优点:原始信号完整且未加额外滤波(可自行设计预处理);标注同时给 EDF+ 与文本两种格式(读取门槛低);十二名评分者的独立判读(一致性分析的核心);盲态与长间隔设计(重测一致性可信);半自动与自动两种对照(可评估辅助效果);完全开放(无需申请)。

缺点:样本极小;单中心;半自动与手动顺序固定;无外部客观校验;无信号质量标签;无跨中心数据。

一句话:它是一份设计精良但样本受限的方法学数据,价值在于「怎么算一致性」而不是「一致性是多少」。

§5 能做什么:五类用法与实现要点

5.1 用法一:给自动分期算法定人类基线

这是最直接的用法。

做法是:拿一段记录,用你的算法判一遍,再用十二名技师的判读算一个「人类之间的一致性」作为参照,看你的算法与人类的一致性是否落在这个范围内。

实现上要选一个一致性指标。常用的有三类:逐帧一致率(简单但不校正机遇)、Cohen kappa(两名评分者)、Fleiss kappa 或多评分者 kappa(多名评分者)。

关键点在于:算法与人类的一致性,与人类之间的一致性,两者的比较必须用同一指标、同一数据切分。若人类之间用 kappa、算法与人类用一致率,比较就没有意义。

另一个关键点:与谁比。若与十二人中的某一个比,结果取决于抽到谁;若与多数票比,多数票本身是聚合结果,其一致性会高于任何单个个体。稳妥做法是把十二人两两配对的分布算出来,看算法落在分布的哪个分位。

5.2 用法二:量化四类任务的难度差异

四类任务的一致性数字可以直接比较,从而给「哪种判读更难」一个定量答案。

比较时要注意指标的可比性。事件检测任务(觉醒、腿部运动、呼吸事件)与逐帧分类任务(分期)的样本单位不同:前者是事件,后者是帧。事件级一致性可以用 F1 或 Jaccard 衡量(需要先做事件匹配,允许一定时间容差),帧级用 kappa。

时间容差的选择会显著影响事件级一致性。同一事件两人判的起点差三秒,容差取五秒算匹配、取一秒算不匹配。这个参数必须写清,否则结果不可比。

5.3 用法三:评估计算机辅助的真实收益

数据里手动与半自动两套标注都在,可以直接比。

做法是:分别算手动设置下技师之间的一致性、半自动设置下技师之间的一致性,看后者是否更高。

前面说过,这个比较含顺序效应,因此结论只能说「在这套流程下,半自动之后的一致性是多少」,不能说「半自动提高了一致性多少」。

更有意义的做法是看半自动是否缩小了分歧的方差而不只是均值。若半自动把所有人的判断都拉向算法输出,一致性会升高,但这升高来自「大家都跟着算法走」,不是来自「判断更准」。这种一致性升高在临床上是危险的——它把算法偏差变成了集体偏差。

要检验这一点,可以看半自动设置下技师标注与算法初稿的偏离程度。若偏离很小,说明技师基本没改,一致性升高是假的。

5.4 用法四:半自动标注作为弱监督数据

半自动标注有一个实际用途:它可以当作「算法加人工修正」的弱标签,用来扩充训练集。

逻辑是:自动算法给出初稿,技师修正过的版本比纯自动输出更接近人工判读,但又不必承担完整人工判读的成本。若你有大量未标注数据,可以先用算法跑一遍再人工快速修正,得到一批近似人工质量的标签。

这份数据提供了一个校准点:在半自动设置下,技师平均改了多少、改在哪些地方。这个量可以用作弱标签质量的先验。

5.5 用法五:技师培训的基准

作者列出的用途之一是培训与评估技师的判读一致性。

用法是:让受训者读这二十段,把结果与十二名资深技师的分布比,看受训者落在什么位置。

这个用法有一个前提:受训者的判读要与资深技师的判读在同样的条件下做出(同样的软件、同样的上下文预填)。若条件不同,差异会混入流程差异。

5.6 DAIMS 24 项检查

维度 项 判定
文档 数据字典 是(通道清单、采样率、文件命名、标注层级均逐项写明)
文档 采集协议 是(设备型号、导联配置、判读流程、盲态与间隔全部交代)
文档 设备规格 是(采集硬件、电极类型、参考电极齐全)
文档 标注规范 是(按学会手册与另一份运动判定手册,逐任务指明标准来源)
文档 版本历史 部分(有一版,无变更记录)
文档 许可说明 是(知识共享署名 4.0)
文档 引用格式 是(含 DOI 与 RRID)
文档 局限披露 是(四条,写得具体,含金标准假设那条)
质量 缺失披露 部分(未逐文件列缺失片段,靠使用者自查)
质量 信号质量说明 否(未提供逐段信号质量评分或伪差标注)
质量 一致性检验 是(这正是数据集主题,十二名评分者)
质量 记录数一致性 是(任务级文件数表可逐项核对)
质量 编号一致性 是(命名规则统一,任务内序号一致)
质量 采集环境说明 是(睡眠中心实验室,单中心已声明)
公平 人群构成 部分(给了年龄中位数与四分位、性别比例、卧床时长,未给种族与合并症)
公平 机构来源 是(单中心,已明确声明为局限)
公平 亚组表现 否(未按年龄或性别分层报一致性)
公平 偏倚讨论 是(明确讨论选择偏倚控制、中心单一的外推限制)
可复现 代码可用 否(未附分析脚本,仅指名所用的判读软件)
可复现 环境说明 是(硬件、软件、格式版本均写明)
可复现 随机种子 不适用(无随机过程)
可复现 结果可重算 是(原始信号与全部标注齐全,一致性可自行重算)
治理 伦理审批 是(记录取自常规临床流程,已声明)
治理 再分发约束 是(署名即可再分发)

统计:是 15 项,部分 6 项,否 3 项,不适用 1 项。

三项判否里,信号质量说明那条最值得说:它不是格式问题,而是这份数据的设计选择——不筛质量的目的是保留真实分布,代价是使用者无法把「读不准」与「信号差」分开。这一条在 §6.4 会再提。

§6 常见误读与引用陷阱

6.1 误读一:把十二份标注当十二个正确答案

数据里没有正确答案。十二份人工标注是十二个判断,它们的分歧本身是研究对象。

若在论文里写「本数据的标注由十二名专家共同确认」,就是错的。正确写法是「十二名技师独立判读,一致性以某某指标衡量为某某值」。

6.2 误读二:把任务内序号当跨任务索引

SN1_SleepStages 与 SN1_EEGarousals 是两段不同记录。任务内序号从一数起,四个任务各有一套。

按序号做跨任务连接会把不同患者的记录拼在一起,这类错误在代码里很隐蔽,因为不会报错,只会得到奇怪的统计结果。

6.3 误读三:忽略半自动的顺序混杂

半自动总在手动之后。这个固定顺序让「半自动的效果」与「第二次判读的练习效应」混在一起。

引用「半自动提高了多少一致性」时,必须带上这个限制。若论文里直接写「计算机辅助使评分者一致性提高百分之若干」,越过了原始设计能支持的因果强度。

6.4 误读四:把判读分歧当成判读错误

分歧不一定是错误。两名技师对同一边界帧给出不同期,可能两边都合理,因为标准本身在边缘情形留有裁量空间。

把分歧直接当错误,等于预设了一个正确的判读存在。作者在局限里已经说了这个假设有风险。

6.5 误读五:以为信号做过预处理

信号是原始的,除硬件模拟预滤波外没有额外数字滤波。

若直接拿去做频域分析,会发现低频漂移明显。若拿去做肌电幅度分析,会发现工频干扰在不同记录上程度不同。这些都需要自己处理,不能假设数据已清洗。

6.6 误读六:用这二十段训练生产模型

二十段记录训练不出可用的模型。这份数据的用途是评估与校准,不是训练。

若一定要用,只能当作微调集或外部验证集,且必须声明样本量与来源。

6.7 引用时必须写清的五件事

项 必须写的内容
规模 二十段记录,四类任务各五段,十二名技师,每人四十次判读
来源 海牙医学中心睡眠中心单中心,二〇一九年病例,全部取自常规临床流程
设计 盲态三层,手动与半自动间隔至少四个月,半自动固定在后
指标口径 所算的一致性指标、事件级容差参数、多人聚合方式
局限 金标准假设、样本量、单中心、半自动受算法调制

§7 在生态中的位置

7.1 与大规模睡眠信号的互补

库内已有的大规模睡眠数据(睡眠脑电类、多中心队列的睡眠子集)价值在规模,可以用来训练。它们的短板是没有多评分者标注。

PSG-IPA 正好补这块:规模小,但有多评分者。两者配合的方式很自然——大规模数据训练,PSG-IPA 校准与评估。

7.2 与「自动分期挑战」类数据的分工

有些数据以竞赛形式发布,规则统一、评分明确,目的是排名。

PSG-IPA 不是竞赛数据。它没有官方划分、没有提交服务器、没有排行榜。它的目的是让人自己算一致性,因此更开放也更不标准化。

7.3 在临床判读质量体系里的位置

睡眠中心的判读质量通常靠内部复核(同事互查)与外部认证(定期能力测试)维持。这两者都需要一个「分歧有多大算正常」的基准。

PSG-IPA 提供的就是这种基准。二十段、十二人、四类任务,可以拿来当科室内部的参照集。

7.4 规模上的定位

二十段在公开睡眠数据里属于很小的。这个规模是设计约束的必然结果——每增加一段记录,就要增加十二乘二次判读作业,成本线性上升。

作者把这条写进局限,说明他们清楚这个取舍。使用者应当接受这个取舍,而不是要求它更大。

7.5 适合谁用

适合:开发自动睡眠分期或事件检测算法、需要人类基线做参照的团队;研究判读一致性的方法学研究者;睡眠中心做内部质量评估的人;需要一份小体量、可完全下载的睡眠数据做教学的人。

不适合:需要大数据训练的人;需要跨中心泛化结论的人;需要信号质量标注的人;需要客观真值而非人工判读的人。

§8 判读一致性怎么算:口径与陷阱

8.1 三种常用指标

逐帧一致率是最直观的:两人判同一帧得到同一期的比例。缺点是不校正机遇一致——若某期在整夜里占八成,两人随便判都有八成契合。

Cohen kappa校正了机遇:把观测一致率与期望一致率(按边际分布算)比较。取值范围从负一到一,零表示与随机无异。缺点是对边际分布敏感——若两人的边际分布差很大(一人判很多 N1、一人判很少),kappa 会被压低,即使实际一致率高。

Krippendorff alpha 或 Fleiss kappa 用于多名评分者。Fleiss 要求每名评分者评的样本相同(本数据满足:十二人都读同样五段)。Krippendorff 更灵活,可处理缺失。

选择哪个,取决于论文要回答什么。若只想描述一致程度,kappa 够用;若要比不同任务难度,要注意不同任务的边际分布差异会让 kappa 不可比。

8.2 事件级一致性的匹配问题

事件检测任务(觉醒、腿部运动、呼吸事件)不能按帧算一致性,必须先做事件匹配。

标准做法是:对两人判的事件列表,按时间重叠或起点距离做贪心匹配。匹配上的算真阳性,没匹配上的算假阳性与假阴性,再算 F1。

这里的自由度在容差。觉醒事件的起点通常允许几秒误差,因为觉醒的起始本身是渐变的。呼吸事件的容差通常更宽,因为气流变化的起点难精确定位。

容差必须在文献的方法部分写清,且同一篇论文里不同任务应使用不同的、有依据的容差。

8.3 事件匹配的四种算法与各自的偏置

「按时间重叠做贪心匹配」这句话背后至少有四种实现,它们在同一批数据上会给出不同的 F1,差别不在小数点后第二位。

起点贪心:把两人事件按起点排序,依次找容差窗口内最近的未匹配事件。实现最简单,但对长事件不利——一个长觉醒后面跟着一串短觉醒,前者的窗口可能把后者的候选吞掉。

重叠时长贪心:按重叠时长从大到小依次配对。比起点贪心稳,因为时长接近的事件自然配在一起;代价是要先算全量重叠矩阵,事件数上千时明显变慢,而呼吸事件一夜可以有几百个。

匈牙利算法(最优一一匹配):在容差图上求最大权匹配,结果是全局最优。它消除贪心的顺序依赖,但会系统性地高估一致性——最优匹配倾向于把本不该配对的事件也配上,尤其在事件密度高、容差宽的区段。用它算出的 F1 通常比贪心高几个百分点,这个差不是算法好坏,是匹配口径不同。

中点距离阈值:只判两个事件的中点距离是否在阈值内,不看重叠。它对事件长度的变化不敏感,适合长度差异大的任务(呼吸事件从十秒到一分钟不等),但对「一个长事件被切成两个」这种情形会重复计数。

选哪一种没有普适答案,但有三条实践规则:同一篇论文里所有方法必须用同一种;容差与算法要一起报告,不能只报容差;跨研究比较时先确认对方用的是哪种,否则数字不可比。若要做敏感性分析,把这四种都跑一遍、报告 F1 的极差,比只报一个数字诚实得多。

8.4 多评分者的聚合方式

十二名评分者,聚合方式有三种常见选择。

多数票:每帧或每事件取出现次数最多的类别。简单,但边缘情形下会出现平票(如六比六),需要额外规则。

共识:先让评分者讨论达成一致。本数据不是共识数据,不能这么做。

分布式金标准:不做聚合,直接用十二份标注算软标签(每类的比例作为概率)。适合训练概率模型,不适合算单一准确率。

选哪种取决于下游任务。训练分类器用软标签更合理,因为它保留了分歧信息;算准确率必须有硬标签,那就得选多数票并声明平票规则。

8.5 重测一致性怎么用

同一个技师手动与半自动两次判读,可以算重测一致性。但这个数字混杂了设置差异与时间差异。

要单独估计时间因素,需要同一设置下重复判读的数据,本数据没有(手动只做了一次)。

因此本数据的重测一致性只能算「跨设置」,不能算「同设置跨时间」。这个区别在引用时必须讲清。

§9 术语与口径速查

术语 本页用法
多导睡眠图 夜间同步记录脑电、眼电、肌电、心电、气流、呼吸努力、血氧的检查
睡眠分期 把整夜切成三十秒一帧并给每帧标期,按期标准分清醒与四期
脑电觉醒 脑电上突发的频率加快,持续三秒以上,是睡眠被打断的电生理标志
腿部运动 胫骨前肌肌电上的短暂爆发,周期性出现时构成周期性肢体运动
呼吸事件 气流下降或停止,分阻塞性、中枢性、混合性,需联合气流与呼吸努力判定
评分者一致性 多名评分者对同一批样本给出判断时的吻合程度
kappa 校正机遇一致后的一致性系数
半自动判读 在自动算法初稿上人工增删改的判读方式
盲态 评分者不知道样本身份、他人结果、自己前次结果的状态
学习效应 重复判读同一批样本时因记忆导致的一致性虚高
卧床时长 去卧床标记至起床标记之间的时长,本数据记录已按此裁剪

§10 事实清单与附录

10.1 核心事实

项 值 来源
全称 PSG-IPA: A PolySomnoGraphic Inter-scorer Performance Assessment database 条目页
记录数 20 段 条目页
任务数 4 类(睡眠分期、脑电觉醒、呼吸事件、腿部运动) 条目页
每类任务记录数 5 段 条目页
技师数 12 名,均来自同一中心 条目页
每人判读次数 40 次(5 段 × 4 任务 × 2 设置) 条目页
判读作业总数 480 次(12 × 40) 本页计算
两次判读最小间隔 4 个月 条目页
同期日常判读量 每人约 70 段 条目页
候选池规模 2,801 段(2019 年全年) 条目页
采集硬件 SOMNOscreen plus(SOMNOmedics) 条目页
脑电采样率 256 赫兹 条目页
呼吸带采样率 32 赫兹 条目页
血氧采样率 4 赫兹 条目页
记录裁剪 去卧床前 1 分钟至起床后 1 分钟 条目页
许可 知识共享署名 4.0 条目页
DOI 10.13026/esx0-nw71 条目页
访问 开放,无需注册 条目页
年龄中位数 57.0 岁(四分位 51.8 至 61.5) 条目页表 1
男性比例 12 人(60%) 条目页表 1
卧床时长中位数 7.3 小时(四分位 7.0 至 8.0) 条目页表 1

10.2 四类任务的分组特征

任务 段数 年龄中位数 男性 卧床时长中位数
睡眠分期 5 52.0(47.0–57.0) 5(100%) 7.5(7.4–8.0)
脑电觉醒 5 55.0(52.0–63.0) 3(60%) 8.1(7.2–8.2)
呼吸事件 5 59.0(57.0–61.0) 3(60%) 6.5(6.4–7.4)
腿部运动 5 57.0(51.0–68.0) 1(20%) 7.3(7.0–7.3)
全部 20 57.0(51.8–61.5) 12(60%) 7.3(7.0–8.0)

10.3 文件命名速查

用途 模式 示例
原始信号 SN 序号_任务 SN3_SleepStages.edf
手动标注 EDF+ SN 序号_任务_manual_scorer 编号 SN2_Respiration_manual_scorer4.edf
手动标注文本 同上,扩展名 .txt SN2_Respiration_manual_scorer4.txt
半自动标注 同上,设置换 semi-automatic SN2_Respiration_semi-automatic_scorer4.edf
自动标注 SN 序号_任务_automatic SN2_Respiration_automatic.edf

10.4 附录 A:算一次多评分者分期的最短代码

下面这段按「读十二份标注、对齐帧、算 Fleiss kappa」的顺序写。假设已把某段睡眠分期记录的五段(一条记录)的十二份标注读成事件列表。

import numpy as np
import mne
from statsmodels.stats.inter_rater import fleiss_kappa

path = 'SleepStages/SN1_SleepStages_manual_scorer{}.edf'
ann = [mne.read_annotations(path.format(i)) for i in range(1, 13)]

-- 帧网格:30 秒一帧,总长取所有标注覆盖范围
dur = max(a[-1]['onset'] + a[-1]['duration'] for a in ann if len(a))
n_frames = int(np.ceil(dur / 30))

-- 每名技师每帧给一个标签,未覆盖的记为清醒以外的未知
labels = sorted({d['description'] for a in ann for d in a})
lab2i = {l: i for i, l in enumerate(labels)}

-- 构造 帧 x 技师 的标签矩阵
M = np.full((n_frames, len(ann)), -1, dtype=int)
for j, a in enumerate(ann):
    for d in a:
        f0 = int(d['onset'] // 30)
        f1 = int(np.ceil((d['onset'] + d['duration']) / 30))
        M[f0:f1, j] = lab2i[d['description']]

-- 丢掉有人未标注的帧
ok = (M >= 0).all(axis=1)
M = M[ok]

-- Fleiss 要求 类别计数表,行是样本、列是类别
table = np.zeros((len(M), len(labels)), dtype=int)
for i, row in enumerate(M):
    for v in row:
        table[i, v] += 1

print('有效帧', len(M), '类别', labels)
print('Fleiss kappa', round(fleiss_kappa(table), 4))

三处要注意。第一,标注的 description 里可能有分期之外的标签(如去卧床标记),要先过滤掉。第二,帧边界若不在三十秒整数倍上,需要先把标注对齐到帧网格,本段用整除近似,精度要求高时应改成按重叠时长判定。第三,Fleiss 要求每帧的评分人数相同,因此必须丢掉有人未标注的帧,这会损失样本,损失比例要在结果里报告。

10.5 附录 B:六个可立即验证的疑问

第一,四类任务下的二十段记录是否有重叠。逐个读头文件里的患者信息与记录长度,若四类任务各自的五段记录在患者层面完全不相交,则确认无重叠。

第二,各目录实际文件数与文档表是否一致。逐目录数文件,与 §2.4 的表比。

第三,半自动标注与自动初稿的差异有多大。对同一段记录同一任务,比较 semi-automatic 与 automatic 两份标注的事件数差,可以估出技师平均改了多少。

第四,十二名技师的手动标注两两 kappa 的分布范围。这个分布是判断算法是否「像人类」的参照。

第五,事件级一致性对容差的敏感度。同一批事件,用一秒、三秒、五秒三种容差算 F1,看排序是否变化。

第六,信号质量差的片段占比。可以用肌电与脑电的高频能量做粗略筛查,看各任务记录是否有明显坏段。

10.6 附录 C:证据链

事实 出处 核对方式
20 段记录、4 类任务、各 5 段 条目页方法段 直接读取
12 名技师 条目页方法段 直接读取
每人 40 次判读 条目页方法段(5×4×2) 直接读取,本页复算
480 次判读作业 本页计算 12×40
间隔至少 4 个月 条目页方法段 直接读取
同期约 70 段日常判读 条目页方法段 直接读取
候选池 2,801 段 条目页方法段 直接读取
各任务文件数 条目页文件数表 直接读取,可下载核对
采样率清单 条目页数据描述 直接读取
裁剪至标记前后 1 分钟 条目页数据描述 直接读取
年龄与性别分布 条目页表 1 直接读取
四条局限 条目页使用说明 直接读取
半自动固定在手动之后 条目页方法段 直接读取,顺序效应为本页推断

编辑说明

本页基于 PhysioNet 条目页(2026-10-19 取)写成,未下载数据本体。§2.4 的文件数表与 §10.2 的分组特征表均据页面原文整理,可用下载后的目录清点核对。

凡属分析性判断的段落,均为基于公开材料的推断,非官方结论:§1.5 关于半自动含算法与人双重贡献的说明、§4.2 关于固定顺序造成混杂的分析、§4.4 关于样本量后果的推算、§8 关于一致性指标选择与陷阱的讨论、§10.4 代码中的帧对齐近似。这些内容引用时请注明是分析而非原文。

页面未提供的项目:各记录的信号质量评分、跨中心数据、技师判读顺序是否随机化、半自动与手动两次判读各自耗时的具体统计。§10.5 列的六个疑问是留给下载后自行核对的项。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • hmc-sleep-staging — 共享标签:睡眠信号 / 脑电信号 / 评测基准
  • capsleep — 共享标签:睡眠信号 / 脑电信号 / 评测基准
  • boas-bitbrain — 共享标签:睡眠信号 / 脑电信号 / 评测基准
  • cinc-2018-sleep-arousal — 共享标签:睡眠信号 / 脑电信号 / 评测基准
  • sleep-edf — 共享标签:睡眠信号 / 脑电信号
  • isruc-sleep — 共享标签:睡眠信号 / 评测基准
  • mass — 共享标签:睡眠信号 / 脑电信号
  • deap — 共享标签:脑电信号 / 临床文本
  • blue-benchmark — 共享标签:评测基准 / 临床文本
  • dreamt — 共享标签:睡眠信号 / 评测基准

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集