术中伤害性刺激多模态生理索引:101 台手术标注

一百零一台手术、一万八千五百八十二分钟、四万九千八百七十八个伤害性刺激——这份数据的真正价值不在于信号有多干净,而在于它把「什么时候疼」这件事逐秒标了出来,同时坦白了这件事没有客观真值

来源 麻省总医院(Massachusetts General Hospital)麻醉、重症与疼痛医学科;麻省理工学院与约翰霍普金斯大学生物医学工程系合作发布时间: 2026-10-19最后更新: 2026-10-20 阅读 23
术中伤害性刺激多模态生理索引:101 台手术标注

信息速览

数据集名称术中伤害性刺激多模态生理索引:101 台手术标注
数据类型麻醉,伤害性刺激,手术,心率变异性,皮电活动,自主神经,点过程模型,ANI,围术期
规模101
接入方式麻省总医院(Massachusetts General Hospital)麻醉、重症与疼痛医学科;麻省理工学院与约翰霍普金斯大学生物医学工程系合作
AI 就绪度

全身麻醉有四个组成部分:不痛、不知、不记、不动。后三个都有客观指标可看——脑电、呼气末浓度、肌松监测;唯独「不痛」没有。术中判断病人有没有受到伤害性刺激,主流做法是看心率和血压,用眼睛看。这两种反应都很迟钝:心率受药物、容量、体位影响,血压受血管活性药影响,而全麻本身已经钝化了这些反射。

一份把「什么时候给了刺激、什么时候给了药」逐秒标出来的数据,因此有它独有的位置。它并不提供一把更好的尺子,它提供的是一个能用来校准尺子的坐标系——四万九千八百七十八个标注点,每一个都是「此刻切开皮肤」或「此刻牵拉腹膜」这种可以复核的事件。

这份数据来自麻省总医院的一百零一台手术,2018 到 2022 年,共一万八千五百八十二分钟。它把心电与皮电导出的自主神经索引、九类麻醉药物的给药时序、伤害性刺激的有无,全部压到同一条五秒一格的时间轴上,并附同场次 ANI 监护仪的输出来做对照。打算拿它训练疼痛识别模型的先读 §4 与 §6;想知道它为什么在方法上比别的「疼痛数据集」更值得信任的看 §1.4 与 §9;只关心能不能拿到文件的直接看 §3。

§1 它是什么:一份带标注的术中生理记录

1.1 一句话定义与四条边界

这是一份前瞻性观察数据集:101 台全麻手术,每台手术给出一串五秒窗口,每个窗口带三十个数值特征(十五个自主神经索引加十五个导数)、该窗口内是否存在伤害性刺激的二值标记、九类药物各自的上次给药时间与在体累计剂量,外加一段来自商用监护仪的 ANI 索引作对照。

四条边界必须先说清。

第一,给的是特征,不是波形。 数据集不含原始心电与皮电波形,只给由点过程模型导出、再按五秒窗口汇总的标量。这意味着无法用这份数据验证别的特征提取方法——除非你能拿到原始波形,而原始波形不在此次发布范围内。

第二,窗口是五秒,不是逐拍。 五秒的窗口长度对应约 5 到 8 个心动周期(成人术中),足以算短时心率变异性,但不足以分辨一次刺激之后的秒级反应形态。

第三,标注是人工的,且作者自己说它是超集。 一条刺激标注的意思是「此刻存在可能引起伤害性感受的事件」,不是「此刻病人感到疼痛」。这两件事的差距是这份数据的核心限制,§4 会展开。

第四,文件按地区限制分发。 数据集条目页在部分地区直接显示不可用,连文件清单都不给。这不影响它作为方法学参照的价值,但影响复现。

1.2 「伤害性刺激」在麻醉学里指什么

这个词需要先定义,否则后面全是空的。

全身麻醉下的病人没有意识,但脊髓与脑干的反射弧仍在工作。切皮会引起交感兴奋:心率上升、血管收缩、汗腺分泌增加、呼吸(若保留自主呼吸)变浅变快。这一整套反应叫伤害性感受(nociception)——它是痛觉的通路被激活,而不是痛觉本身。

所以麻醉学的目标不是「让人不痛」,是「压住这条反射通路」。压不住,交感兴奋会带来一系列后果:术中血压波动、出血增多、术后疼痛加剧、恢复期谵妄风险上升。压过头,则是阿片过量:苏醒延迟、呼吸抑制、恶心呕吐、肠麻痹。

问题在于,压得刚好是多少,没人知道。这就是为什么需要一个能连续读数的伤害性感受指标,也是这份数据想训练的东西。

1.3 原始信号怎么变成三十个数

理解这份数据的关键,是理解从「心电一跳」到「MuHR 这个数」之间发生了什么。链条有四段。

第一段,事件提取。 心电里取 R 峰,得到一串不等间隔的心跳时刻;皮电里取汗腺脉冲的起点,得到另一串不等间隔的分泌事件。

第二段,点过程建模。 这是这套方法有别于普通 HRV 分析的地方。普通做法是把 RR 间期当作等间隔时间序列算功率谱;点过程做法是把每次心跳看作一个条件强度函数的实现,函数的形式里显式含「瞬时心率」与「瞬时心率变异性」两个参数,用最大似然逐拍估计。

$$ \lambda(t) = \left[ m + \gamma, HR(t) + \beta \int_{t-u}^{t} (t-s), dN(s) \right] \exp{\alpha, HR(t) + \beta, \widetilde{RR}(t)} $$

这个式子的形状不必记,需要记的是它的产出:$\mu_{HR}$ 与 $\sigma_{HR}$ 是逐拍估计出来的,不是五秒一个常数。这是点过程模型相对窗口傅里叶的实际优势——它给出的是瞬时值。

第三段,频谱分解。 在瞬时心跳间隔序列上算 TotalPower、HF、LFnu、HFnu、LF/HF 这些频域量。高频段(约 0.15 至 0.4 赫兹)主要对应呼吸性窦性心律不齐,是副交感活动的代理;低频段(约 0.04 至 0.15 赫兹)混有交感与压力反射,解释时要小心。

