信息速览
1991 年,一批研究者在找一个"既复杂又没法被反驳"的公开考题来验证时间序列预测方法。合成序列不合适——生成方程已知,预测到百分之九十九也说明不了什么;金融序列不理想——外部驱动太多,无法判断模型学到的是动力学还是噪声;单变量的经典例子也多半不够用,因为它们回答不了"多个变量怎么互相牵动"。真正稀缺的是一段来自真实受试者、多变量同步、足够长、且被同领域公认还算干净的连续记录——三个条件同时成立的例子,在当时几乎没有第二个。
MIT 的人给出的答案是:从睡眠实验室里拿一夜。这些数据来自波士顿 Beth Israel Hospital(今 Beth Israel Deaconess Medical Center)睡眠实验室的一名患者,原属于 MIT-BIH 多导睡眠库的 slp60 记录,被抽出三列——心率、胸容积、耳部血氧浓度——按 0.5 秒一格重排,切成两个纯文本文件,送进当年的圣菲时间序列竞赛(Santa Fe Time Series Competition)。三十多年之后,它仍然挂在 PhysioNet 上,版本 1.0.0,DOI 是 10.13026/C20W2T,整个数据集压缩后 573 KB。官方对它的正式写法是 Santa Fe Time Series Competition Data Set B,中文表述为圣菲时间序列竞赛数据 B。
它的价值不在体量。三列、一个人的一夜、两个文本文件,连"数据可否训练模型"这个问题都不成立。它真正稀缺的地方在于:这是一个被官方逐字交代了来路、加工方式与缺陷的小样本——心率怎么来的、呼吸那两列为什么不能直接当物理量、哪一段时间传感器被拔掉、1991 年说明书里写错的一句话后来怎么被订正,项目主页全都写清楚了。绝大多数同类型的小数据集不会把这类信息写在明面上。下面的一屏速览把可核验的规模、结构与边界三类数字一次给全,读完再决定要不要下载。
| 维度 | 内容 |
|---|---|
| 全名 | Santa Fe Time Series Competition Data Set B |
| 发布方 | PhysioNet(由 MIT Laboratory for Computational Physiology 维护) |
| 首次发布 | 2000 年 1 月 6 日,版本 1.0.0 |
| 数据本体时间 | 1991 年提交给圣菲时间序列竞赛;两个文本文件的时间戳同为 2000-01-06 |
| 最近改动 | 2019 年 2 月 20 日(SHA256SUMS.txt 更新,本体文件未变) |
| 记录数 | 1 份记录,按先后顺序切成 b1.txt 与 b2.txt 两个文本片段 |
| 受试者数 | 1 名(MIT-BIH 多导睡眠库记录 slp60 的患者) |
| 参数通道 | 3(心率、胸容积即呼吸力度、血液氧浓度) |
| 采样率 | 每行代表 0.5 秒,等效 2 Hz;三列同时采样 |
| 原始来源 | MIT-BIH 多导睡眠库记录 slp60;原始 PSG 为 250 Hz |
| 文件格式 | 纯文本,每行三个数值,空格分隔;非 WFDB 格式 |
| 总体积 | 未压缩 573.0 KB;打包下载 573.5 KB |
| <|hy_place▁holder▁no▁813|>标注 | 官方给出的两套睡眠分期表(最初提交版与修正版),W / 1 / 2 / R 四类 |
| 许可 | Open Data Commons Attribution License v1.0(ODC-BY 1.0),免注册 |
| 典型用途 | 时间序列预测与表征方法、心率变异性动力学、呼吸性心律不齐耦合分析、呼吸暂停发作预测 |
§1 它要解决的具体麻烦
1.1 一个问题三组答案:1991 年那批人到底想问什么
官方页面把背景交代得很直白,追溯起来是一个三问结构。第一问是心率的那条序列里,随时间出现的起伏当中,有多少能被一个"低维机制"解释,又有多少只能算噪声或外部输入。第二问是心率、呼吸率与血氧浓度三者的演化如何彼此影响——官方特别点出,呼吸与心率之间那种被称作呼吸性心律不齐(respiratory sinus arrhythmia)的相关几乎总能观察到。第三问最贴近临床:能否用发作前的数据预测睡眠呼吸暂停的发作。
官方在"为何选它"里给了三条理由,正好解释这三问。心率变异性:当时有(但仍存争议的)证据表明心率的变化可能与某种低维的支配机制有关,弄清它不是学术游戏,因为要理解它的失效(心梗)就必须先理解它本身。多维:同一时刻测到多个可能相互作用的变量,"如何最好地利用这些额外信息去认识变量之间的相互作用"在当时是开放问题,尤其需要验证并理解呼吸与心率之间的耦合。非平稳:这套数据是用尽可能认真的态度录的,但实验系统本身(睡着的人)显然是非平稳的;成功的分析必须尝试把"内部动力学"和"受试者状态变化"分开。
这三句话在今天读起来依然锋利,因为它把三条最常见的自欺方式一次性列出来了:拿一个内部行为的模型去解释全部起伏、把多变量当成多个单变量分别做、以及忽略一整夜里面人是在不断换状态的。
1.2 三条常见的错误期待
第一条,把它当成"可以训练深度学习模型的数据集"。它是一份一个人的序列,官方口径从头到尾没有把它描述为训练资源。任何在它上面谈样本量、谈训练验证划分的做法,从起步就错位了。
第二条,以为第二、第三列是有物理单位的物理量。官方原话是:呼吸与血氧数据以未经标定的模数转换器单位给出;这两个传感器会随时间缓慢漂移(因此偶尔由技师重新标定),也可能因为患者活动而脱落,因此它们的标定在整个数据集中不是恒定的。两句话合起来意味着:跨时间的绝对值与斜率都不可信,只有相对变化可以讨论。
第三条,以为它就等于原始的 slp60 多导睡眠记录。它是从 slp60 里"抽出"的三列,且呼吸与血氧是从 250 Hz 原始数据按窗口加工到 2 Hz 的产物。原始 PSG 里几十个通道(脑电、肌电、眼电、气流等)在这里一个都没有。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 多变量时间序列的方法验证 | 三列同步、行间隔固定 0.5 秒、非平稳真实记录 | 够,且官方把来路与缺陷写全 |
| 心率与呼吸耦合分析 | 心率列与胸容积列同时给出 | 够,这是它被问到最多的用途 |
| 呼吸性心律不齐的可视化教学 | 一列心率、一列呼吸同步显示即可看到 | 够,几乎不需要预处理 |
| 呼吸暂停发作预测 | 官方说患者有呼吸暂停,且给出了官方分期表 | 勉强——发作时刻本身没有逐事件标注 |
| 心率变异性的动力学指标 | 2 Hz 插值后的心率序列 | 谨慎,2 Hz 是插值产物,不是逐搏 RR 序列 |
| 睡眠分期模型的训练 | 只有一套粗粒度的分期标记 | 不够,粒度与通道都不支持 |
| 呼吸流量的定量分析 | 未标定的模数转换器单位 | 不够,物理量纲不可复原 |
| 人群层面的临床推论 | 仅 1 名受试者 | 完全不够 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在写时间序列预测方法,需要一个"没人能说你挑数据"的公开序列 | 提供一段真实世界的三变量非平稳序列,且被大量文献引用过 | 用 §5.3 读入后按行号建时间轴,把来路与失连窗口写进方法节 |
| 你在做呼吸与心率的耦合度量 | 同一时刻的心率与胸容积两列可以直接算互信息或传递熵 | 先剔除官方声明的传感器脱落窗口再算 |
| 你想证明某个非线性指标对非平稳性敏感 | 记录内含多次觉醒与分期切换,状态在变 | 用官方两套睡眠分期表做分段对照,注意两版不一致 |
| 你要一个"小到可以对每行用眼看完"的对照样本 | 全库仅两个文本文件,573 KB | 一次性读进内存,逐窗肉眼查看也可行(见 §5.6) |
| 你想做睡眠呼吸暂停预测 | 官方确认患者存在呼吸暂停现象 | 发作时刻必须自行定义并公开口径,不能默认官方给了标签 |
| 你要复现某个 1990 年代的经典结果 | 文件自 2000 年上线后未变,仍可下载到同一份字节 | 用官方给出的 sha256 校验码核对完整性 |
1.5 一句话判断
它不是一个训练集,是一道被完整交代了出题方式与错漏的"公开考题":三列、一行半秒、一个人的一夜,价值在于来路干净可控,而不在于数据量。
1.6 不适合谁:四条边界
不适合监督学习。 一名受试者、无多标签、无分组信息,任何"训练—验证—测试"的划分在这里都没有意义。它是范式迁移或因果耦合分析的素材,不是模型拟合的素材。
不适合求物理量的研究。 呼吸与血氧是未标定单位,且标定在夜内不恒定。想从这里得到"胸容积多少毫升"或"血氧饱和度百分之多少",官方明确给不出支撑。
不适合做呼吸暂停事件的严格评测。 官方描述了现象(呼吸几次后停住,最长可达 45 秒),但没有给出逐事件的起止标注。把"用户自己判定"的发作时刻当成金标准,是这类数据上最常见的做法错误。
不适合人群推断与临床结论。 单个受试者、单一睡眠实验室、三十年前的记录。它可以用来说明"存在这样一类动力学",不能用来说明"这类患者会怎样"。
§2 数据构成与规格
2.1 三个文件,再没有第四样东西
与其他 PhysioNet 数据集不同,这个库不含任何二进制信号文件,不含 WFDB 头文件,也不含 .atr 注释文件。整个数据集只有三样东西:
| 文件 | 大小 | 日期 | 内容 |
|---|---|---|---|
b1.txt |
284.4 KB | 2000-01-06 | 前半段序列,每行三个数值 |
b2.txt |
288.4 KB | 2000-01-06 | 后半段序列,紧接 b1.txt 之后 |
SHA256SUMS.txt |
144 B | 2019-02-20 | 两个文件的校验和,用于核对完整性 |
这种极简构成的直接后果是:没有元数据层。没有头文件告诉你采样率是多少、单位是什么、哪一列叫什么——全部这些信息只能回到项目主页的人类语言描述去找。换句话说,把两个 txt 拷走而不同时保存官方页面的人,拿到的就是三列没有语义的数字。这也是本文把官方描述原话逐条摊开的原因。
官方页面同时给出了三种下载方式:整包 ZIP(573.5 KB)、physionet download santa-fe --version 1.0.0 命令行,以及 AWS 开放桶同步命令(见 §5.2)。
2.2 字段字典:三列的来路与可信度
| 列序 | 参数 | 官方英文原名 | 量纲 | 加工方式 | 可信度边界 |
|---|---|---|---|---|---|
| 1 | 心率 | heart rate | 有单位的心率值,文本文件里以小数形式给出 | 由自动心搏检测器定位 QRS 复合波、测量 RR 间期、取倒数,再用 tach 插值成等间隔序列 |
官方称无异常心搏,心率的突然变化不是伪迹 |
| 2 | 胸容积(呼吸力度) | chest volume (respiration force) | 未经标定的模数转换器单位 | 原始 250 Hz 信号,在以心率采样时刻为中心的窗口里,把每一路信号的 20 个采样点(80 毫秒)求和后取一个代表值 | 传感器随时间缓慢漂移、被技师不定期重标定、可能被患者活动扯脱;标定在数据集内不恒定 |
| 3 | 血液氧浓度 | blood oxygen concentration(耳部血氧测定,by ear oximetry) | 未经标定的模数转换器单位 | 与第 2 列同法加工 | 同第 2 列 |
第 1 列的每一句话都值得拆开。它不是一个"原始测量",而是四级加工的产物:自动检测 → RR 间期 → 倒数 → 插值。插值的存在意味着所谓 2 Hz 心率序列上的每一个点,都不是在某个时刻"测到的",而是在某个时刻"算出来的"。做频谱或 Lyapunov 类指标的人必须知道这一点:插值会把一条不均匀采样的点列变成均匀序列,同时也悄悄改变了高频端的能量结构。
第 2、3 列的加工方式里藏着一条被官方标为"曾经写错"的事实,见 §4.3。
2.3 三列不同源:加工层级一览
把三列放在一起看,会发现它们的"地位"完全不对等。心率是经过四级加工、带有明确单位的二级产物;胸容积与血氧是加总后连单位都没有的三级产物。三者同步到同一行,但同步的含义只是"落在同一个 0.5 秒格子里"。
| 项 | 心率列 | 胸容积列 | 血氧列 |
|---|---|---|---|
| 原始采样率 | 由心电图导出,非等间隔 | 250 Hz | 250 Hz |
| 归到 2 Hz 的方式 | 取 RR 间期倒数后插值 | 20 点窗口求和 | 20 点窗口求和 |
| 单位是否可复原 | 是 | 否 | 否 |
| 夜内是否恒定标定 | —— | 否 | 否 |
| 是否存在官方声明的丢失窗口 | 同期受影响 | 有(约 4 小时 30 分至 34 分之间被断开) | 有(同上) |
所谓"窗口"指的是:以每个心率采样对应的时刻为中心,向两侧取一段时间,把落入该窗口的原始 250 Hz 采样求和。官方说原本计划取 20 个采样点,覆盖 80 毫秒。做涉及幅度的比较时(比如用胸容积幅值判断呼吸强弱),要牢记这个"求和"操作本身就是一次低通滤波——它的频率响应取决于窗口长度,而这一条官方没有给出更细的说明。
2.4 官方给出的两套睡眠分期表
官方页面用一整段给出了一份睡眠分期对照:前半是当年提交时随附的分期表,后半是后来修正过的版本,页面上原话是"The data given in the table above were those originally submitted; corrected data appear below."。分期记号的含义是:W 为清醒,1 与 2 为入睡/睡眠各期,R 为快速眼动睡眠。
| 版本 | 用途 | 使用注意 |
|---|---|---|
| 最初提交版 | 与 1991 年竞赛参加者所见一致 | 复现当年结果时用它 |
| 修正版 | 官方标注为 corrected data | 新建分析一律用它;两版在多个时刻不一致,交叉引用前必须指明版本 |
两套表的分行数量与分行时刻都不相同——这不是排版差异,而是判读修订。任何一个把"这一段处于 1 期"当作协变量的研究,都必须写明用的是哪一版;把它作为对齐依据与其他资料拼合时尤其危险。
2.5 与相邻资源的字段差异
| 对比项 | 本数据集 | MIT-BIH 多导睡眠库 slp60(母记录) | Apnea-ECG 挑战数据 | Fantasia 数据库 |
|---|---|---|---|---|
| 通道数 | 3 | 多通道完整 PSG | 心电为主并附呼吸记录 | 心电与呼吸 |
| 采样形态 | 每行 0.5 秒的标量三元组 | 原始连续波形 | 逐分钟事件标注加信号 | 连续波形 |
| 受试者规模 | 1 | 十余人 | 数十人量级 | 成年与老年两组 |
| 文件格式 | 纯文本 | WFDB | WFDB | WFDB |
| 是否有 PSG 分期 | 有(粗粒度表,两版) | 有 | 有分钟级呼吸暂停标注 | 无 |
| 主要用途 | 时间序列方法验证 | 睡眠分期与呼吸事件研究 | 呼吸暂停筛查 | 心率变异性分形动力学 |
这张表最该被注意到的一行是"格式"。本数据集是全站少见的、不带 WFDB 包装的纯文本数据集,它与上述几份数据都不共享同一套读取工具链。把它和 PSG 类资源放在一起做 pipeline 时,格式差异会成为第一道工程障碍。
2.6 三列各自的物理含义与误用陷阱
| 列 | 生理含义 | 常见误用 | 为什么错 |
|---|---|---|---|
| 心率 | 单位时间心跳次数,由心电图导出 | 当成可直接做频域 HRV 的 RR 序列 | 它是插值后的等间隔序列,不是逐搏间期 |
| 胸容积 | 呼吸时胸腔周径的变化,反映呼吸力度 | 当成呼吸流量或潮气量 | 未标定单位,且经 20 点求和加工 |
| 血氧浓度 | 耳部血氧测定得到的动脉血氧水平 | 当成血氧饱和度百分比 | 官方明确写的是未标定的模数转换器单位 |
第三列的陷阱最常被踩。耳部血氧在过去数十年里被大量研究指出存在肤色相关的系统性偏差(站内 ENCoDE 肤色相关资源也在讨论同类偏差),但本数据集连绝对标定都不具备,连"偏差多大"都无从谈起。用它做血氧相关结论时,只能讨论同一夜内的相对走向。
§3 它是谁的数据:一夜、一个人、一家睡眠实验室
3.1 贡献者与机构
官方页面把维护方标注为 MIT 计算生理实验室(MIT Laboratory for Computational Physiology)。数据本体来自 Beth Israel Hospital(今 Beth Israel Deaconess Medical Center)位于马萨诸塞州波士顿的睡眠实验室,原始记录是 MIT-BIH 多导睡眠库中的 slp60。
项目页面同时给出两条引用。数据集本身的技术描述见 Rigney、Goldberger、Ocasio、Ichimaru、Moody 与 Mark 六人合著的章节《Multi-channel physiological data: description and analysis》,收录于《Time Series Prediction: Forecasting the Future and Understanding the Past》(A.S. Weigend 与 N.A. Gershenfeld 编,Reading, MA: Addison-Wesley, 1993,第 105–129 页)。母库的来源文献是 Ichimaru 与 Moody 的《Development of the polysomnographic database on CD-ROM》,载于《Psychiatry and Clinical Neurosciences》第 53 卷第 175–177 页(1999 年 4 月)。
值得留意的一点:官方页面的"通讯作者"一栏写着必须登录后才能查看联系方式。这意味着想要"追问"这份数据的人,走的是 PhysioNet 的站内通道而不是一封公开邮件地址。
3.2 时间线
| 时间 | 事件 | 意义 |
|---|---|---|
| 1991 年 | MIT 研究组把这份三变量序列提交给圣菲时间序列竞赛 | 数据本体成形,并随竞赛扩散到学界 |
| 1993 年 | 描述该数据集的章节收录于《Time Series Prediction》论文集中出版 | 首次有正式文献交代加工方式 |
| 1999 年 4 月 | 母库 CD-ROM 论文发表 | 原始多导睡眠库的公开出处确立 |
| 2000 年 1 月 6 日 | 在 PhysioNet 上线,版本 1.0.0 | 从竞赛附件转为长期托管资源 |
| 2019 年 2 月 20 日 | SHA256SUMS.txt 更新 | 本体文件内容未变,仅补校验清单 |
| 2026 年 | PhysioNet 平台综述论文发表于 Nature Health | 托管的引用出口统一,检索面继续扩大 |
最后两行属于平台侧的运维与检索层面的观察,不是数据内容的变更;这里列出是为了说明它的身份从"竞赛附件"向"长期可用的方法学对照靶"迁移。
3.3 采集场景:一夜睡眠实验室里的传感器
官方原话先把场景框住:这是一份从 Beth Israel Hospital 睡眠实验室的一名患者身上录到的多变量数据集。接着给出临床背景——该患者表现出睡眠呼吸暂停,即一段时间里先快速呼吸几次,然后停止呼吸,最长可达 45 秒。
这句话里有三个可以被钉住的事实:第一,"表现出睡眠呼吸暂停"是官方给的临床描述,属于表型层面的定性断言,不是事件级标注;第二,"最长可达 45 秒"是官方给出的呼吸停止时长的量级,属于边界数字;第三,官方紧接着解释了它为什么重要——睡眠呼吸暂停会导致睡眠剥夺,偶可致死。
采集环境的另一个大抓手是非平稳。官方没有回避:尽管录制时尽可能认真,但实验系统(睡着的人)显然是非平稳的。这不是缺陷清单上的一条,而是这批数据被选定为竞赛题目的三条理由之一——见 §1.1 与 §4.2。
3.4 数据来源的三个层次
理解它要先分清三层:多导睡眠原始记录(母库 slp60,含脑电、心电、呼吸等原始通道)、三列 2 Hz 序列(本数据集,公开的基本单元,被切成两个文本文件)、官方叙述与两套睡眠分期表(公开的上下文)。第一层不在本数据集里,但它的存在解释了第二层为什么"只有三列"——不是当时的做法只测了三样东西,而是从一套更全的记录里被人为抽出三样。第三层是它区别于其他纯文本数据集的关键:一份把加工历史与已知错误都写下来的说明书。
§4 它最独特的东西
4.1 稀缺的不是数据,是"交代"
绝大多数小规模公开数据集的共同问题是沉默:给你一堆文件,其余自己猜。本数据集正好相反——573 KB 的数据配了近千字的高密度说明,逐条交代了每一列是怎么从原始信号变来的、哪些数值不能当真、哪一段时间传感器没连、以及一份被后来的核对者指出错误后修正的记录。
具体到可被使用的层面,这份"交代"至少覆盖四件事:心率是四级加工的产物(检测、间期、倒数、插值);呼吸与血氧不可标定(含漂移、重标定、脱落三种失效模式);失连窗口的时间位置(约第 4 小时 30 分至 34 分之间);官方对 1991 年说明书错误的订正(求和而非平均,且实际的求和方式与说明书所述并不完全吻合)。四件事里有三件是在削减它的用途,而这正是它可信的理由。
4.2 三个研究问题的当代读法
| 官方问题 | 1993 年语境 | 今天的读法 |
|---|---|---|
| 心率的时间变异中,多少能被低维机制解释,多少是噪声或外部输入 | 当时在争论心率是否存在低维确定性动力学 | 可以作为一个"方法是否能区分内部动力学与外驱"的小型测试床 |
| 心率、呼吸率与血氧浓度的演化如何互相影响 | 想利用多变量的冗余信息理解耦合 | 三列同步给了最低成本的耦合度量素材 |
| 能否从发作前的数据预测睡眠呼吸暂停发作 | 预测是竞赛的核心任务之一 | 缺少事件级金标准,预测任务的标签必须自行定义 |
第三行是全表最需要被瞪一眼的一行。官方把"能否预测呼吸暂停发作"列为与该数据集关联的三大研究问题之一,但数据本身并没有配套的事件标注;患者确实有呼吸暂停(官方给了描述与最长 45 秒的量级),但发作发生在哪几段要靠使用者自己定。这之间的落差——"赛题敢问"与"数据给得起"之间的落差——是这份资源最容易被误读的地方,也是 §7 用整节处理它的原因。
4.3 一处被官方修订的错误:是求和,不是平均
这一段值得单独拿出来,因为它是整份数据里最有教学价值的内容。
官方原文的大意是:1991 年为配合该数据集所写的说明中,错误地把这些采样描述为平均值(averages),而实际上它们是求和(sums)。官方还进一步说明:原先所用的求和方法没有被记录存档,而据推测它显然包含了额外的处理步骤,因为从原始记录里取 20 个采样点求和,并不能与这些文件中所记录的数值精确吻合。致谢对象是东京大学的 Takayoshi Shiraki,是他指出这些采样不是平均值、而非常接近求和值。
| 说法 | 实际 | 证据 |
|---|---|---|
| 2 Hz 采样是 20 点平均 | 是 20 点的求和 | 官方页面的订正段,指明原说明"erroneously stated … averages rather than sums" |
| 求和方式已被记录 | 未被记录 | 官方称"The method used for summation was not recorded" |
| 用原始记录重算可精确复现 | 不能精确吻合,推测另有处理步骤 | 官方称 20 点求和与文件数值不精确匹配 |
这条订正链里有三层信息,每一层都有用处。第一层是改正:不能按平均值的口径换算,第二、三列的幅值带有 20 倍的累积。第二层是边界:连当年的操作者都没有留下完整记录,这份数据的复算能力是有限的。第三层是机制:一份三十年前的说明错了一个词,直到有人回去核对原始记录才被发现——这类错误在更早的资料里可能依然存在。
4.4 标注粒度:有分期表,没事件表
官方给的东西可以列成一张清单:三列数值序列、两套睡眠分期表、患者有呼吸暂停的临床描述、最长呼吸停止约 45 秒的量级、以及传感器失连的时间窗口。没有的东西同样明确:没有逐次呼吸事件的起止时刻,没有呼吸暂停发作的评分标注,没有觉醒事件的专门标记,没有用药与既往史,没有受试者的人口学信息(官方页面未提供年龄性别等字段)。
对这个事实的正确用法是把它当作"弱监督/少监督"场景的素材:官方给的是粗粒度分期与定性描述,使用者可以据此定义自己的标签口径,但必须在方法节写清楚。把"我定义的呼吸暂停发作"写成"数据集的呼吸暂停标注",是这类资源上最常见的署名意义上的错误。
4.5 边界条件:什么情况下它不再适用
| 条件 | 是否适用 | 判断依据 |
|---|---|---|
| 多变量时间序列方法在真实生理序列上的验证 | 适用 | 三列同步、非平稳、官方承认的缺陷写在明面上 |
| 呼吸与心率耦合度量的对照实验 | 适用 | 官方明确点出呼吸性心律不齐的存在 |
| 绝对比值/幅度的比较 | 不适用 | 二、三列未标定,夜内标定不恒定 |
| 逐搏心率变异性的标准指标 | 不适用 | 心率列是插值产品,不是 RR 间期序列 |
| 呼吸暂停检测或事件级预测评测 | 谨慎,需自建标签 | 官方给的是定性描述,无逐事件标注 |
| 人群或临床结局推断 | 不适用 | 单一受试者、单一中心、单一夜 |
| 跨夜泛化或与夜间之外的场景对照 | 不适用 | 仅一夜,且不含白天数据 |
| 与其他 PSG 资源直接对齐拼接 | 谨慎 | 需要母记录 slp60 才能对齐,本数据集不含原始时间参照 |
这张表最有用的两行是第三行与第五行。第三行提醒的是一个朴素事实:想要绝对值的人从一开始就选错了对象。第五行则是善意提醒的另一面:它不是没有呼吸暂停,而是呼吸暂停的时间边界没有配套,做监督类评测的人必须补这一步并公开。
§5 怎么拿到
5.1 目录结构与下载面
PhysioNet 上这个库的文件树只有一层,没有子目录:
/files/santa-fe/1.0.0/
├── SHA256SUMS.txt #-- 144 B,两个文件的 sha256
├── b1.txt #-- 284.4 KB,前半段
└── b2.txt #-- 288.4 KB,后半段
由于没有 WFDB 头文件,读取时的全部格式信息都来自官方页面:三列、行间隔 0.5 秒、列序为心率/胸容积/血氧。把这个约定写到自己脚本顶部的注释里,是防止半年后读不懂的必要动作。
5.2 三种官方下载方式
#-- 方式一:整包 ZIP(573.5 KB),最省事
wget -r -N -c -np https://physionet.org/files/santa-fe/1.0.0/
#-- 若只要打包件:
curl -sL -o santa-fe.zip https://physionet.org/content/santa-fe/get-zip/1.0.0/
#-- 方式二:PhysioNet 官方 Python 包
physionet download santa-fe --version 1.0.0
#-- 方式三:AWS 开放桶(无需凭证)
aws s3 sync --no-sign-request s3://physionet-open/santa-fe/1.0.0/ ./santa-fe/
#-- 下载后校验:官方提供 SHA256SUMS.txt,务必核对
sha256sum -c SHA256SUMS.txt
官方给出的两个校验和分别是 92140a81e035b6ad1dfc17adfba6d4479516d359cc3dc36804b828e9b02d38a6 (b2.txt) 与 dc27dee4e09335d9d890391e2401b160ffa59aae8f3b40e8e844e1ea242817c5 (b1.txt)。体积小到可以秒下,因此没有理由不做校验。
5.3 直接读成表格
import numpy as np, pandas as pd
#-- 约定来自官方页面:三列 = 心率 / 胸容积 / 血氧,行间隔 0.5 秒
COLS = ['hr', 'chest', 'ox']
DT = 0.5
b1 = pd.read_csv('b1.txt', sep=r'\s+', header=None, names=COLS)
b2 = pd.read_csv('b2.txt', sep=r'\s+', header=None, names=COLS)
df = pd.concat([b1, b2], ignore_index=True)
#-- 由行号建时间轴:第 0 行为 0.0 秒,第 k 行为 k * 0.5 秒
df['t'] = np.arange(len(df)) * DT
print(df.shape, df.dtypes.to_dict())
print(df.head(3).to_string())
sep=r'\s+' 是必须的一步:文件每行的三个数值之间为空白分隔,且行尾有空白字符,用默认逗号口径读会退化成一列。不同 pandas 版本对首行空白的处理略有差异,读入后应先核对列数与行数是否与预期一致。
5.4 把官方声明的失连窗口定位出来
import numpy as np, pandas as pd
df = pd.concat([pd.read_csv(f, sep=r'\s+', header=None,
names=['hr', 'chest', 'ox'])
for f in ('b1.txt', 'b2.txt')], ignore_index=True)
#-- 官方声明的失连窗口:约自第 4 小时 30 分至 4 小时 34 分
WIN_LO, WIN_HI = 4 * 3600 + 30 * 60, 4 * 3600 + 34 * 60
df['t'] = np.arange(len(df)) * 0.5
win = df[(df['t'] >= WIN_LO) & (df['t'] <= WIN_HI)]
#-- 官方说传感器在这段时间被断开:不要把这段当成生理信号
print(win.shape) #-- 该窗口内的行数,做处理时应剔除或标记为无效
print(win.describe().loc[['min', 'max']].to_string())
上面这段没有跑出任何"结论",它只是把官方声明的那段时间定位出来。真正要做实验的人在此之后该做的是:把这段明确标记为无效,或者干脆从分析里删掉,并在论文里写清楚。不要把它当作一段特别极端的生理现象来解释——官方给的是"传感器被断开",不是"患者出现了某种极端状态"。
5.5 睡眠分期表的录入与版本对齐
官方页面用正文给出两套睡眠分期表,用 W、1、2、R 标记分期的时刻切换;表中时刻以时分秒给出,跨过整夜,因此会出现 0:00 之后又有 1:20:00 这样的写法——后者表示的是自文件起点算起的一小时二十分。录入时要先把"时:分:秒"折算成秒,再按上取整或下取整对齐到 0.5 秒的行索引。
import pandas as pd
#-- 录入时务必注明来自官方页面的哪一套表:submitted 或 corrected
raw = "0:00 W; 2:00 1; 2:30 W; 3:30 1; 9:30 W; 10:00 1"
def to_sec(s):
#-- 官方表里的时刻可能是 m:ss 也可能是 h:mm:ss
p = [int(x) for x in s.split(':')]
return sum(v * m for v, m in zip(p, [1, 60, 3600][:len(p)][::-1]))
rows = [dict(zip(['t', 'stage'], x.split()))
for x in [e.strip() for e in raw.split(';')]]
st = pd.DataFrame(rows)
st['sec'] = st['t'].map(to_sec)
print(st.to_string())
真正处理两套表时要留意:官方给出的两版在多个时刻的分期并不相同,且行数也不同。任何"按分期分段"的做法都要先声明版本,否则不同使用者拿到的是不同的分段。
5.6 五个最容易出错的地方
| 位置 | 错误写法 | 后果 | 正确做法 |
|---|---|---|---|
| 读入 | pd.read_csv('b1.txt') 用默认逗号口径 |
三列变一列 | 指定 sep=r'\s+' 并命名三列 |
| 时间轴 | 按行号当秒数 | 时间轴放大一倍 | 行索引乘 0.5 秒 |
| 幅度 | 把第二、三列当物理单位比较 | 结论建立在未标定数值上 | 只做相对变化与趋势讨论 |
| 缺失窗口 | 把第 4 小时 30 分前后的极端值当成生理事件 | 得出虚假的"极端脉动" | 按官方说明剔除或标记 |
| 分期表 | 混合使用两套睡眠分期表 | 同一时刻两个标签,复核失败 | 固定一套并在论文里写明版本 |
§6 与库内条目的关系
6.1 关系图谱
| 站内资源 | 属性 | 与本数据集的关系 |
|---|---|---|
| slpdb(MIT-BIH 多导睡眠库) | 多通道完整 PSG,含 slp60 | 母记录,本数据集的数据来源;本数据集是其三通道子集 |
| apnea-ecg | 心电加分钟级呼吸暂停标注 | 互补:它有事件标注,有人群规模;本数据集无事件标注但有连续的三变量序列 |
| fantasia | 心率变异性分形动力学对照 | 共同点是心率变异性;差异是本数据集含呼吸与血氧,且是非平稳的一夜 |
| sleep-edf | PSG 睡眠分期基准 | 想做睡眠分期去那里;本数据集通道不足且粒度太粗 |
| ucddb | 睡眠呼吸暂停的多夜记录 | 互补:它有群体的呼吸暂停事件;本数据集只有单人无事件标注 |
| cinc-2018-sleep-arousal | 大规模 PSG 微觉醒标注 | 需要做监督评测时的去处;本数据集不适合作为评测靶 |
| osv(氧饱和度变异性) | 血氧相关的变异性分析 | 共同点是都关注血氧波动;本数据集连标定都没有,只能做相对分析 |
| psg-ipa | 判读者一致性 | 提醒:本数据集的两套分期表就是一次"不同判读"的实证 |
这张表想说的事只有一件:本数据集在所有采用严格标注的 PSG 资源旁边都处于"辅助位",它的不可替代性不在于睡眠医学任务本身,而在于它是"从 PSG 里抽出的三条连续标量线"这个特殊形态——小而可被完全审视。
6.2 检索路径
| 你想要的东西 | 检索方向 | 落到哪里 |
|---|---|---|
| 原始的多导睡眠记录 | 母记录 slp60 | §3.1 与 §6.1 首行 |
| 呼吸暂停的事件级标注 | 呼吸暂停与睡眠队列类资源 | apnea-ecg、ucddb 等公开睡眠呼吸暂停资源 |
| 心率变异性的标准参照 | HRV 与分形动力学资源 | fantasia 等 HRV 参考库 |
| 睡眠分期的正式 benchmark | PSG 分期库 | sleep-edf 等 |
| 大样本睡眠事件监督评测 | 挑战赛类资源 | cinc-2018-sleep-arousal |
| 与本数据同源的文献线索 | 官方写的两条引用 | §3.1 与 §9.3 |
6.3 与其他资源的分工判据
| 任务 | 主粮仓该用什么 | 本数据集的位置 | 原因 |
|---|---|---|---|
| 睡眠分期模型训练 | 大规模 PSG 库 | 不适用 | 单受试者、三通道、粒度粗 |
| 呼吸暂停事件检测 | 带事件标注的睡眠库 | 仅作方法原型 | 没有事件级标签 |
| 多变量时间序列方法验证 | 可用的汇总不多 | 主力之一 | 三列同步、非平稳、代价低 |
| 呼吸—心率耦合分析 | 多通道 PSG 亦可 | 主力 | 官方明确提到呼吸性心律不齐 |
| 心率变异性绝对指标 | 逐搏 RR 序列型资源 | 不适用 | 本数据集的心率是插值产物 |
| 生理信号的非平稳性方法学研究 | 少有专门资源 | 主力 | 官方把非平稳列为选题理由之一 |
| 方法可复现性的最低成本演示 | 数百 KB 的纯文本 | 主力 | 573 KB,几秒钟读完 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
常见的误判是把"只有一名受试者"等同于"质量差"。这不是质量问题,是用途问题。官方压根没有把它包装成代表人群的资源——它是一九九一年被递给一个竞赛的三列要回答特定问题的序列,被平台长期托管了过来。评价它时正确的问法不是"样本够不够大",而是"在我这个问题上,它的交代够不够清楚"。
这个校正会改变下面评分的读法:规模一项必然低分,但"文档诚实度"极高,而后者在小样本方法学素材里比前者更难补。
7.1 五维评分
按 DAIMS 常用维度打分,每项 1–5 分,分数针对"作为时间序列方法与生理耦合分析素材"这个用途:
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 1 | 单一受试者、一夜、三列,体量不足以支撑任何统计推断 |
| 标注质量 | 2 | 有粗粒度分期表且提供了澄清版本,但无事件级标注,且两版分期不一致 |
| 任务适配 | 4 | 多变量同步、非平稳、已知缺陷公示完备,正好对应官方提出的三个问题 |
| 文档完整 | 5 | 官方逐条交代加工链路、单位缺失、失连窗口与历史纠错,几乎可作为范式 |
| 可获取性 | 5 | 免注册、ODC-BY、573 KB,三种下载方式并附校验和 |
合计 17 分(满分 25)。这个分数结构对应的用法很清楚:在"方法侧的对照靶"这个位置上它接近满分,在"数据侧的统计素材"这个位置上它毫无竞争力。
7.2 局限性的两层
第一层是规模与代表性的硬约束。一名受试者、一家睡眠实验室、二十世纪九十年代初的记录、以及当年与今日不同的数据采集设备。所有需要人群分布、需要外部有效性的结论,在这里都建立不起来。这层局限无解,也不该被掩盖。
第二层是加工与标注的软约束,它更容易被忽略,也更常被写错:心率列是插值序列(去掉了逐搏的时间结构);呼吸与血氧列未标定且在夜内被重标定与扯脱;存在一段官方声明的失连;1991 年说明书写错了一处口径,虽已订正但复算仍无法精确吻合;官方只给两套睡眠分期表,且两套不一致;官方描述呼吸暂停是现象级的,没有事件级标签。
| 局限 | 属于哪一层 | 是否可在使用中规避 |
|---|---|---|
| 单一受试者 | 硬约束 | 不可规避,只能不谈人群结论 |
| 体量极小 | 硬约束 | 可通过"作为对照靶而非训练集"规避 |
| 呼吸血氧未标定 | 软约束 | 可规避:只做相对分析并在论文里声明 |
| 夜内重标定与扯脱 | 软约束 | 可部分规避:分段讨论或剔除失连窗口 |
| 心率列是插值产物 | 软约束 | 不可规避:凡依赖逐搏 RR 的指标都不能用 |
| 无事件级标注 | 软约束 | 可规避:自建标签并公开口径 |
| 两套分期表不一致 | 软约束 | 可规避:固定使用修正版 |
| 历史说明的错误已订正但复算不精确 | 软约束 | 不可规避:不能假装可以完全复算原始加工 |
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 |
|---|---|---|
| 单人偏差 | 全部数据来自一名患者的一夜 | 一切结论的适用范围被限定在这一个人身上 |
| 疾病偏差 | 该患者表现出睡眠呼吸暂停 | 心率与呼吸的动力学本身就处在病理状态 |
| 设备与时间偏差 | 三十年前的睡眠实验室设备与当前的采集标准不同 | 与近年数据比较时差异可能来自设备而非受试者 |
| 传感器失效偏差 | 缓慢漂移、被技师重标定、被患者活动扯脱 | 二、三列的长期趋势不可靠 |
| 插值偏差 | 心率列经过等间隔插值 | 高频部分的能量结构被加工改变 |
| 求和偏差 | 二、三列为窗口内求和且方式未被完整记录 | 幅值不可比、不可复算 |
| 失连偏差 | 约第 4 小时 30 分至 34 分之间的数据不反映生理状态 | 未剔除会污染任何连续窗口统计 |
| 分期判读偏差 | 官方提供两套不一致的分期表 | 分段口径不声明就不可复现 |
7.4 外部验证中的角色
它在公开研究里的角色高度稳定:一个被拿来"跑一遍方法"的对照靶,而不是评测基线。原因不难理解——它小到可以一次读完,来路清楚,又因为竞赛出身而有可被引用的文献。典型用法是:方法论文用它证明"我的耦合度量/非平稳性处理/预测框架在真实多变量生理序列上能跑出什么形态"。
| 使用角色 | 讲得通的地方 | 风险 |
|---|---|---|
| 方法演示与可视化佐证 | 三列同步、肉眼可对照 | 容易把"能跑"当成"有效" |
| 与其他合成序列的对比 | 真实序列 vs 合成序列的差异有讨论空间 | 若不声明只有一名受试者,会被批评为选择性引用 |
| 与大规模 PSG 的分工 | 小用于演示、大用于评测 | 两者标签口径不同,不能直接换算 |
| 复现 1990 年代结果 | 文件字节未变、DOI 固定 | 需注意当年说明书里的错误已订正 |
最需要注意的是第二行。在一个只有一名受试者的数据上跑出漂亮的图形和指标,很容易被当作"方法有效"的证据;它实际上只能说明"方法能产出某种输出"。真正的有效性需要到大样本资源上去验证。
7.5 它为何还能用:诚实的部分一直没丢
三十年来它既没扩版也没更新数据本体,仍被检索与引用,唯一解释是那份说明一直完整。2019 年补了校验清单,2026 年平台加了 DOI 与元数据,数据本人一个字节都没变——一件三十年前的交货物能保持可解释性,靠的就是加工方式与已知缺陷被写在明处。对小体量数据而言,"交代清楚"比"体量更大"更难被替代。
§8 生态位与历史
8.1 历史沿革
它的诞生方式与多数医学数据库不同:不是为建库而采集,而是把已有的临床流程产出物抽出来、重排格式、送到另一个领域的竞赛里。这个路径决定了它的两个特征——成本低到不必为经费负责,形态也因此高度专化(只有三列,只有一夜)。
从竞赛附件到长期托管资源的这一步发生在 2000 年,正值 PhysioNet 开始系统地给早期零散的数据资源分配版本与 DOI。因而一个有趣的现象是:它的发布时间(2000 年)比数据的产生时间(1991 年)晚了九年,而它被整理进平台的时间又比它的第一份正式描述(1993 年)晚了七年。
8.2 与竞赛的关系
官方页面把竞赛名链接到一个外部网页(托管于 Stanford 的 “~andreas/Time-Series/SantaFe.html”),并用 “Santa Fe Time Series Competition” 称呼它,同时给出 1993 年出版的那本论文集作为准确描述文献。官方没有在页面内说明竞赛的组织方、举办地或年度——这几项属于未核验信息(见 §10)。
竞赛结束后,参加者手中的是同样的这两个文本文件。这个细节解释了它为什么常以"某年竞赛数据"的身份被引用:它不是一个因数据价值而被选中的医学数据集,而是从一个别的领域的公开考题里漂进医学数据平台的遗留物。
8.3 生态位:方法侧的小对照靶
| 角色 | 大样本评测资源 | 小对照靶 |
|---|---|---|
| 典型用法 | 训练与定量评测 | 方法演示、可视化、可解释性佐证 |
| 所需前提 | 多受试者、统一标注 | 来路清楚、代价低、可逐行检查 |
| 失败模式 | 标注噪声、划分别扭 | 过度解读、把演示当证据 |
| 代表 | 大规模 PSG 与队列型资源 | 本数据集等单受试者的小型历史序列 |
本数据集坐在右边一列。把它当评测资源用,会立刻遇到"样本 1 名"的天花板;把它当对照靶用,它几乎不需要准备功夫。
8.4 谁在用它,用来做什么
从公开可见的引用形态看,使用者集中在三类:做非线性时间序列与动态系统推断的研究组(拿它当真实世界的多变量样例)、做心脏与呼吸耦合的生理工程组(拿心率与胸容积两列做耦合度量)、以及做教学与复现的人(573 KB 的纯文本文件适合作为"一次完整的最小可行练习")。第三类看似不起眼,但对新入门者最有用:它能让人在一小时内把"从下载到核实到跑完一段分析"完整走通一遍。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一天 | 第一周 | 注意事项 |
|---|---|---|---|
| 时间序列研究者 | 读官方页面全文(尤其是 §4.3 的纠错段),按 §5.3 读入 | 建立时间轴、剔除失连窗口、跑一遍基准预测 | 别把它当评测集,只当演示靶 |
| 生理信号工程者 | 看三列的加工方式表(§2.2) | 做心率与呼吸的耦合度量,用两套分期表分段对照 | 呼吸与血氧只能谈相对变化 |
| 教学与复现者 | 下载并跑 sha256sum -c |
完整重现一个 1990 年代的图表 | 使用修正版分期表,注意当年说明书的错误 |
9.2 一条最短的可用流程
#-- 1. 下载(三种任选其一;这里用最直接的一种)
wget -r -N -c -np https://physionet.org/files/santa-fe/1.0.0/
#-- 2. 核对完整性
cd physionet.org/files/santa-fe/1.0.0 && sha256sum -c SHA256SUMS.txt
#-- 3. 看一眼行长与列数是否符合"三列"的约定
head -3 b1.txt | cat -A | head -3
head -3 b2.txt | cat -A | head -3
import pandas as pd, numpy as np
#-- 4. 读入并命名;行间隔 0.5 秒来自官方页面
files = ['b1.txt', 'b2.txt']
cols = ['hr', 'chest', 'ox']
parts = [pd.read_csv(f, sep=r'\s+', header=None, names=cols) for f in files]
df = pd.concat(parts, ignore_index=True)
df['t'] = np.arange(len(df)) * 0.5
#-- 5. 官方声明的失连窗口需剔除或标记
bad = (df['t'] >= 4 * 3600 + 30 * 60) & (df['t'] <= 4 * 3600 + 34 * 60)
print('总行数', len(df), '失连窗口内的行数', int(bad.sum()))
df_ok = df[~bad].copy()
#-- 6. 只做相对分析;绝对幅值不作为结论依据
print(df_ok[['hr', 'chest', 'ox']].describe().loc[['min', 'max']].to_string())
9.3 引用方式
| 引用对象 | 内容 |
|---|---|
| 数据集技术描述 | Rigney DR, Goldberger AL, Ocasio WC, Ichimaru Y, Moody GB, Mark RG. “Multi-channel physiological data: description and analysis”. In: Weigend AS, Gershenfeld NA (eds). Time Series Prediction: Forecasting the Future and Understanding the Past. Reading, MA: Addison-Wesley, 1993, 105–129. |
| 母库出处 | Ichimaru Y, Moody GB. Development of the polysomnographic database on CD-ROM. Psychiatry and Clinical Neurosciences 53:175–177 (April 1999). |
| 平台引用 | PhysioNet 平台综述论文(2026 年发表于 Nature Health),按官方页面 Cite 按钮生成。 |
| 版本与 DOI | Santa Fe Time Series Competition Data Set B, version 1.0.0, DOI 10.13026/C20W2T. |
写论文时建议同时说明:所用的文件名(b1/b2 或合并后)、行间隔采取 0.5 秒的来源(官方页面)、失连窗口是否剔除、以及用的是最初提交版还是修正版睡眠分期表。这四项决定了别人能否把你的结果对回去。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方页面与其文件目录 |
| 文件核验 | SHA256SUMS.txt、b1.txt、b2.txt 三个文件的可访问性与大小、日期经直接访问确认;两个文件的校验和取自官方清单 |
| 注意不一致 | 官方页面提供最初提交版与修正版两套睡眠分期表,两者在多个时刻不一致,正文已提示必须声明版本 |
| 论文信息 | 仅参考官方页面给出的引用条目,未读全文 |
| 未核验内容 | 竞赛的组织方、举办地、举办年份与是否为系列命题;两个文本文件的行数、总时长与采样点数;每一列的取值范围与 Sheffield 数值区间;呼吸暂停事件的确切次数与时刻;两版分期表的行数差异;以及任何自行统计得到的波动与变异指标 |
| 图像 | 无配图;封面为生成式提示词,不含真实生理波形 |
| 免责 | 本文不构成临床建议;数据使用须遵守 ODC-BY 1.0 的署名要求 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它有好几名受试者」 | 只有一名,来自 MIT-BIH 多导睡眠库的记录 slp60 | 官方 Data Description 首句写 “recorded from a patient” |
| 「它是完整的 PSG 多导睡眠图」 | 只有三列:心率、胸容积、血氧 | 官方页面明确是"从 slp60 抽出",且列的含义、求和方法均逐条写明 |
| 「它是 WFDB 格式,可用 wfdb 读」 | 纯文本文件,无头文件无注释文件 | 文件目录只有 b1.txt、b2.txt、SHA256SUMS.txt |
| 「第二列和第三列有物理单位」 | 未经标定的模数转换器单位 | 官方原话 “uncalibrated analog-to-digital converter units” |
| 「2 Hz 是原始呼吸信号的采样率」 | 原始为 250 Hz,2 Hz 是加工后的行间隔 | 官方称"These signals were originally sampled at 250 Hz" |
| 「每一行是 80 毫秒窗口内的平均值」 | 是求和,且官方还指出实际方式不明、无法精确复算 | 官方页面的纠错段与致谢 Takayoshi Shiraki 的说明 |
| 「它自带呼吸暂停事件的起止标注」 | 只有"该患者表现出睡眠呼吸暂停"的现象级描述 | 官方给出的是临床现象描述与最长约 45 秒的量级 |
| 「它是监督学习可用的评测集」 | 单受试者、无事件标签,不适合作为评测基线 | 规模与标注层级的双重限制,见 §7.2 |
| 「睡眠分期表只有一套」 | 官方给了最初提交版与修正版两套 | 官方原话 “corrected data appear below” |
| 「心率列可以直接当 RR 间期序列用」 | 它是 RR 间期倒数再插值得到的等间隔序列 | 官方描述了完整的四级加工链路 |
| 「第 4 小时 30 分前后的异常值是极端的生理状态」 | 官方称那段传感器被断开 | 官方原话 “the sensors were disconnected” |
| 「它最近更新过数据」 | 本体文件自 2000-01-06 未变,2019 年只加了校验清单 | 文件目录的时间戳与官方版本记录 |
FAQ
Q1:它到底有几名受试者?
一名。官方页面的描述明确写出数据取自 Beth Israel Hospital 睡眠实验室的"一名患者"(a patient),原始材料是 MIT-BIH 多导睡眠库中的记录 slp60。所以它不支持任何跨个体的比较,也不适合用作评测集——它的用途是单个多变量序列上的方法演示与可控对照。
Q2:三列分别是什么,单位可靠吗?
三列依次是心率、胸容积(呼吸力度)与血液氧浓度(耳部血氧测定)。只有第一列围绕的心率带有明确的量纲,第二、三列官方明确写是"未经标定的模数转换器单位",并且因为传感器漂移、技师不定期重标定、以及患者活动导致的脱落,标定在整个数据集内不是恒定的。因此第二、三列只能做同一夜内的相对走向分析。
Q3:据说 1991 年的说明书里有个错误,是怎么回事?
当年随数据的文字把这些 2 Hz 采样描述为"平均值",实际是"求和"。官方页面现已订正,并进一步说明求和的具体方式没有被记录存档,从原始记录取 20 个采样点求和并不能与文件中的数值精确吻合,推测还包含其他步骤。这处更正由东京大学的 Takayoshi Shiraki 提出。
Q4:能不能用它做睡眠呼吸暂停的预测任务?
官方确实把"能否从发作前的数据预测呼吸暂停发作"列为与该数据集绑定的三个研究问题之一,并且写明该患者存在睡眠呼吸暂停、最长呼吸停止可达 45 秒。但数据集没有提供逐次发作的起止标注。要做监督式预测,必须先自己定义发作口径与标签,并在论文里完整公开这一口径。
Q5:为什么不能把它当成心率变异性(HRV)的标准数据源?
因为第一列不是逐搏 RR 间期。官方交代它经历了四步加工:用自动心搏检测器定位 QRS、测量 RR 间期、取倒数、再用 tach 插值成等间隔序列。插值之后的 2 Hz 序列已经改变了原间期序列的时间结构,凡依赖逐搏时刻的指标(SDNN、RMSSD 之外的间期类派生指标尤甚)都不该直接在这列上计算。
Q6:那份"传感器被断开"的时间段该怎么处理?
官方说大约从文件起点算起的第 4 小时 30 分到 4 小时 34 分之间,传感器被断开了。它既不是生理现象也不是可修复的缺测。稳妥做法是把这段明确剔除或打上无效标记,并在方法节写明;任何跨越该窗口的滑窗统计都会被它污染。
Q7:为什么会有两套睡眠分期表?用哪一套?
官方先给出当年提交时随附的分期表,随后给出标注为修正的版本,两者在多个时刻的分期并不相同。新建分析应当使用修正版;只有在试图复现 1991 年竞赛参加者所见情形时才用最初提交版。无论选哪一套,都必须在产出物里写明版本,否则分段口径无法被复核。
Q8:它和 MIT-BIH 多导睡眠库是什么关系?
它是从后者的记录 slp60 里抽出来的三列。想去拿原始的 EEG、呼吸气流等完整通道,应该回到母记录本身(站内 slpdb 词条可以作为入口);想要最小的三变量 2 Hz 序列用于方法演示,才是本数据集的位置。两者不可互换:一个有完整的通道但体量较大,一个极度精简但只能用在这些特定的三条线上。
术语表
| 术语 | 解释 |
|---|---|
| 圣菲时间序列竞赛(Santa Fe Time Series Competition) | 官方页面所指向的 1991 年时间序列竞赛;其成果结集为 Weigend 与 Gershenfeld 主编的《Time Series Prediction》论文集 |
| MIT-BIH 多导睡眠库(slpdb) | 本数据集的原始母库,原始 PSG 记录即其中的 slp60 |
| slp60 | 本数据集所抽取的多导睡眠记录编号 |
| 胸容积(chest volume) | 第二列的物理量描述,反映呼吸力度,此处以模数转换器单位记录 |
| 耳部血氧测定(ear oximetry) | 第三列的测量方式,通过耳部光电容积法推算动脉血氧水平 |
| 呼吸性心律不齐(RSA) | 吸气与呼气过程中心率发生的周期性起伏,官方称其几乎总能观察到 |
| 呼吸暂停(apnea) | 睡眠中反复停止呼吸的现象;本数据集描述的患者停止最长可达 45 秒 |
| RR 间期 | 相邻两次 QRS 复合波之间的时间间隔 |
| tach | PhysioNet 提供的工具,用于把不均匀采样的系列插值成等间隔序列 |
| 模数转换器单位(ADC units) | 未经标定的数字计数,与物理量之间缺少可复原的换算系数 |
| 非平稳(non-stationary) | 统计性质随时间变化;官方把睡眠中的人列为实验系统非平稳的来源 |
| 低维机制(low-dimensional mechanism) | 官方第一问中的用语,指可能支配心率变化的确定性动力学结构 |
| 插值序列 | 由非均匀采样点生成的等间隔序列,本数据集第一列即属此类 |
| 求和窗口 | 生成第二、三列时对原始 250 Hz 采样做 20 点(80 毫秒)加总的时间范围 |
| 失连窗口 | 官方声明的约第 4 小时 30 分至 34 分,传感器被断开的时段 |
| 分期记号 W / 1 / 2 / R | 清醒、两种睡眠期、快速眼动睡眠 |
| ODC-BY 1.0 | 开放数据共享署名许可,本数据集采用的许可 |
| DOI | 数字对象标识符;本数据集版本 1.0.0 为 10.13026/C20W2T |
附录 A:核心数字核对表
| 项 | 值 | 出处 | 层级 |
|---|---|---|---|
| 全名 | Santa Fe Time Series Competition Data Set B | 官方页面标题 | 官方页面 |
| 版本 | 1.0.0 | 官方页面版本栏 | 官方页面 |
| 发布日期 | 2000 年 1 月 6 日 | 官方页面 | 官方页面 |
| DOI | 10.13026/C20W2T | 官方页面 Discovery 栏 | 官方页面 |
| 许可 | Open Data Commons Attribution License v1.0 | 官方页面 License 栏 | 官方页面 |
| 主题标签 | sleep、multiparameter | 官方页面 Topics 栏 | 官方页面 |
| 受试者数 | 1 | 官方 Data Description 首句 | 官方页面 |
| 参数列数 | 3 | 官方页面(心率、胸容积、血氧) | 官方页面 |
| 行间隔 | 0.5 秒 | 官方页面 | 官方页面 |
| 等效采样率 | 2 Hz | 官方页面 | 官方页面 |
| 原始采样率(第 2、3 列) | 250 Hz | 官方页面 | 官方页面 |
| 求和窗口 | 20 个采样点 / 80 毫秒 | 官方页面 | 官方页面 |
| 文件数 | 3(b1.txt、b2.txt、SHA256SUMS.txt) | 官方文件目录 | 官方文件 |
| b1.txt 大小 | 284.4 KB | 官方文件目录 | 官方文件 |
| b2.txt 大小 | 288.4 KB | 官方文件目录 | 官方文件 |
| 未压缩总大小 | 573.0 KB | 官方页面 Files 段 | 官方页面 |
| ZIP 包大小 | 573.5 KB | 官方页面 Download 段 | 官方页面 |
| SHA256SUMS.txt 大小 | 144 B | 官方文件目录 | 官方文件 |
| SHA256SUMS.txt 日期 | 2019-02-20 | 官方文件目录 | 官方文件 |
| b1.txt / b2.txt 日期 | 2000-01-06 | 官方文件目录 | 官方文件 |
| b1.txt 校验和 | dc27dee4e09335d9d890391e2401b160ffa59aae8f3b40e8e844e1ea242817c5 | SHA256SUMS.txt | 官方文件 |
| b2.txt 校验和 | 92140a81e035b6ad1dfc17adfba6d4479516d359cc3dc36804b828e9b02d38a6 | SHA256SUMS.txt | 官方文件 |
| 失连窗口 | 约第 4 小时 30 分至 4 小时 34 分 | 官方页面 | 官方页面 |
| 呼吸停止时长上限 | 最长可达 45 秒 | 官方页面 | 官方页面 |
| 原始记录编号 | slp60(MIT-BIH 多导睡眠库) | 官方页面 | 官方页面 |
| 研究组所在地 | 波士顿 Beth Israel Hospital 睡眠实验室 | 官方页面 | 官方页面 |
| 维护机构 | MIT Laboratory for Computational Physiology | 官方页面页脚 | 官方页面 |
| 项目浏览数 | 当前版本 260 / 全部版本 260 | 官方页面 Project Views | 官方页面 |
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本数据集共享多个主题标签的相关资源,按相关度降序排列:
- slpdb — 本数据集的原始母库(MIT-BIH 多导睡眠库,含记录 slp60)
- apnea-ecg — 带分钟级呼吸暂停标注的心电库,弥补本数据集无事件标注的缺口
- fantasia — 健康窦性心律 HRV 分形动力学参考库
- sleep-edf — 多导睡眠图睡眠分期基准
- ucddb — 都柏林睡眠呼吸暂停库,有多名受试者的整夜记录
- cinc-2018-sleep-arousal — 大规模 PSG 微觉醒标注,适合做监督评测
- cps-dataset-sleep — 综合多导睡眠库,通道远多于本数据集
- mit-bih-arrhythmia — 心电标准库,可对照心率列的导出关系
- osv — 氧饱和度变异性库,可与本数据集第三列的话题对照
- psg-ipa — 睡眠判读者一致性资源,呼应本数据集的两版分期表
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