第四段,窗口汇总。 把上面这些逐拍或逐事件的值,按五秒一个窗口求均值与标准差,得到十五个特征;再对这十五个特征求一阶差分,得到十五个导数。

三十个数就是这样来的。它们不是原始测量的别名,是四层变换之后的产物——每一层都引入了假设。

1.4 为什么标注是这份数据最稀缺的部分

同类数据里,有生理信号的不少,有药物记录的也常见,但同时有两者的不多,而把「刺激事件」标到秒级的极少。

少的原因很直接:标注要人做。研究者得在手术现场(或回看录像)记录每一次切皮、每一次牵拉、每一次电刀使用、每一次骨膜剥离的起止时刻;还要记录每一次推药的时间与剂量。一台四小时的腹部手术,这样的事件数以百计。一百零一台手术,四万九千八百七十八个刺激标注——这个数字背后是成百上千小时的观察。

这也是这份数据的方法学价值所在:它是少数能把「生理反应」与「已知的、外部的、可复核的输入」对齐的数据。有了这条对齐,才能回答「心率变异性在切皮后第几秒开始变化」这种问题;没有标注,任何「疼痛识别」都只是把一段无标签信号切成两半互相比。

1.5 为什么用皮电,而不只用心电

心电给的是心脏自主神经活动,皮电给的是汗腺交感神经活动。两个通道看的是自主神经系统的不同侧面。

皮电的解剖基础简单:汗腺只受交感胆碱能纤维支配,没有副交感对抗。这意味着皮电的紧张性水平(TonicEDA)是一个相对纯粹的交感张力读数,不像心率那样被交感和副交感同时拉扯。

皮电的缺点也明显:它对温度、湿度、电极位置、出汗的滞后都敏感,反应延迟在 1 到 3 秒量级,且个体间基线差异极大。所以作者用的不是皮电水平本身,而是把它分解成汗腺脉冲的幅度与频率,再用点过程模型估计这两个量的瞬时值(MuAmp、SigmaAmp、MuPR_LogN 等)。

两套信号合起来,才是这份数据标题里「多模态」的实际含义——不是影像加文本那种多模态,是两条自主神经通路的多模态。

1.6 九类药物为什么单独列

drugClass 字段有九个取值:镇静(Sedative)、镇痛(Antinoc)、肌松(MuscleRelaxant)、升压(Pressor)、β 阻滞(BetaBlocker)、α2 激动(Alpha2Ag)、NMDA 拮抗(NMDA-Ant)、肼屈嗪(Hydralazine)、七氟烷(Sevo)。

这个分类不是随意的,它对应「哪些药会污染自主神经索引」这个问题。阿片直接压低交感反应;β 阻滞剂把心率反应抹平;α2 激动剂(右美托咪定类)既降交感又降皮电;升压药改变压力反射的增益;七氟烷的浓度本身就是麻醉深度的主要旋钮。

如果不把这些药的时序放进模型,任何「心率升高就是疼」的推断都会被药物效应污染。作者把 timeSince(距上次给药的时间)与 cumulDose(归一化累计剂量)按类给出,就是为了让模型能显式扣掉这部分。

1.7 它不适合回答什么

五条要说在前面。

不能回答「疼痛强度」。 标注是二值的:有刺激 / 无刺激。没有强度分级,也没有病人主观评分(全麻病人无法评分)。

不能回答「镇痛是否充分」。 数据记录了给了多少药,没有记录「给得对不对」。充分性需要术后结局(疼痛评分、阿片消耗量)来定义,那部分不在本数据集内。

不能回答「哪个监护仪更好」。 数据含 ANI 输出,但 ANI 是商用算法的黑箱结果,且只在同一批手术上跑过。要做器械对比需要多中心、多器械、同一金标准,这里没有。

不能当连续监护数据用。 五秒窗口意味着最快响应也是五秒;一次刺激的自主反应常有 5 到 15 秒的延迟与持续,窗口汇总会把形态抹平。

不能外推到儿童、心脏手术、清醒镇静。 队列是成人全麻手术,§2.5 会说明队列的具体构成限制。

§2 数据构成:100 个结构体与八个 CSV

2.1 两种格式,同一份内容

数据以两种形式给出:OR_data.mat 与 OR_data_CSVs。

OR_data.mat 是一个 1×101 的 MATLAB 结构体数组,每个元素对应一台手术,字段为 subj(编号)、phys_ind_order(特征顺序)、W_5sec(主体数据)、ANI(对照监护仪数据)、DrugInfo(给药信息)。配套的 MATLAB 脚本直接读这个文件。

OR_data_CSVs 是一个文件夹,每台手术八个 CSV:

S###_W5sec_multiS_noDrug_noc_stim.csv
S###_W5sec_multiS_noDrug_X_unnorm.csv
S###_W5sec_multiS_noDrug_X_norm_noNan.csv
S###_W5sec_ANI_noc_stim.csv
S###_W5sec_ANI_X_unnorm.csv
S###_W5sec_ANI_X_norm_noNan.csv
S###_W5sec_DrugInfo_timeSince.csv
S###_W5sec_DrugInfo_cumulDose.csv

### 是三位手术编号。八个文件里有三个成对出现(noc_stim 是行向量,两个 X 是矩阵),两个是给药矩阵。共同的时间轴是五秒窗口的序号,没有绝对时间戳。

这一点值得注意:CSV 里没有手术开始时间,也没有窗口与真实时钟的对应关系。 若要与外部事件(比如麻醉记录单上的时刻)对齐,只能用窗口序号乘以 5 秒做相对定位,且必须假定没有丢窗。

2.2 十五个索引与十五个导数

phys_ind_order 的顺序是固定的,先十五个索引,后十五个导数。前十五个按语义可以分四组。

心率组:MuHR(瞬时心率均值)、SigmaHR(瞬时心率标准差)。这两个直接来自心跳点过程模型,单位是次每分。

频域组:TotalPower、HF、LFnu、HFnu、LFnu_noVLF、LF/HF。这六个是心率变异性的频域刻画。LFnu 是归一化低频(低频除以总功率减极低频),LFnu_noVLF 是另一种归一化口径,两者不要混用。

皮电水平组:TonicEDA,皮电的慢变成分,反映基础出汗水平。

皮电脉冲组:MuAmp、SigmaAmp(脉冲幅度的均值与标准差)、MuPR_LogN、SigmaPR_LogN(脉冲率用对数正态参数化)、MuPR_IG、SigmaPR_IG(脉冲率用逆高斯参数化)。同一件事给了两套参数化,是因为脉冲间隔分布的形状在个体间差异大,两套各有适配的场景。

后十五个是前十五个的一阶差分,即相邻窗口的变化量。作者把它们一并给出,意图清楚:刺激引起的是变化,不是绝对值。绝对心率六十次每分在两个人身上含义不同,但心率在五秒内跳了八次每分,含义就明确得多。

2.3 五秒窗与 256 赫兹这两个数

Fs = 256、w = 5 这两个参数在文档里被单独列出来,并说明「因为对所有手术都相同,所以不逐个文件保存」。

256 赫兹是窗口级汇总之前原始信号的采样率。这个数不高——心电的 QRS 形态在 256 赫兹下还能分辨,但皮电的事件时刻分辨率就受限于此(约 4 毫秒)。

五秒窗的选择是一个折中。短于此,短时 HRV 的估计方差太大(只有三四个心动周期);长于此,一次刺激的瞬时反应就被平均掉了。五秒大约对应 6 到 8 个心动周期,是短时 HRV 文献里常见的下限。

这条折中的代价要写清楚:任何持续短于五秒的事件都会被稀释,任何持续长于五秒的事件会横跨多个窗口。 前者让弱刺激的标注与特征脱节,后者让强刺激的标注在多个窗口里重复出现,导致正样本膨胀。

2.4 归一化列与 NaN 插补

每个 X 都有两列版本:X_unnorm(原始单位)与 X_norm_noNan(归一化后且 NaN 已插补)。

这两个版本不能随便换用。X_unnorm 保留物理单位,跨患者可比性差,但保留了真实的量级——想算「心率变异性下降了百分之几」必须用它。X_norm_noNan 每台手术单独归一化,适合做患者内的模式识别,但跨患者比较会失去意义。

noNan 这个后缀值得停一下:原始计算里出现过 NaN,作者做了插补。插补方法文档没写。这意味着归一化列里有一部分是猜出来的数——如果某个窗口的皮电完全无脉冲,它的 MuPR 本来是无定义的,插补之后变成一个看起来正常的数。

实用建议:训练时用归一化列,评估时同时看未归一化列,并单独统计插补比例。 若某台手术的插补比例超过百分之十,这台手术的结论就该打折扣。

2.5 队列构成:文档说了什么,没说什么

文档明确给的:101 台手术、101 名不同患者、2018 至 2022 年、麻省总医院、多种手术类型、多种药物组合。

文档没给的:年龄分布、性别比例、ASA 分级、手术科室分布、术式清单、麻醉维持方案的具体构成、是否含急诊手术、是否含体外循环。

这些缺失对使用的影响是分层的。年龄与 ASA 分级影响自主神经基线,缺了就难以判断结论能否外推;术式分布影响刺激类型(腹腔牵拉与骨科电钻的生理反应不同),缺了就无法做分层分析;急诊与择期的混合会影响用药习惯。

作者在 Usage Notes 里给的使用建议是「可用于理解不同麻醉策略的差异、做给药策略与生理效应的二次分析、按反应分层患者」。这些用法都不严格要求上述协变量——但一旦要做,就会撞上这个缺口。

2.6 体量:能估出来的与估不出来的

文件体量文档未给。可以做一个量级估计。

每台手术的窗口数 = 手术时长 ÷ 5 秒。若平均每台 184 分钟(18,582 ÷ 101),则平均约 2,208 个窗口。三十个特征加一个标记,按双精度浮点存,约 2,208 × 31 × 8 字节 ≈ 548 千字节;加上 ANI 的三个向量(约 53 千字节)与给药的两个 2,208×9 矩阵(约 318 千字节),单台手术约 0.9 兆字节。一百零一台合计约 90 兆字节,MAT 压缩后更小。

这不是一个需要分片下载的体量。真正的时间成本不在下载,在等审批。

2.7 每个字段的缺失意味着什么

把字段清单按「缺了会怎样」重排一遍,比按字母序读更有用。

MuHR 与 SigmaHR 缺失,整份数据就失效——它们是所有后续分析的主轴。这两个由点过程模型逐拍估计,若某段心电质量差到无法检 R 峰,这段就没有值。因此这两列的缺失模式本身就是一份心电图质量报告。

TotalPower 与四个归一化频域量缺失,意味着窗口内的心动周期数太少或心律不规则。心率变异性的频域估计需要足够长的平稳段,五秒窗在心率低时(比如五十次每分)只有四个周期,谱估计的方差极大。这类缺失在慢心率患者身上会更集中,从而与患者特征相关——这不是随机缺失。

TonicEDA 缺失意味着皮电通道整体不可用(电极脱落、增益饱和、导联线松)。它缺失时,后面的六个皮电脉冲特征也一定缺失,因为后者是在前者的基础上分离出来的。这种「成组缺失」在统计上必须当整体处理,不能逐列插补。

给药相关的两个矩阵缺失的是「没有给药」,不是「不知道」。这两者的区别很关键:timeSince 在从未给过某类药时应该是一个很大的数或一个特殊值,而不是零。若代码里把零当默认,会得到「刚刚给过药」的错误结论。

窗口索引本身也有隐含意义。若某台手术的窗口数明显少于时长除以五秒,缺口可能出现在两处:信号断连(监护仪重连)或拼接丢帧。这两种原因对分析的影响不同,而数据里没有能区分它们的字段。

§3 怎么拿到:三道门槛与一道地区限制

3.1 访问等级与许可

这条目属于 PhysioNet 的 Restricted Access 类:须注册账户、签署 PhysioNet Restricted Health Data Use Agreement 1.5.0。

许可不是常见的 CC 或 ODC 系列,是一份专门的数据使用协议。它的核心不是「允许你用」,是「约束你怎么用」——不得再识别、不得转移给第三方、不得用于商业目的、成果须声明、违约须报告。

3.2 地区限制这条要说清楚

数据集条目页在文件区直接显示:Data is not available in your region due to legal or policy restrictions.

这意味着在某些司法辖区,即使签了协议、通过了审批,文件仍然拿不到。这个限制的来源是数据出口的合规要求,不是作者的选择,也不是 PhysioNet 的选择。

对使用者的实际影响有三条。一是无法核对文件清单,因此文件数、命名、体量都无法独立验证——本页不给出任何按文件核对的数字,原因在此。二是无法用「先下一小段看看格式」这种方式做可行性评估,只能靠文档描述来规划。三是若你的机构在受限地区,整个工作流要换方案:找合作机构代管数据,或者改用同作者早期发布的公开数据集(见 §7.3)。

3.3 审批流程与时间预期

PhysioNet 的受限数据流程通常是:注册账户 → 完成 CITI「Data or Specimens Only Research」培训并上传证书 → 提交数据使用协议 → 等待数据保管方审批 → 获批后获得下载权限。

时间是这段流程里最不可控的变量。同一平台上不同项目由不同机构托管,审批速度差异很大,从几天到数月都有。这类「单中心、含术中事件标注」的数据往往审批更慢,因为要确认申请人所在机构有能力履行协议。

规划时应把审批时间当作关键路径,而不是下载时间。

3.4 引用与致谢要求

文档给了标准引用格式(作者、年份、标题、版本、PhysioNet、DOI 10.13026/gs4v-4q80),并要求同时引用 PhysioNet 平台本身的标准引用。最新版 DOI 为 10.13026/gzmm-5h49,引用具体版本时用前者。

致谢部分列出的资助来源包括 JPB 基金会、Picower 研究所、NSF 研究生奖学金与 MIT 的 Collamore-Rogers 奖学金。这些在正式发表时应按资助方要求声明。

§4 质量:从窗口折损到标注语义

4.1 五秒窗与事件时刻的错位

标注是按窗口给的二值量:noc_stim[k] = 1 表示第 k 个五秒窗口内存在伤害性刺激。

这个定义有两个歧义,都会影响建模。

歧义一,边界。 一次刺激从第 4 秒开始、第 7 秒结束,它落在第 k 窗(0–5 秒)与第 k+1 窗(5–10 秒),按定义两个都标 1。但两个窗口里刺激的「含量」不同:前者只有 1 秒,后者有 2 秒。二值化把这种差别抹掉了。

歧义二,延迟。 生理反应滞后于刺激。切皮之后,心率上升常在 5 到 15 秒才明显。也就是说,noc_stim 为 1 的窗口,其特征往往还没反映刺激;真正反映刺激的特征出现在后续两三个窗口里,而那些窗口的标记可能已经是 0。

这两条合起来意味着:用同一窗口的特征去预测同一窗口的标记,是在学一个错位的因果。 有些研究会有效,是因为刺激往往持续多个窗口,标签有自相关;但正确的做法是引入滞后窗口作为特征。

4.2 标注是代理,而且通常是超集

作者的原文表述值得完整引一次:疼痛研究里没有客观金标准,我们永远不知道病人实际何时经历了伤害性感受;伤害性刺激的标注是一个代理,而且通常是一个超集。

「超集」这个词用得很准,含义是:标出来的事件里,有一部分在生理上并没有引起可测的反应。切开皮肤不一定引起交感兴奋(麻醉够深时不会);牵拉腹膜在浅麻醉时反应剧烈,在深麻醉时可能毫无波澜。但标注只看「做了什么操作」,不看「有没有反应」。

反过来,也有「漏标」的情况:没有外部操作,但病人因为麻醉变浅而出现交感兴奋。这类事件在数据里没有标记,会被当成负样本。

所以正样本里混着真阴,负样本里混着真阳。任何在这个数据上训练出来的模型,其准确率上限都被标注语义锁死了。

4.3 人工标注的时间误差

文档明确说:所有人工标注都可能有人为误差,在确切时间上尤其如此。

这条的实际影响取决于标注是同步做的还是回看补的。同步记录(手术现场有人专门记)的时间误差约在秒级;回看录像补标误差更小,但需要录像与信号严格同步,而录像时钟与监护仪时钟常有偏移。

数据里没有给标注置信度字段,也没给「标注者是谁」的字段。因此无法评估标注者间一致性——这是一个无法从数据内部补上的空缺。

4.4 药物信息的粒度

timeSince 与 cumulDose 是按类给的:每类药一个上次给药时间、一个累计剂量。

这种粒度的三个代价。一是同类药不加区分——芬太尼与瑞芬太尼同属 Antinoc,但作用时程差一个数量级,把它们合并成「距上次镇痛药给药的时间」,会抹掉药代动力学差异。二是剂量归一化方式未公开——cumulDose 是「归一化」的,但相对什么归一化(体重?最大推荐剂量?本队列最大值?)文档没说。三是给药途径未记——静脉推注与持续输注在时间曲线上完全不同,字段里分不出来。

要做精细的药效建模,这些信息缺失会直接限制模型的上限。

4.5 原始波形不在发布范围

这条是最实际的一种限制:数据给的是特征,不是信号。

后果是:你无法用这份数据尝试别的特征提取方法(比如用深度学习直接从心电波形学表征),也无法验证作者的点过程特征是不是最优的。你只能接受这三十个数,在它们上面做模型选择。

作者在 Usage Notes 里说这份数据已用于设计新的术中伤害性感受追踪算法(论文即将发表)。若想复现或超越,只凭特征层面是不够的,需要另行申请原始信号。

4.6 麻醉深度与伤害性感受的耦合

这份数据没有麻醉深度指标(如脑电双频指数或爆发抑制比)。这是一个容易被低估的缺口。

伤害性感受的反应强度依赖麻醉深度:同样一次切皮,浅麻醉下心率可能跳二十次每分,深麻醉下纹丝不动。也就是说,noc_stim = 1 的窗口里,生理反应的有无与幅度,主要由麻醉深度决定,而麻醉深度没有被记录为变量。

数据里有七氟烷的累计剂量(Sevo 类),它是麻醉深度的一个代理——呼气末浓度与脑内浓度相关。但累计剂量不等于当时浓度:七氟烷洗入洗出有分钟级的时间常数,累计剂量单调上升,实际浓度会随维持策略波动。用累计剂量当浓度用,会在麻醉维持期的中段产生系统性偏差。

这个缺口的实际后果是:模型学到的「刺激→反应」映射,实际上是「(刺激,麻醉深度)→反应」的边缘化。在麻醉深度分布与训练集不同的场景下,这个映射会漂移。

4.6 单中心与用药习惯的绑定

全部数据来自麻省总医院一个麻醉团队的手术室,2018 至 2022 年。

这意味着用药组合、监护配置、刺激类型都带有机构特征。比如若该团队习惯用七氟烷维持加间断芬太尼推注,那么数据里 Sevo 与 Antinoc 的时序模式就会呈现出这种习惯的特有形状;换一个以丙泊酚全静脉麻醉为主的中心,同样的模型可能失效。

跨机构验证在这份数据上做不到,只能靠外部数据。

4.7 DAIMS 二十四项对照

按数据集元数据充分性(DAIMS)的常见口径逐项对照,结果如下。

维度 判定 说明
目的与用途说明 是 摘要与 Background 说明采集动机与研究目标
采集方法描述 是 说明设备、信号类型、点过程建模路径
采样率与窗口 是 256 赫兹、5 秒,明确给出
变量清单与顺序 是 phys_ind_order 逐项列出,含导数
单位说明 部分 索引多为无量纲,皮电与心率的物理单位未逐项标注
时间戳与绝对时间 否 只给窗口序号,无手术起止时刻
受试者人口学 否 无年龄、性别、ASA 分级
队列纳入排除标准 否 未给出纳入排除条件
药物名称与剂量 部分 九类药的类名与归一化剂量,无具体药名与体重换算
标注定义 是 明确说明伤害性刺激的定义与代理性质
标注者与一致性 否 未说明标注人数与一致性指标
缺失数据处理 部分 说明有 NaN 插补,未说明方法
信号质量指标 否 无逐窗口质量标记
数据划分建议 部分 配套代码用留一受试者,文档未强制
代码可用性 是 六个 MATLAB 脚本随数据提供
代码依赖说明 部分 依赖第三方状态空间工具箱,链接给出
许可与访问条款 是 Restricted Health Data License 1.5.0 明确
伦理审批 是 MGH 人体研究委员会 2017P002591
知情同意 是 说明所有参与者签署书面知情同意
资助来源 是 逐项列出
利益冲突 是 作者声明无
版本与 DOI 是 v1.0,两个 DOI
已知限制 是 作者主动写明无客观金标准
地区可用性 是 页面明示地区限制

是 12 项,部分 8 项,否 4 项。缺得最多的集中在「人」这一侧——人口学、纳入标准、标注者、质量标记,这四项都不是技术细节,是能不能做分层分析与误差分析的前提。

§5 能做什么:五类用法与它们各自的前提

5.1 用法一:训练一个窗口级的伤害性刺激分类器

最直接的用法:输入三十个特征(可选加给药信息),输出该窗口是否有刺激。

前提是必须承认 §4.1 的错位问题。合理做法是把前几个窗口的特征拼进来(时间嵌入),并用「刺激起始窗口」而非「全部刺激窗口」作为正类,以减少重复计数。评估时用留一受试者交叉验证,且必须报告基线——用 MuHR 与 SigmaHR 两个特征做逻辑回归的基线,若复杂模型赢不过它,说明不了什么。

5.2 用法二:复现与批判 ANI

数据附了同场次的 ANI 输出,这给了做对照实验的条件。

ANI 是基于心电的商用指数,算法不公开,输出范围 0 到 100,数值越高表示镇痛越充分。用这份数据能做的事:在同一批手术上比较 ANI 与作者的索引对刺激的响应延迟、响应幅度、以及在给药后的恢复速度。能做的事不包括:解释 ANI 为什么这样表现(黑箱)。

作者的 Compute_ANI_performance.m 与 Replicate_ANI_study.m 两个脚本就是为这个用途准备的。

5.3 用法三:研究麻醉策略与生理效应的关系

因为每个窗口都带九类药的 timeSince 与 cumulDose,可以把「给药」当自变量、「生理索引」当因变量,做时间序列上的关联分析。

典型问题:推注一次阿片之后,MuHR 与 TotalPower 各在多少秒后开始下降、降多少、持续多久。这类问题的答案有直接的临床用途——它是给药间隔的经验依据。

做这类分析的陷阱是混杂:给药往往是因为观察到了反应,构成「反应→给药」的反向因果。要处理这一点,需要用刺激事件作为外生冲击(刺激不由生理状态决定),做刺激前后的分段比较。

5.4 用法四:做自主神经动力学的方法学研究

皮电的脉冲率给了两套参数化(对数正态与逆高斯),心率给了逐拍的点过程估计。这为比较不同参数化假设提供了现成数据。

可做的题目:两套脉冲率参数化在同一批数据上的拟合优度差异、逐拍心率估计与窗口平均的偏差、导数特征在噪声放大上的代价。这些都是方法学问题,不需要临床结论支撑,因此不受 §4.2 标注语义的限制。

5.5 用法五:给药时序的预测建模

反过来,用生理特征预测「下一个给药事件何时发生」。

这个任务比刺激分类更贴近临床决策:麻醉医生看监护仪,决定要不要推药。若一个模型能在一分钟前预测「该给镇痛了」,即使它的准确率不高,也有实用价值。

这个任务的优势是标签可靠——给药事件有时间戳、有剂量,不像刺激标注那样是代理。劣势是它学的是医生的行为,而医生的行为本身有机构习惯(§4.6)。

5.6 三类用法之间的优先级

若只能选一个,选 §5.3:它不依赖刺激标注的语义,也不要求跨患者泛化,结论可以直接被临床读。

若目标是发表方法学论文,选 §5.4:它把限制(标注不可靠)绕开了,只谈信号处理。

§5.1 是最热的方向,也是最容易做出「看起来很好但不可用」结果的方向,做它之前请先读 §6。

§6 常见误读与五处陷阱

6.1 误读一:把 49,878 当独立样本

四万九千八百七十八个刺激标注,听起来样本量很大。但它们是嵌套在一百零一台手术里的——同一台手术内的窗口高度相关(相邻窗口相隔五秒,生理状态几乎不变)。

把窗口当独立样本做交叉验证,会得到严重乐观的估计。正确的验证单位是手术,不是窗口。

6.2 误读二:把「超集标注」当金标准

作者的坦白很容易被忽略:标注是超集。这意味着即使模型完全正确,它也会在那些「标了但没反应」的窗口上被判错。

所以准确率这个指标在这份数据上意义有限。更有意义的指标是:模型对刺激的响应是否早于给药决策、是否领先于 ANI 的变化。这些都是相对指标,不依赖绝对真值。

6.3 误读三:把 ANI 当答案

ANI 是数据里唯一一个「看起来像标准答案」的列。但它自己也是估计值,且在同一批数据上已被作者证明不如他们的索引(这是作者的结论,见 §5.2 的中立处理建议)。

用它做标签训练模型,等于蒸馏一个特定算法,而不是逼近生理真实。

6.4 陷阱一:归一化列跨患者比较

X_norm_noNan 是每台手术单独归一化的。若把一百零一台的归一化数据拼起来算总体均值,得到的是一个无意义的数。

同理,用归一化数据训练跨患者模型,会学到一个「相对于本台手术自身」的模式,而这个模式在测试时又用测试患者自身的统计量归一化——这个循环在文献里被反复踩。

6.5 陷阱二:导数的噪声放大

十五个导数是一阶差分。差分对噪声的放大是平方级的:若原特征的信噪比是 10,差分后可能降到 3 以下。

皮电相关的六个特征(MuAmp、SigmaAmp、两个脉冲率参数化的均值与标准差)本身估计方差就大,再取差分,得到的可能是纯噪声。使用导数特征前,先看它在静息段(无刺激、无给药)的波动幅度——若静息段的导数已经在跳,那它测的不是事件。

6.6 陷阱三:把五秒窗当响应时间

「刺激后五秒内心率上升到多少」这个问题,五秒窗的数据回答不了。它只能回答「刺激所在的那个五秒窗口的平均心率是多少」。

要估计响应时间,必须用刺激窗口之后的多个窗口做序列分析,且窗口间有重叠效应(一个刺激横跨多窗),估计出的潜伏期会被系统性拉长。

6.7 陷阱四:忽略 NaN 插补

noNan 后缀意味着插补过。若某个患者的皮电全程无脉冲(比如电极接触不良或极度出汗后基线漂移),插补会把整段填成常数值,而这个常数值在归一化后看起来完全正常。

做患者级质控时必须自己算:每个特征的非插补比例是多少?若很低,整台手术的相关特征不可用。

6.8 陷阱五:把观察数据当干预证据

这是观察性研究。所有「给药后心率下降」的关联,都不能读成「给药导致心率下降」——因为给药本身是对某项观察的反应,且给药与手术进程(刺激强度)在时间上高度混杂。

要接近因果,需要借助外生变量:刺激事件的时间由手术步骤决定,不由病人状态决定,因此可以当工具变量用。

§7 在生态中的位置

7.1 与公开的疼痛/伤害性感受数据的关系

公开可得的术中数据里,绝大多数是监护仪波形(MIMIC 系列的重症数据、VitalDB 的术中数据),它们有生理信号、有部分药物记录,但几乎没有「刺激事件」这一层标注。

这份数据的独特性就在这一层。它不提供更多信号,它提供的是「信号对应的外部事件」。这是它与 VitalDB 一类数据的根本区别:后者能回答「术中低血压与术后结局的关系」,前者能回答「切皮后第几秒心率开始变」。

7.2 与同作者早期数据的关系

作者此前发布过三份公开数据:健康志愿者清醒静息状态下的皮电、丙泊酚诱导的无意识过程的自主神经与行为动力学、以及受控镇静下的皮电脉冲幅度。这三份都是公开访问的,且都在 PhysioNet 上。

关系是方法上的:那三份用来验证点过程模型本身,这一份把同一套模型搬到真实手术室。若想先熟悉方法再看数据,可以按这个顺序:先读健康志愿者的那份(最简单、最干净),再读本数据集。

7.3 在「AI-Ready」意义上的定位

从机器学习的常见标准看,这份数据的 AI 就绪度是中等偏上:

标签有(虽然是代理)、特征有(虽然不可扩展)、划分方式有建议(留一受试者)、代码有(六个 MATLAB 脚本)。

扣分项集中在可复现性:地区限制让一部分人拿不到,原始波形不在发布范围让特征层面的创新不可能,人口学信息缺失让分层分析做不了。

7.4 与影像类多模态数据的区别

「多模态」这个词在这里的含义与影像领域不同。影像多模态通常指同一病人的多种成像(CT、MRI、PET);这里指的是同一时刻的多条生理通路(心脏自主神经、汗腺交感神经)加药物暴露。

这个区别影响数据规模:影像多模态的单样本是几百兆,这里单样本不到一兆;影像多模态的样本量是几百到几万,这里是一百零一。规模小意味着适合方法验证,不适合预训练。

7.5 适合谁用

三类人最适合。

做生理信号方法学的:这份数据给了现成的多通道、多参数化、带事件的测试床。

做围术期临床研究的:刺激与给药的逐秒对齐在别处拿不到,适合做给药策略的回顾性分析。

做监护器械评估的:有 ANI 同场对照,可以做器械性能的独立评价(前提是遵守 §6.3 的中立性)。

不适合的两类:想直接训练「疼痛识别大模型」的(数据量与标注语义都不够),以及想做跨中心泛化的(单中心)。

§8 建模的实操建议

8.1 时间嵌入是第一步,不是可选项

因为 §4.1 的延迟问题,输入不应只有当前窗口的三十个特征。合理的输入是当前窗口加之前两到四个窗口(10 到 20 秒的前史),让模型自己学潜伏期。

代价是特征维度翻几倍,在只有一百零一台手术的情况下,这要求模型必须强正则。

8.2 验证单位必须是手术

留一受试者交叉验证(LOSO)是这份数据唯一站得住的验证方式。配套的 LogReg_modeling_nociception.m 与 RandomForest_modeling_analysis.m 都实现了 LOSO,可以直接读来确认做法。

不要用随机划分窗口。那样做出来的 AUC 常在 0.95 以上,但这个数没有意义。

8.3 三个必须报告的指标

除了常规的 AUC 与准确率,建议加三个:刺激起始检测的延迟中位数(模型报警比刺激晚多少秒)、给药前的预警率(在医生推药前 N 秒内模型是否已升高)、静息段误报率(无刺激无给药的时段里模型报了多少次)。

后两个直接对应临床可用性,比 AUC 更能说明问题。

8.4 基线一定要做

最简单的基线:把 MuHR 与 SigmaHR 直接线性组合去预测刺激。这个基线在这个数据上不会太差,因为刺激确实会改变心率。

如果复杂模型(随机森林、LSTM、Transformer)赢不过这个基线,说明模型学到的是噪声。作者自己用的就是逻辑回归与随机森林两个可解释模型,这个选择是刻意的:在样本量一百零一的规模上,可解释性比表达能力更值钱。

8.5 过拟合的迹象

四条早期信号:训练集 AUC 与验证集 AUC 的差距随 epoch 单调扩大;模型在静息段(无刺激)的输出分布与刺激段分离得过好(现实中不该这么干净);去掉任一特征后性能大幅下降(说明依赖单一特征);换一个随机种子结果变化超过五个百分点。

第四条在这份数据上尤其重要,因为样本量小,随机性本来就大。

8.6 状态空间模型为什么值得一试

作者还用了无监督的状态空间模型:假定观测到的 HRV 与 EDA 索引由两个隐状态驱动,对应交感和副交感。这个假设来自生理直觉——自主神经状态至少有两个维度。

这种做法在没有可靠标签时比监督学习更稳:它不依赖 noc_stim 的正确性,只依赖「生理状态是低维且连续变化」这个假设。代价是隐状态没有直接解释,需要事后用刺激与给药事件去标定。

8.7 五条失败模式

一,模型学到了手术阶段而非刺激——手术后期刺激密集、给药也密集,模型可能只是在识别「手术进行到第几分钟」。

二,模型学到了给药模式——因为给药是对刺激的反应,模型可以从给药特征反推刺激,这不是生理识别,是行为模仿。

三,模型学到了患者身份——一百零一人、三十个特征,足够让模型记住个体基线。LOSO 能挡住这条,随机划分挡不住。

四,模型对窗口长度敏感——换成三秒或十秒窗,性能大幅变化,说明它依赖的是窗内的平均而非事件的形态。

五,模型在低血压段失效——血压低时心率变异的解释变了(压力反射主导),索引的语义跟着变。

§9 三条技术路线的对照

这一节把前面散落的技术选择集中比较,因为它们对数据的要求不同,也决定了这份数据够不够用。

9.1 监督分类:对标签质量的要求最高

输入三十个特征,输出刺激有无。这条路线的问题全在标签上(§4.2)。它能做出好看的指标,但很难做出可用的器械。

适用场景:方法学论文、教学示例、与 ANI 的对照实验。

9.2 点过程与状态空间:对假设的要求最高

不直接预测标签,而是先建生理模型(心跳的条件强度、汗腺脉冲的间隔分布),再从模型参数导出状态。

这条路线的优势是不依赖标签;劣势是每个假设都要辩护——为什么心跳用这个强度函数、为什么脉冲间隔用对数正态而不是逆高斯。作者的实现给了两套参数化,正是为了让这个辩护有据可依。

适用场景:生理机制研究、需要解释性的场景。

9.3 端到端深度模型:对数据量的要求最高

直接把窗口序列喂进时序网络。这份数据只有一百零一人,端到端训练几乎必然过拟合。

若要做,合理路径是先在大的术中波形库(如 VitalDB)上预训练,再用这份数据做微调与评估。但那样一来,特征层面的可比性就断了——预训练用的是波形,微调用的是三十个标量。

9.4 选择建议

若目标是「做一个能用的指标」,走 §9.2:先把生理模型立住,再用数据标定,最后用刺激事件验证响应。

若目标是「证明某个特征有效」,走 §9.1 但必须配 LOSO 与简单基线。

若目标是「刷一个 SOTA」,这份数据不合适——它太小,且标签不干净。

§10 术语与口径速查

术语 本页用法
伤害性感受 有害刺激引起神经通路激活的过程,全麻下仍存在,不等同于痛觉
抗伤害性感受 压制上述过程的干预,是全麻四要素之一
ANI 镇痛伤害性感受指数,基于心电的商用指标,现称 HFVI,0 到 100
HRV 心率变异性,本文特指由心跳间隔序列导出的频域与时域量
EDA 皮电活动,反映汗腺交感神经支配
紧张性皮电 皮电的慢变成分,对应基础出汗水平
相位性皮电 皮电的脉冲成分,对应汗腺的瞬时分泌事件
点过程模型 把事件时刻看作条件强度函数实现的统计模型
瞬时心率 由点过程逐拍估计的心率,不是窗口平均
LOSO 留一受试者交叉验证,每次留出一名受试者的全部数据做测试
归一化剂量 文档未说明归一化基准的累计给药量
超集标注 标出的正样本包含部分实际无反应的窗口

§11 事实清单与附录

11.1 核心事实

项目 值
全称 Multimodal Physiological Indices During Surgery Under Anesthesia
版本 1.0(2024-08-23 发布)
DOI 10.13026/gs4v-4q80(本版);10.13026/gzmm-5h49(最新)
托管 PhysioNet
访问等级 Restricted Access
许可 PhysioNet Restricted Health Data License 1.5.0
手术台数 101
总时长 18,582 分钟
刺激标注数 49,878
采集年份 2018 至 2022
采样率 256 赫兹
窗口长度 5 秒
特征数 15 个索引 + 15 个导数
药物类别 9 类
格式 MATLAB 结构体 + CSV
伦理审批 MGH 人体研究委员会 2017P002591
作者单位 麻省总医院、MIT、约翰霍普金斯大学、米兰理工大学

11.2 五个可立即验证的疑问

一,五秒窗口的实际总数是多少?按 18,582 分钟推算应约 222,984 个窗口,但若中间有丢窗,实际会少。逐台统计能看出丢失模式。

二,cumulDose 的归一化基准是什么?比较同一类药物在不同手术里的最大值,若都接近 1,说明是按本队列最大值归一化。

三,NaN 插补的比例有多高?逐特征、逐手术统计。

四,noc_stim 为 1 的窗口占比是多少?若远高于刺激事件的真实密度,说明一个刺激横跨多窗造成的重复计数严重。

五,ANI 与作者索引的响应延迟差多少?用刺激起始窗口做对齐,画两条平均响应曲线。

五个问题都不依赖外部信息,拿到数据即可算。

11.3 配套代码清单

文件 用途
LSSMspxem.zip 线性高斯状态空间建模的 EM 算法包(第三方)
LogReg_modeling_nociception.m 逻辑回归,留一受试者交叉验证
RandomForest_modeling_analysis.m 随机森林,留一受试者交叉验证
StateSpace_modeling_initialization.m 状态空间模型初始化,逐受试者反向跑
StateSpace_modeling_nociception.m 状态空间模型训练,留一受试者
Compute_ANI_performance.m 计算对照监护仪的性能
Replicate_ANI_study.m 复现对照监护仪的其他研究方法

全部是 MATLAB。要在 Python 里复现,需要自己实现或找替代包,这是迁移成本之一。

11.4 附录 A:确认窗口与时间轴的最小脚本

import numpy as np, scipy.io as sio
print("── 载入结构体,确认字段 ──")
D = sio.loadmat('OR_data.mat', squeeze_me=True, struct_as_record=False)
OR = D['OR_data']
print(len(OR), OR[0]._fieldnames)
print("── 逐台统计窗口数与正样本比例 ──")
rows = []
for k, s in enumerate(OR):
    ns = np.asarray(s.W_5sec.multiS_noDrug.noc_stim).ravel()
    rows.append((k + 1, ns.size, ns.mean()))
tot_w = sum(r[1] for r in rows)
tot_pos = sum(r[1] * r[2] for r in rows)
print("窗口总数", tot_w, "正样本窗口", int(tot_pos), "占比", round(tot_pos / tot_w, 4))
print("── 检查是否有手术窗口数为零 ──")
print([r[0] for r in rows if r[1] == 0])
print("── 推算窗口总数与时长是否自洽 ──")
print("按 18582 分钟推算应约", 18582 * 60 // 5)

这段跑完,§11.2 的前四个问题里有三个就有答案了。第五个要画响应曲线,稍复杂。

11.5 附录 B:刺激与给药的时序对齐

要研究「推药后生理怎么变」,需要把三个时间序列对齐:刺激窗口、给药窗口、特征窗口。数据的三个量都以五秒窗口为索引,所以对齐是索引对齐,不需要内插。

import numpy as np
def events_to_windows(index_list, n_win):
    v = np.zeros(n_win, dtype=int)
    for i in index_list:
        if 0 <= i < n_win:
            v[i] = 1
    return v

def response_curve(feat, event, pre=4, post=12):
    """feat 与 event 等长;返回事件前后 (pre+post) 个窗口的平均曲线与计数"""
    idx = np.where(event == 1)[0]
    keep = idx[(idx >= pre) & (idx < len(feat) - post)]
    stack = np.array([feat[i - pre:i + post] for i in keep])
    return stack.mean(axis=0), len(keep)

用这个函数可以画「刺激前 20 秒到后 60 秒」的 MuHR 平均曲线,也可以画给药后的曲线。两者的形状差异(刺激后的上升与给药后的下降)是这份数据最直观的一张图。

11.6 附录 C:证据链

  • 数据集条目页:https://physionet.org/content/multimodal-surgery-anesthesia/1.0/(Abstract、Background、Methods、Data Description、Usage Notes、Release Notes、Ethics、Acknowledgements、References 各节)
  • 文件区在本次访问时显示地区限制提示,未列出文件清单,因此本页不含文件级统计
  • 伦理编号、资助来源、DOI、许可版本均取自条目页原文
  • 三条关联数据集的 DOI 见 §7.2

凡属分析性内容(§4.7 的 DAIMS 判定、§2.6 的体量估算、§8 与 §9 的建模建议、§11.4 与 §11.5 的脚本)为基于公开材料与领域常识的推演,非官方结论。凡标注「文档说」「作者说」的均为条目页原文表述。

编辑说明

本页依据 PhysioNet 条目页(2026-10-19 取)写成,未获得数据文件本体:条目页文件区显示地区限制,本页在访问时无法查看文件清单与校验和。因此本页不含任何按文件核对的统计,所有数字都来自条目页的定量描述。

这一篇的写作难点在于「可核对的东西太少」。前几篇能把文档数字与文件内容对照,找出不一致;这一篇两者都摸不到。作为补偿,本页把「文档说了什么、没说什么」逐项拆开(§2.5 队列构成、§4.2 到 §4.4 的标注与药物粒度、§4.7 的 DAIMS 表),并在 §11.2 列出拿到数据后可以立刻验证的五个问题。

本页未做的事:未读作者即将发表的方法论文(条目页只说「即将发表」),因此 §9.2 对点过程与状态空间模型的描述基于条目页的方法段与已发表的三篇前置论文标题,具体实现细节需核对原文;未验证 §2.6 的体量估算,因为没有文件可量;未评估标注的一致性问题,因为数据里没有标注者字段。

关于「疼痛无客观金标准」这一条:本页在 §4.2 与 §6.2 两处重复强调,不是冗余。这是这份数据最容易被误用的地方——它把「有没有做某个操作」标了出来,而很多人会把它读成「病人有没有感到疼痛」。前者可复核,后者不可知。作者自己在 Usage Notes 里主动写明了这一点,这份坦白应当被继承,而不是被引用时省略。


相关数据集导航

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

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

返回 AI-Ready 数据集