丙泊酚镇静下的行为与自主神经动态:9 人 10 阶段

九名健康志愿者,三小时,丙泊酚浓度从零升到五再降回零,十个阶段——这份数据的价值不在于样本有多小,而在于它把「意识消失」与「心跳皮电怎么变」放在同一条时间轴上,并给出了可复用的点过程工具链

来源 麻省总医院(Massachusetts General Hospital)人类研究委员会批准方案;麻省理工学院与麻省总医院合作采集发布时间: 2026-10-19最后更新: 2026-10-20 阅读 16
丙泊酚镇静下的行为与自主神经动态:9 人 10 阶段

信息速览

数据集名称丙泊酚镇静下的行为与自主神经动态:9 人 10 阶段
数据类型丙泊酚,镇静,心率变异性,皮电活动,自主神经,点过程模型,意识水平,靶控输注
规模9
接入方式麻省总医院(Massachusetts General Hospital)人类研究委员会批准方案;麻省理工学院与麻省总医院合作采集
AI 就绪度

麻醉医生在手术中判断病人「够不够深」,主要靠三样东西:呼出气麻醉药浓度、脑电双频指数、以及血压心率有没有动。前两样测的是「给了多少」,第三样测的是「身体怎么反应」。中间缺了一环——身体反应里最敏感的那部分,也就是交感神经的即时活动,监护仪并不直接给。

丙泊酚让这件事变得可以研究。它把病人从清醒推到无意识,再推回来,中间不掺手术创伤、不掺失血、不掺合并用药。如果把这一路的浓度变化做成阶梯,每一步都停够时间让身体稳态,那么每一次「心率变了」「皮电变了」,都能和当时的药物浓度对上号。这份数据做的就是这件事:九名健康志愿者,每人约三小时,丙泊酚目标浓度按 0、1、2、3、4、5、3.75、2.5、1.25、0 毫克每千克每小时十个阶段升降,每阶段约十五分钟。全程录心电与皮肤电导,导出逐拍的心率变异性索引和逐事件的皮电索引,并用按钮反应任务标出意识消失与恢复的时刻。

样本只有九个人,这是它最显眼的短板,也是它最容易被误用的地方。想知道九个人为什么还能做统计,看 §2.4 与 §8.2;想直接拿它训练麻醉深度模型,先读 §4 与 §6.9;只关心能不能下载,看 §3。

§1 它是什么:一条被切成十段的意识轨道

1.1 一句话定义与四条边界

这是一份前瞻性实验数据集:9 名健康志愿者在丙泊酚靶控输注下,经历十个浓度阶段,全程记录心电与皮电,导出心率变异性与皮电活动的点过程索引,附意识消失与恢复的时刻标注,并配一套可复现分析的 Matlab 代码。

四条边界先摆出来。

第一,给的是索引,不是原始波形。 目录里全是 CSV,装的是从原始信号导出并按窗口汇总的标量。想知道原始心电长什么样、自己换一套特征提取方法来比对,做不到——原始波形不在此次发布范围内。

第二,没有脑电。 这是作者在 Usage Notes 里主动写明的一条限制。丙泊酚的脑电特征(慢波与 α 波的交替)是麻醉深度监测的主流依据,这份数据一点都没有。所以它不能用来做「脑电加自主神经的多模态融合」这类研究,只能做自主神经这一侧的分析。

第三,没有血压。 同样在 Usage Notes 里明说。丙泊酚是血管扩张剂,血压下降是它最典型的循环效应之一。数据里只有心率与心率变异性,血压这一路的信息缺失,意味着「压力反射」这条解释路径只有半条。

第四,九个人,健康,青壮年。 没有老年人、没有心血管合并症、没有长期用药。任何要在真实病人身上用的结论,都必须重新验证。

1.2 丙泊酚为什么是个好用的研究工具

要理解这份数据为什么值得做,得先理解为什么选丙泊酚。

丙泊酚的作用靶点相对清楚。它主要作用于 γ-氨基丁酸 A 型受体,增强抑制性电流,从而广泛抑制皮层、丘脑与脑干的神经元放电。这种抑制不是让脑电变得「平」,而是让它变得高度有序——在意识消失前后,脑电出现特征性的慢波与 α 振荡交替。这一点是丙泊酚区别于氯胺酮、右美托咪定等药物的关键:它产生的是「有结构的无意识」。

对自主神经的影响也是多路的。第一,它扩张血管,血压下降;第二,通过压力反射,心率可能短暂上升,但随着心肌抑制效应显现,心率总体下降;第三,它降低汗腺的基础充盈水平,并提高自发性与诱发性出汗的阈值。

第三条对这份数据尤其重要。皮电测的就是汗腺活动,而丙泊酚直接压低了汗腺的基线——这意味着皮电的下降本身有一部分是药物对效应器官的直接作用,不全是中枢交感张力下降。这个区分在解读时绕不过去,§4.4 会展开。

1.3 十个阶段是怎么排的

实验流程可以概括为「两段基线 + 六段上升 + 四段下降」。

目标浓度依次是 0、1、2、3、4、5、3.75、2.5、1.25、0 毫克每千克每小时。前面两段 0 分别叫麻醉前基线与麻醉后基线;中间从 1 到 5 是六个上升阶段;之后 3.75、2.5、1.25、0 是四个下降阶段。每段约十五分钟。

为什么是阶梯而不是斜坡?因为要等稳态。靶控输注虽然按模型算血药浓度,但效应室的平衡有延迟——血浆浓度到位了,脑内浓度还在追。十五分钟大致够效应室浓度追平,这样每一段的生理读数才能代表「这个浓度下的稳态」,而不是「正在变化中的某一刻」。

为什么下降段只到 3.75、2.5、1.25?因为下降段取的是上升段的中间值,这样可以比较「同一浓度、上升途中」与「同一浓度、下降途中」的差异。这个设计指向一个具体问题:是否存在滞后现象——同样浓度下,正在加深与正在变浅的生理状态是否相同。这是麻醉药理学里的经典问题,叫滞后环(hysteresis)。

理解了这层设计,就能明白为什么 §8.2 要强调「按受试者分段交叉验证」:十段之间不是独立的,同一受试者的前后段共享同一个人、同一套电极、同一个当日状态。

1.4 意识消失与恢复是怎么判定的

判定方式是按钮反应任务。受试者手里握一个按钮,被要求听到提示音就按。研究者记录反应的有无,据此标出意识消失(LOC)与恢复(ROC)的时刻,单位是秒。

这个方法简单、可重复、不需要额外设备,是麻醉研究里的通行做法。但它有一个必须说清的性质:它测的是「能不能按要求做动作」,不是「有没有意识」。

这两件事在多数情况下同步,但不同步的情形也不少。受试者可能仍有意识,但手没力气按;也可能已经无意识,手上还残留着对声音的反射性动作。丙泊酚作用下,运动通路本身会被抑制,这会系统性地让 LOC 判定偏早(还没真正失去意识就已经按不动了),让 ROC 判定偏晚(意识恢复了但还按不动)。

数据里给 LOC 与 ROC 各一个时刻,没有给不确定区间。用它做监督学习的标签时,这个模糊性会直接变成标签噪声,而且是有方向性的噪声。

1.5 一个关键细节:两个基线不是同一个基线

这是这份数据里最容易被忽略、又最影响解读的一点。

实验有前后两个 0 毫克每千克每小时阶段,分别叫麻醉前基线与麻醉后基线。名字对称,状态不对称。

理由有三层。第一层是药物残留:丙泊酚的效应室浓度在输注停止后需要一段时间才降到可忽略,最后一段十五分钟不一定够。第二层是生理疲劳:三个小时的卧床、电极贴附、反复测试,本身就改变了自主神经状态。第三层是昼夜节律:三小时在一天里跨越的时段,足以让心率变异性出现可测的漂移。

所以「前后基线之差」这个量,混合了药物残留、疲劳、节律三种成分,不能直接读作「麻醉的持续影响」。若要做基线校正,更稳妥的做法是用前一个基线做参照,把后一个基线当作独立的观察点来分析,而不是把它当成「恢复原状」的证据。

1.6 它不适合回答什么

把这句放在前面,能省掉很多误用。

它不适合回答「这个指标能不能监测麻醉深度」——九个人、健康、程序化给药,不足以支撑临床效度结论。

它不适合回答「丙泊酚对心脏有什么影响」——没有血压、没有每搏量、没有超声,只有心率和心率变异性。

它不适合回答「麻醉后自主神经多久恢复」——两个基线之间的差异混杂了太多成分,且随访只到最后一阶段结束。

它不适合做人群推断。九个人的年龄、性别、体质分布不支持任何关于「一般人」的结论。

它适合回答的,是方法学问题:点过程索引在这些条件下能不能稳定估计?行为状态与自主神经状态是否同步变化?多模态(心率变异性加皮电)是否比单模态提供更多信息?这些问题的答案不依赖样本量,依赖的是同一批人身上反复测量的精度。

§2 数据构成:九个受试者与十九类文件

2.1 目录里到底有什么

Data 目录的组织方式是按受试者编号展开,每人一组 CSV,文件名以 S# 开头(# 从 1 到 9)。按作者在 Data Description 里的列举,文件分四组。

第一组是心率变异性:S#_muRR.csv、S#_sigmaRR.csv、S#_muHR.csv、S#_sigmaHR.csv、S#_pow_tot.csv、S#_ratio.csv、S#_LF.csv、S#_HF.csv、S#_LFnu.csv、S#_HFnu.csv。十个文件,前四个是时域,后六个是频域。

第二组是皮电:S#_eda_tonic.csv、S#_muPR.csv、S#_sigmaPR.csv、S#_mu_amp.csv、S#_sigma_amp.csv。五个文件。

第三组是时间戳:S#_t_HRV、S#_t_EDA_tonic、S#_t_EDA。三个文件,没有 .csv 后缀。

第四组是行为与事件:S#_LOC.csv、S#_ROC.csv、S#_events。三个文件。

另有两个跨受试者的汇总文件:EDA_temp_amp_#.csv(每位受试者一个,装五个皮电协变量的矩阵)与 LOC_ROC.csv(一张表,第一列 LOC、第二列 ROC,九行)。

分组的意义在于三类时间戳对应三条不同的时间网格。这一点下面单独说。

2.2 三条时间网格,别混着用

这是实操中最容易出错的地方,而且出错之后不会报错,只会得到一张看起来合理的错图。

心率变异性的量(muRR、sigmaRR、muHR、sigmaHR、pow_tot、ratio、LF、HF、LFnu、HFnu)共用 S#_t_HRV。皮电的脉冲率与幅度(muPR、sigmaPR、mu_amp、sigma_amp)共用 S#_t_EDA。皮电的紧张性成分单独用 S#_t_EDA_tonic。

三条网格为什么不同?因为它们的事件源不同。心率变异性的事件是心跳,皮电脉冲的事件是汗腺分泌,而紧张性皮电是连续信号经低通分解出来的慢成分——三者的自然采样率不一样。点过程估计按事件推进,不按固定时钟推进,所以时间戳必须各给一套。

错配的后果很具体:假如把 S#_t_EDA 套到 muHR 上,多数情况下两个数组长度不同,会直接报错;但如果长度碰巧接近,就会静默地产生一条错位的曲线,而且因为两者都是慢变信号,错位几十秒在图上未必看得出来。

做法:每次读取后立刻断言 len(值) == len(时间戳),并在合并不同来源之前,先画一张三套时间戳的散点图看覆盖范围是否一致。

2.3 皮电为什么给两种参数化

皮电脉冲率给了四个文件:muPR、sigmaPR、mu_amp、sigma_amp。粗看是两个量各给均值与标准差,实际上背后是两套不同的参数化,这一点作者在引用文献里说得很明确。

第一套是对数正态参数化:脉冲率取对数后服从正态,muPR_LogN 与 sigmaPR_LogN 是它的两个参数。第二套是逆高斯参数化:脉冲间隔被建模为逆高斯分布,muPR_IG 与 sigmaPR_IG 是它的两个参数。

两套都在用,是因为皮电脉冲间隔的分布形态本身没有定论——有些受试者接近对数正态,有些更接近逆高斯。给出两套,等于把「选哪个分布」这个判断留给使用者,而不是替使用者假定。

对使用者的实际含义:不要混用两套参数算同一个指标。想把 muPR 的 LogN 版与 IG 版平均起来,得到一个「更稳的」脉冲率,这个操作没有意义,因为两个参数描述的是不同分布的位置。

2.4 九个人能做什么统计

九是这份数据最刺眼的数字。但凡涉及「显著性」的分析,都必须先想清楚这个问题。

可以做的是受试者内比较。同一受试者在十个阶段上有几百到上千个窗口,阶段的效应可以在个体内部估得很稳。然后把个体层面的效应拿去做组层面的描述(中位数、范围),而不是直接对九个人算 p 值。

不适合做的是受试者间比较。九个人分成两组,每组四五个人,任何组间差异都不可分辨。

更具体的做法是分层:先对每位受试者单独拟合模型,得到九个个体估计;再报告这九个估计的分布。这样即使不下显著性结论,读者也能看到「九个人里有几个方向一致」——方向一致性本身就是一种信息,而且比一个基于九样本的 p 值诚实。

§8.2 会把这件事落成具体的交叉验证方案。

2.5 三小时是怎么切出来的

作者给的说法是每位受试者约三小时,十个阶段每段约十五分钟。十五乘十等于一百五十分钟,即两小时半,与「约三小时」之间有二十分钟左右的差额。这个差额大概是阶段之间的过渡、准备与收尾时间。

数据里不给阶段时长本身,只给阶段起始时刻戳(S#_events)。所以实际每段多长,得自己用相邻两个时间戳相减算。这一步不能省——因为如果某一段实际只有十二分钟,而效应室平衡需要十五分钟,那一段的读数就不是稳态值。

做法:读 S#_events,算出九个间隔,与「约十五分钟」对照。凡明显短于十五分钟的段,在分析里单独标记。

2.6 体量估算与它的边界

要估这份数据多大,只能从索引的结构推。

心率变异性的十个量按逐拍或短窗输出,三小时约一万八千次心跳(按 100 次每分计),若按逐拍存,每个量一万八千行;皮电脉冲数远少于此,三小时可能只有几百到几千个脉冲;紧张性皮电是慢成分,采样率通常在一赫兹量级,三小时约一万行。

九个受试者乘起来,粗估在几十兆字节量级——比心电波形数据小两三个数量级,因为存的是索引不是波形。

正因为小,这份数据可以整个读进内存,做任意切片的分析。也正因为小,它不构成任何「大数据」意义上的训练集。

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

这一节按「缺了什么会怎样」来组织,比逐个字段解释更有用。

缺 muHR 的某一段:通常是 R 峰检测在那一段失效,原因多是运动伪迹或电极接触不良。因为受试者被要求保持不动,这种情况应当少见;一旦出现,往往集中在一段的开头(受试者刚调整姿势)。

缺 eda_tonic 的某一段:皮电的紧张性分解依赖较长的信号段,边缘处不可靠。所以 S#_eda_tonic 的有效范围通常比原始记录略短,头尾各损失几分钟。

缺 mu_amp 的某一段:脉冲幅度需要能分辨出单个脉冲的上升沿。当出汗极少(深度镇静时正是如此)脉冲稀疏,某些窗口里一个脉冲都没有,幅度无从估计。这不是数据错误,是生理状态本身导致的稀疏。

LOC 或 ROC 为缺失或异常值:说明按钮反应判读在那次实验里不清楚。这类情形在九个人里若出现一例,就会让那一位受试者的所有「前后对比」分析失效。

2.8 与两个姊妹数据集的关系

这一层关系必须讲清楚,否则很容易把三份数据当成一份的三个版本。

作者在引用里给了两个同课题组的数据集。第一份是清醒静息皮电:11 名健康志愿者,坐姿静息一小时,非惯用手,采样率 256 赫兹,设备是 Thought Technology 的神经反馈系统,电极贴在第二与第四指的最远端指节。这份数据用的是 MIT 伦理批准。

第二份是静息加镇静的皮电脉冲:同样是那 11 名清醒受试者(一小时、256 赫兹),加上 11 名在丙泊酚控制镇静下的受试者(三到四小时、500 赫兹、BedMaster 系统、电极贴在左手掌),只给提取出的脉冲时刻与幅度。这份数据同时用了 MIT 与麻省总医院两套伦理批准。

现在回到本篇:9 名受试者、约三小时、靶控输注十阶段。

三个人数:11、11、9。 三者不是同一批人,采样率不同(256 与 500 赫兹),设备不同(神经反馈系统与 BedMaster),电极位置不同(指节与手掌)。所以「把三份数据合并成 31 人」这个操作是错的——即使合并,也要把设备与采样率作为协变量显式建模,否则测到的差异可能全是硬件差异。

值得注意的另一个细节:镇静组的 11 人与本篇的 9 人,都是同一课题组在麻省总医院做的丙泊酚实验,但人数不同。这提示两次发布覆盖的受试者集合不完全重合,交叉引用时不能假定「11 人里包含这 9 人」。

§3 访问:这一次是真的开放

3.1 许可与门槛

这份数据在 PhysioNet 上标为 Open Access,许可为 Open Data Commons Attribution License v1.0。使用条件是署名——保留作者、标题、DOI 与 PhysioNet 的引用。

与前一篇讲过的受限数据相比,这是最轻的一档:不需要 CITI 培训证书,不需要签署数据使用协议,不需要机构担保,不需要等审批。注册账号、同意许可、下载,三步。

3.2 覆盖范围的坑

有一条实际会遇到的情况需要提醒:即使数据集标注为开放,PhysioNet 的文件分发在某些地区会被限制,表现为文件清单页面直接显示不可用。这属于站点的分发策略,不是许可条款。遇到这种情况,可以尝试镜像或通过合作机构获取,但要注意镜像的版本是否与 DOI 对应。

3.3 引用的正确写法

数据本身的引用是作者四人、年份 2021、版本 1.0、DOI 10.13026/2rbc-1r03。

除数据外,PhysioNet 要求同时引用平台本身的标准文献。这一条常被漏掉,投稿时期刊编辑会查。

若论文的方法部分用到了点过程模型,还应引用方法学原文:皮电的点过程模型见 2020 年 PNAS 那篇(第 117 卷第 42 期,26422 至 26428 页),预处理流程见 2019 年 EMBC 那篇(6902 至 6905 页),脉冲选取的模型化方法见 2021 年 IEEE 生物医学工程汇刊(第 68 卷第 9 期,2833 至 2845 页)。

3.4 到手的实际形态

下载下来是一个压缩包,解开后是 Data 目录与代码目录。数据是 CSV 与无后缀的时间戳文件,代码是 .m 脚本。

没有安装脚本,没有依赖清单,没有版本锁定。Matlab R2020b 是作者声明使用的版本。若用 Octave 跑,需要确认用到的函数是否都有对应实现——点过程拟合里常用的优化函数在 Octave 里行为可能不同。

§4 局限:九个人、两条通路、一个代理标签

4.1 样本量与它的真实含义

九个人的局限不在「少」,在「少而窄」。

年龄范围在原始论文里有交代,但条目页没给具体数字。可以确定的是健康志愿者招募,通常落在二十到四十岁之间,无心血管病史、无长期用药、无吸烟酗酒史。这个群体与手术室里躺着的病人差得很远:后者多有高血压、糖尿病、冠心病,多数长期服用 β 受体阻滞剂或钙通道阻滞剂——这两类药直接作用于心率与心率变异性,会让自主神经索引的基线整体平移。

所以从这份数据得出的任何阈值,搬到真实病人身上都要重新标定。

4.2 缺脑电意味着什么

丙泊酚的麻醉深度监测,主流依据是脑电。慢波与 α 振荡的交替、爆发抑制比、谱熵,这些都是从脑电算出来的。这份数据一个都没有。

后果有两层。

第一层是无法做对照。想说「自主神经索引能在多大程度上反映意识水平」,最好的办法是拿它和脑电指标比。没有脑电,这个比较做不了,只能退而求其次,拿行为标签(LOC/ROC)当参照。

第二层是无法解释机制。丙泊酚在脑内产生的是有结构的振荡,自主神经的变化是这条通路的下游效应。没有脑电,就只能看到下游动,看不到上游怎么动,因果链是断的。

4.3 按钮反应是代理,而且是有偏的代理

§1.4 已经说过判定方式,这里说偏差的方向。

丙泊酚抑制运动通路。当药物浓度上升,受试者先失去的是「按得动」的能力,后失去的是「听得见、想得明白」的能力。所以 LOC 会被判早。

反过来,浓度下降时,受试者先恢复的是「听得见」,后恢复的是「按得动」。所以 ROC 会被判晚。

两个偏差方向相反,结果是无意识的时间段被系统性高估。用 LOC 到 ROC 之间的时长当作「麻醉持续时间」,会偏长。用 LOC 与 ROC 之间的中点当作「最深时刻」,会偏早。

这个偏差有多大,数据本身无法回答,因为没有独立的意识测量(比如脑电)。能做的只是在使用时把这一点写进限制,而不是假装标签是准的。

4.4 皮电下降有多少是中枢的,有多少是腺体的

这是这份数据在机制解释上最难的一处。

丙泊酚对汗腺有直接作用:降低基础充盈、提高出汗阈值。这意味着即使中枢交感张力不变,皮电也会下降。

于是「镇静加深时皮电下降」这个观察,至少有三种解释并存:中枢交感张力下降(真的安静了)、汗腺对同样神经冲动的反应变弱(效应器钝了)、以及体温与皮肤血流改变导致的电导变化。

数据里没有能区分这三者的量。所以任何「皮电反映交感张力」的陈述,在这份数据上都只能说成「皮电变化与镇静深度同步」,不能说成「皮电测量了交感张力」。

4.5 心率变异性在药物作用下的解释困难

低频段(约 0.04 至 0.15 赫兹)一直被说成「交感与副交感的混合」,这个说法在静息状态下勉强可用,在丙泊酚作用下则更麻烦。

原因在于低频功率的成分里,压力反射占很大比重。而丙泊酚既扩张血管(改变压力反射的输入),又抑制心肌(改变输出),还可能有中枢作用。三条路径同时动,低频功率的变化就无法归因到单一分支。

一个更保守的读法是:把 LF、HF、LF/HF 当作「自主神经状态的整体描述符」,不拆成交感与副交感两个数。这份数据支持这种整体描述,不支持分支拆解。

4.6 单中心与单方法体系

所有数据来自麻省总医院,方法与代码由同一课题组维护。这对内部一致性是好事——九个受试者的处理流程完全一样,可比性强。对外部效度是坏事——换一套设备、换一支团队、换一种点过程参数化,结果会不会一样,这份数据无法回答。

具体到设备:姊妹数据集里镇静组用的是 BedMaster,清醒组用的是 Thought Technology 神经反馈系统。本篇条目页没有明说用哪一套。设备差异会直接影响皮电的绝对幅度,做跨数据集比较时必须先确认这一点。

4.7 实验条件与临床条件的差距

十阶段、每段十五分钟、浓度按程序升降——这是一个高度受控的实验。

真实麻醉不是这样。诱导是快速推注,维持是持续泵注加间断追加,深度调整靠临床判断而非固定阶梯,中间还叠加阿片类药物(芬太尼、瑞芬太尼)、肌松药、以及手术创伤本身的持续刺激。阿片类药物对心率变异性有独立影响,肌松药掩盖了体动这一重要的行为指标。

所以这份数据刻画的是「纯丙泊酚、无创伤、程序化」条件下的关系。这个关系在临床上是否仍成立,是一个需要另外验证的假设,不是可以直接搬过去的结论。

4.8 数据质量清单(DAIMS)

按数据集合理使用评估的常见维度逐项判定,共二十四项。

判为「是」的十二项:数据有明确许可;有 DOI 与版本号;有引用格式;有采集方法的文字描述;有伦理批准说明;有作者联系方式(通讯作者单位给出);有变量说明;有文件清单描述;有配套代码;有已知局限的主动披露(Usage Notes 里明说不含脑电与血压);数据来源机构可核实;发布时间明确。

判为「部分」的八项:人群描述不完整(条目页未给年龄、性别、体重的具体分布);样本量说明有但不讨论其局限;缺失值处理方式未文档化;预处理参数(滤波截止、脉冲检测阈值)未在条目页给出,需查引用文献;设备型号未在数据集描述页明确;时间戳的生成规则未说明;跨受试者的可比性未讨论;代码有但无测试与示例输出。

判为「否」的四项:无数据字典(字段含义靠文件名与论文推断);无原始波形;无独立验证集;无任何外部复现报告被引用。

这个判定的用途不是打分,是告诉使用者哪些地方必须自己去核。

§5 它能用来做什么

5.1 复现点过程索引的估计精度

最直接的用法:拿同一批数据,换不同的窗口长度、不同的平滑参数、不同的分布假设,看点过程索引的估计有多稳。

这件事在九个人身上做正合适。因为要回答的是「估计方法的稳定性」,不是「人群的分布」,前者不依赖样本量,依赖的是同一段数据上反复估计的离散度。

具体做法:对每位受试者的每一段,用长度从三十秒到五分钟的多个窗口分别估计 muHR 与 sigmaHR,画出估计值随窗口长度的变化曲线。曲线若在某长度之后趋于平坦,那个长度就是这套数据的最小可靠窗口。

5.2 研究行为与自主神经的同步性

这是作者本人的核心问题,也是这份数据设计出来要回答的。

具体问法:LOC 前后,哪些自主神经索引发生了方向一致的改变?改变发生在 LOC 之前还是之后?提前多久?

做法上要小心一点:不要用「LOC 前后各取若干分钟做 t 检验」这种粗暴切法,因为三小时的信号有强烈的自相关,相邻窗口不独立,t 检验会严重高估显著性。更合适的做法是在每位受试者内部做变点检测,看自主神经索引的变点与 LOC 时刻的先后关系。

5.3 检验多模态是否优于单模态

数据给了心率变异性与皮电两条通路。可以直接比:单用心率变异性、单用皮电、两者合用,在「区分有意识与无意识」这件事上各能到多少。

比较指标建议用受试者工作特征曲线下面积,并且必须在受试者层面做留一交叉验证(§8.2)。若在同一受试者的数据上训练并测试,任何模态都能得到接近完美结果,因为模型会学到这个人的个体特征,而不是意识状态。

5.4 作为方法学教学材料

这份数据的一个被低估的用途是教学。

原因有三:规模小到可以整个读进内存;结构完整,从原始事件到索引到行为标签都有;配套代码能跑通,可以对照着手改。对学生来说,从「读一份 CSV」到「复现一篇论文的图」,中间的距离比用大数据库短得多。

5.5 作为其他数据的对照基线

若手上有别的麻醉数据(比如带脑电的、带血压的),可以把这份数据当作「纯丙泊酚条件下的参照」,看别的数据里自主神经的变化模式是否一致。

这种用法要求先对齐三件事:数据的采样率、索引的定义、以及给药方式。三者任一不同,比较就失去意义。

5.6 它不能用来做什么

一句话列表,比长篇论证有用。

不能用来训练麻醉深度监测模型(样本量与人群都不支持)。

不能用来做疼痛研究(没有伤害性刺激,没有手术创伤)。

不能用来做人群参考值(九个人不构成参考人群)。

不能用来验证血压相关的假设(没有血压)。

不能用来做儿童或老年研究(受试者是健康青壮年)。

5.7 用之前必须先做的三件事

第一,核对阶段时长。 从 S#_events 算九个间隔,确认每段接近十五分钟。短得多的段要单独标记。

第二,核对三条时间网格。 断言每个索引数组与其时间戳等长,并画覆盖范围图。

第三,核对内存里的单位。 条目页没有逐一给出每个量的单位。心率是次每分还是赫兹、皮电是微西门子还是别的、时间是秒还是毫秒——这些必须从数值范围反推并与论文核对。反推的方法很朴素:muHR 的中位数若在 60 到 90 之间,就是次每分;若在 1 附近,就是赫兹。

§6 常见误读

6.1 误读一:把九个人当成九十个样本

三小时、十个阶段、每人上千个窗口,很容易让人觉得「样本量很大」。

但统计推断的有效样本量是受试者数,不是窗口数。同一受试者的相邻窗口高度相关,把它们当独立样本,等于把一个人的信息重复计数上千次。

症状:论文里写「n = 9,000 个窗口」,然后给出 p 小于 0.001。

正确说法:「九名受试者,每人约 X 个窗口;受试者内效应在个体层面估计,组层面报告九个个体的效应分布。」

6.2 误读二:把 LOC 当意识开关

LOC 是一个时刻点,但它背后是一段过渡。意识的消失不是瞬间的,而是在几十秒到几分钟里逐渐发生。

把它当二值标签,等于把一个渐变过程压成一个阶跃。这个压缩在分类任务里可用,在机制解释里会误导——会让人以为存在一个明确的「开关点」,而实际上没有。

6.3 误读三:把皮电下降读成「镇静有效」

§4.4 说过,皮电下降有三种解释。把下降直接读成「交感张力下降,所以镇静到位」,跳过了效应器这一环。

在临床上这个推论更危险:出汗减少也可能是体温下降、也可能是汗腺本身被药物钝化,而镇静深度其实不够。

6.4 陷阱一:前后基线的错误对比

用「麻醉前基线」减「麻醉后基线」,得到一个差值,然后说「这是麻醉的持续影响」。这个差值混杂了药物残留、疲劳、昼夜节律,§1.5 已展开。正确做法是把后基线当独立观察点,不做简单相减。

6.5 陷阱二:混用两套皮电参数化

muPR 的 LogN 版与 IG 版不能平均,§2.3 已说明。更隐蔽的错误是在不同受试者身上用了不同的参数化,然后在组层面比较——这样比出来的差异可能只是参数化选择的结果。

6.6 陷阱三:时间戳错配

三条时间网格,§2.2 已说明。这里补一句实操建议:写一个 load_subject(n) 函数,把所有文件按类别读进来、立即断言长度、按类别存成三个字典。之后所有分析只从这个函数取数,不再直接读 CSV。

6.7 陷阱四:忽略自相关做显著性检验

三小时的连续信号,相邻窗口的相关系数通常在 0.8 以上。任何假设独立的检验方法都会给出荒谬的 p 值。

替代做法:块自举(按连续时段重采样,而不是按单个窗口),或者直接在受试者层面做(九个个体的效应值做符号检验或 Wilcoxon,样本虽小但假设成立)。

6.8 陷阱五:把索引当原始测量

muHR 不是「心率」,是「点过程模型估计出的瞬时心率的窗口均值」。中间隔着一个模型、一个似然函数、一组参数估计。

这个区别在模型拟合不好时会显现:如果实际心跳间隔的分布严重偏离模型假设(比如出现大量异位搏动),muHR 会给出一个数学上合理但生理上无意义的数。数据里没有拟合优度指标,所以这件事只能自己查——对每段算一次残差,看是否有系统性偏离。

6.9 模型能分开有意识与无意识,不等于能监测麻醉深度

这是最需要强调的一条。

在九个人身上,用自主神经索引区分 LOC 前后,很可能得到很高的曲线下面积。这个结果是真的,但它回答的是「在纯丙泊酚、程序化给药、健康青壮年的条件下,这两类状态能否分开」。

临床上的问题是另一个:「在合并用药、有创伤、有合并症的病人身上,当前这一刻的镇静深度是否合适」。前者是分类,后者是回归加决策。前者做好了,后者一点也没解决。

§7 与相邻数据的定位

7.1 与术中伤害性刺激数据的差别

同课题组另有一份一百零一台手术的术中数据,把心电与皮电导出的十五个索引、九类药物的给药记录、四万多个伤害性刺激标注,压到五秒一格的时间轴上。

两份数据的差别在三个维度上。

场景:一份是程序化的健康志愿者实验,一份是真实手术。
标注:一份标意识的有无,一份标刺激的有无。
规模:一份九人三小时,一份一百零一台手术一万八千分钟。

想研究「自主神经索引能否反映意识水平」,用本篇;想研究「能否反映伤害性刺激」,用那一份。两份不能互相替代。

7.2 与两个皮电姊妹数据集的差别

§2.8 已详细对比。一句话总结:那两份给的是原始皮电或提取的脉冲,本篇给的是脉冲的统计摘要加心率变异性,三者的抽象层级不同。

若想重做脉冲检测算法,用那两份;若想直接用现成的索引做分析,用本篇。

7.3 与脑电麻醉数据的分工

PhysioNet 上有若干带脑电的麻醉数据。它们能回答「脑电怎么变」,本篇能回答「自主神经怎么变」。合起来的价值大于各自,但前提是受试者能对上——而本篇的受试者没有公开的脑电配套数据,所以这个合并只能在方法层面做,不能在个体层面做。

7.4 规模在整个生态里处于什么位置

九个人,在 PhysioNet 的麻醉类数据里属于偏小。同类的术中数据动辄上百台手术,脑电数据也有几十到几百例。

但规模小有规模小的用法。它适合做方法验证的第一站:方法在九个人身上跑不通,在九百个人身上也跑不通。反过来不成立——在九个人身上跑通,不代表在大数据上跑通。

7.5 与「可解释性」研究线的接续

这份数据的一个潜在价值,是它可以用来检验「模型学到的是生理还是伪迹」。

做法:训练一个分类器区分 LOC 前后,然后检查它最重要的特征。如果最重要的特征是皮电的紧张性水平,值得警惕——因为丙泊酚对汗腺有直接作用,模型可能学到了药物对效应器的作用而非中枢状态。如果最重要的是心率变异性的高频成分,解释就更有生理依据。

7.6 适合谁用

做自主神经信号处理的方法研究者、做麻醉深度监测早期探索的工程团队、需要一份小而完整的数据做教学的人。

不适合:需要大样本做统计推断的临床研究者、需要脑电的麻醉机制研究者、需要真实手术条件的产品团队。

§8 怎么用:分析方案

8.1 三种基本设置

设置一,受试者内分段比较。 对每位受试者,把十个阶段当作十个条件,比较各索引在条件间的差异。这一步只做描述(中位数、四分位距),不做检验。

设置二,受试者内前后对比。 以 LOC 为界,比较前后各若干窗口。要注意窗口长度的选择会显著影响结果,建议做敏感性分析:三十秒、一分钟、两分钟各做一遍。

设置三,受试者间迁移。 在八个人身上训练,在第九个人身上测试,轮换九次。这是唯一能给出「泛化」估计的设置。

8.2 为什么必须做留一受试者交叉验证

个体差异在自主神经信号上极大。有人基线心率六十,有人八十;有人皮电脉冲密,有人稀。若在同一受试者上训练并测试,模型只需记住这个人的基线,就能达到很高准确率。

留一受试者交叉验证强制模型跨人泛化。它的结果通常比随机划分低一大截——这个落差本身就是重要信息,它告诉你个体差异贡献了多少表观性能。

具体实现:九折,每折留一位受试者的全部数据做测试。所有预处理(归一化、特征选择)必须只在训练折上拟合,否则会泄漏。

8.3 指标怎么选

主指标用受试者工作特征曲线下面积,但要按受试者分层报告九个值,而不是只报一个平均数。九个值的分布比平均数有信息量得多:若八个在 0.85 以上、一个在 0.55,那个例外值得单独看。

辅助指标用平衡准确率(因为 LOC 前后的窗口数通常不均衡)。不要用原始准确率——若百分之八十的窗口都在无意识段,全预测为无意识就有百分之八十准确率。

8.4 基线与它的意义

必须给三个基线,否则无法判断模型有没有学到东西。

基线一,用药物浓度阶段直接预测。 因为 LOC 与浓度阶段强相关,只用「当前是第几阶段」这一个特征,就能得到不低的表现。任何模型若不能显著超过这个基线,说明它没有超出「药物剂量」的信息。

基线二,用 muHR 单特征。 心率是最粗但最稳的指标。

基线三,随机。 用于确认评估流程本身没问题。

8.5 过拟合的典型表现

三小时的数据、三十个索引、九个受试者,特征数相对样本量不算多,但因为窗口高度相关,有效样本量很小,过拟合仍然容易发生。

典型表现:训练折准确率 0.95,测试折 0.6;或者九个测试折的方差极大(有的 0.9,有的 0.5)。后者尤其提示模型依赖个体特征。

8.6 具体的数据处理建议

按顺序做这几步。

一,写 load_subject(n),返回三个字典(hrv、eda、events),每个字典里值与时间戳成对。

二,对每位受试者,从 S#_events 算阶段边界,把窗口打上阶段标签。

三,把 LOC 与 ROC 从秒转成窗口索引,标出三个区间:LOC 前、LOC 与 ROC 之间、ROC 后。

四,对每个索引做受试者内标准化(减本人均值、除本人标准差)。不要跨受试者标准化,那样会抹掉个体差异,而这个差异在留一验证里是必须保留的。

五,只用训练折的统计量做任何全局缩放。

8.7 五条失败模式

失败一,把所有受试者的窗口直接拼接。 结果是个体差异主导,阶段效应被淹没。

失败二,用固定阈值切 LOC。 不同受试者的反应延迟不同,固定阈值会系统性地错位。

失败三,忽略皮电的稀疏性。 深度镇静时脉冲极少,mu_amp 在多数窗口里无定义。若把这些当零处理,会造出一条虚假的「幅度下降」曲线。

失败四,用整段数据做归一化再切分。 这是典型的数据泄漏,会让测试结果虚高。

失败五,只报平均曲线下面积。 掩盖了个体间的不一致,而后者往往才是真正要报告的发现。

8.8 结果该怎么读

拿到一组结果后,按这三个问题读。

问题一,九个受试者的方向一致吗? 若八个人都显示「镇静加深时 HF 下降」,那即使不显著,也是可信的观察。

问题二,效应量有多大? 曲线下面积 0.95 与 0.75 的实践含义完全不同。前者可能有用,后者大概只是统计上可分辨。

问题三,超过浓度基线多少? 见 §8.4 的基线一。若超不过,说明模型学到的主要是剂量信息。

8.9 与人工判读的比较

这份数据没有人工判读的麻醉深度评分(比如改良镇静评分),所以无法直接与临床医生的判断比。

能做的是间接比较:用 LOC/ROC 作为参照,看模型在时间上的误差有多大——预测的转变时刻与标注时刻差多少秒。这个「时间误差」比分类准确率更接近临床关心的东西,因为临床上要的是「现在够不够」,不是一个事后分类。

§9 三条技术路线

9.1 直接复用作者的索引

最省事的路线:把 CSV 里的三十个索引当特征,接一个简单分类器。

优点是快,且与已发表结果可比。缺点是受限于作者的建模选择——若点过程模型的假设在某位受试者身上不成立,你无从知道,也无从修正。

适合做基线,不适合做深入分析。

9.2 从脉冲时刻重建

皮电给的是脉冲率与幅度,但若原始信号不可得,就只能在脉冲层面重建。

可行做法:把 muPR 与 sigmaPR 反推成脉冲间隔分布的参数,再据此生成事件序列。这样可以在事件层面做更灵活的建模,比如点过程的自激励结构。

限制是反推有信息损失,特别是当原始分布偏离假定的参数族时。

9.3 端到端(在这份数据上不可行)

若想训练一个从原始波形到意识状态的端到端模型,这份数据做不到——原始波形不在发布范围。

这一条要写明,是因为很多人看到「数据集」就默认有原始数据。这份没有。

9.4 一个被忽略的中间路线

既不想只用现成索引,又拿不到原始波形,还有第三条路:用现成索引重算派生量。

比如,把 muHR 与 sigmaHR 组合成心率变异性指数;把 LFnu 与 HFnu 的比值单独拿出来看;把皮电的 muPR 与 mu_amp 相乘,得到「单位时间的总分泌量」这样一个物理意义更清楚的量。

这些派生量不是原始数据,但它们能揭示原索引没有直接表达的关系,而且不需要原始波形。

9.5 选择建议

做基线复现,走 §9.1。做机制探索,走 §9.4 加 §9.2。想做端到端,换一份数据。

§10 术语

丙泊酚:静脉麻醉药,主要作用于 γ-氨基丁酸 A 型受体,产生有结构的脑电振荡与无意识状态。

靶控输注:按药代动力学模型计算并控制输注速率,以维持设定的目标浓度。

效应室:药物作用的假想隔室,其浓度变化滞后于血浆浓度。

点过程:把事件序列(心跳、汗腺脉冲)建模为随机点过程,用条件强度函数描述事件发生的瞬时概率。

条件强度函数:给定历史后,下一瞬间发生事件的概率密度。

意识消失 / 恢复:本数据中指按钮反应任务中反应消失与恢复的时刻。

紧张性皮电:皮电信号的慢变成分,反映汗腺的基础充盈水平。

相位性皮电:皮电信号的快变成分,表现为离散的脉冲,对应汗腺的瞬时分泌事件。

心率变异性:相邻心跳间隔的波动,反映自主神经对窦房结的调制。

低频 / 高频:心率变异性的两个频段,前者约 0.04 至 0.15 赫兹,后者约 0.15 至 0.4 赫兹。

滞后环:同一药物浓度在浓度上升与下降途中产生不同效应的现象。

留一受试者交叉验证:每次留一位受试者的全部数据作测试、其余作训练,轮换至每位都做过测试。

曲线下面积:受试者工作特征曲线下的面积,衡量二分类的判别能力。

自相关:同一序列不同时刻取值之间的相关性,是时间序列显著性检验必须处理的问题。

§11 事实清单

11.1 核心事实

项 值
标题 Behavioral and autonomic dynamics during propofol-induced unconsciousness
作者 Sandya Subramanian、Patrick Purdon、Riccardo Barbieri、Emery Brown
发布 PhysioNet,2021 年 7 月 30 日,版本 1.0
DOI 10.13026/2rbc-1r03
受试者 9 名健康志愿者
每人时长 约 3 小时
给药 靶控输注,十阶段,目标浓度 0、1、2、3、4、5、3.75、2.5、1.25、0 毫克每千克每小时
每阶段时长 约 15 分钟
采集信号 连续心电、皮肤电导
行为标注 按钮反应任务判定意识消失与恢复时刻
索引数 心率变异性 10 个 + 皮电 5 个,另加 3 类时间戳
时间网格 3 套(HRV、EDA、EDA tonic)
伦理 麻省总医院人类研究委员会批准;受试者书面知情同意
许可 Open Data Commons Attribution License v1.0
分析环境 Matlab R2020b
利益冲突 2020 年 7 月 15 日提交专利申请 PCT/US2020/042031,涉及部分方法

11.2 六个可立即验证的疑问

一,九位受试者的年龄与性别分布如何?条目页未给,需查原始论文或数据文件。

二,每段实际时长是多少?从 S#_events 算相邻间隔可得,是否都接近十五分钟需要核对。

三,皮电的绝对单位是什么?从数值范围反推并与论文核对。

四,LOC 与 ROC 的时刻在每个受试者身上落在第几阶段?若某人的 LOC 落在 2 毫克阶段,说明其敏感性偏高。

五,EDA_temp_amp_#.csv 里五个协变量的具体定义与顺序?条目页给了顺序(紧张性皮电、脉冲率均值、脉冲率标准差、脉冲幅度均值、脉冲幅度标准差),但单位与预处理未说明。

六,姊妹数据集(11 人镇静组)与本篇 9 人是否重叠?条目页未说明,需向作者确认或比对受试者特征。

11.3 一条受试者的读取流程

import numpy as np, pandas as pd, os

HRV = ['muRR','sigmaRR','muHR','sigmaHR','pow_tot','ratio','LF','HF','LFnu','HFnu']
EDA = ['muPR','sigmaPR','mu_amp','sigma_amp']

def load_subject(root, n):
    d = os.path.join(root, 'Data')
    hrv, eda = {}, {}
    t_hrv = pd.read_csv(os.path.join(d, f'S{n}_t_HRV'), header=None).values.ravel()
    for k in HRV:
        v = pd.read_csv(os.path.join(d, f'S{n}_{k}.csv'), header=None).values.ravel()
        assert len(v) == len(t_hrv), (k, len(v), len(t_hrv))
        hrv[k] = (t_hrv, v)
    t_eda = pd.read_csv(os.path.join(d, f'S{n}_t_EDA'), header=None).values.ravel()
    for k in EDA:
        v = pd.read_csv(os.path.join(d, f'S{n}_{k}.csv'), header=None).values.ravel()
        assert len(v) == len(t_eda), (k, len(v), len(t_eda))
        eda[k] = (t_eda, v)
    t_ton = pd.read_csv(os.path.join(d, f'S{n}_t_EDA_tonic'), header=None).values.ravel()
    ton = pd.read_csv(os.path.join(d, f'S{n}_eda_tonic.csv'), header=None).values.ravel()
    assert len(ton) == len(t_ton)
    eda['eda_tonic'] = (t_ton, ton)
    ev = pd.read_csv(os.path.join(d, f'S{n}_events'), header=None).values.ravel()
    return hrv, eda, ev

断言放在读取里,是为了让错配在最早的时刻暴露,而不是等到画图时才发现。

11.4 附录 A:阶段划分与稳态检查

def stage_bounds(ev, n_stage=10):
    """返回 n_stage 个 (start, end) 区间;末段无结束戳时用最后时间戳兜底。"""
    b = [(ev[i], ev[i+1]) for i in range(len(ev)-1)]
    if len(b) == n_stage - 1:
        b.append((ev[-1], ev[-1] + (ev[-1]-ev[-2])))
    return b

def check_stage_length(bounds, nominal=15*60, tol=0.2):
    for i,(s,e) in enumerate(bounds):
        dur = e - s
        flag = '' if abs(dur-nominal) <= tol*nominal else '  <-- 偏离标称'
        print(f'阶段 {i+1}: {dur/60:.1f} 分钟{flag}')

这段跑完,「每段是否都是十五分钟」这个问题就有答案了。偏离标称的段,其读数不能当作稳态值用。

11.5 附录 B:留一受试者的骨架

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
import numpy as np

def loso(features, labels, groups):
    """features: (N, F);labels: (N,);groups: (N,) 受试者编号。"""
    aucs = {}
    for g in np.unique(groups):
        tr, te = groups != g, groups == g
        if len(np.unique(labels[te])) < 2:
            continue
        mu, sd = features[tr].mean(0), features[tr].std(0) + 1e-9
        clf = LogisticRegression(max_iter=2000).fit(
            (features[tr]-mu)/sd, labels[tr])
        p = clf.predict_proba((features[te]-mu)/sd)[:,1]
        aucs[g] = roc_auc_score(labels[te], p)
    return aucs

注意归一化的统计量只用训练折算。这一行写错,后面所有数字都虚高。

11.6 附录 C:证据链

  • 数据集条目页:https://physionet.org/content/propofol-anesthesia-dynamics/1.0/,含 Abstract、Background、Methods、Data Description、Code、Usage Notes、Release Notes、Conflicts of Interest、References
  • 文件清单:条目页 Files 段在部分地区的访问受限,本页未取得完整文件清单,故不含按文件核对的统计
  • 伦理与流程:条目页 Methods 段,麻省总医院人类研究委员会批准,书面知情同意,靶控输注十阶段
  • 姊妹数据集一:DOI 10.13026/arty-2540,清醒静息皮电,11 人,一小时,256 赫兹
  • 姊妹数据集二:DOI 10.13026/r9p1-bk90,静息加镇静皮电脉冲,11 人清醒 + 11 人镇静,镇静组三到四小时,500 赫兹
  • 方法学原文:PNAS 2020;117(42):26422-26428(皮电点过程);EMBC 2019:6902-6905(皮电预处理);IEEE TBME 2021;68(9):2833-2845(脉冲选取)
  • 行为与自主神经的关系:EMBC 2020:824-827

凡属分析性内容(§2.6 的体量估算、§2.8 的跨数据集对比推断、§4.8 的 DAIMS 判定、§8 与 §9 的方案建议、§11.3 至 §11.5 的代码)为基于条目页描述与领域常识的推演,非官方结论,也未经过实际运行验证。凡标注「条目页」的均为该页原文表述。本页不含任何按文件核对得到的统计——文件分发受限,这一点必须如实写明。

编辑说明

本页所有数值均来自 PhysioNet 条目页(版本 1.0)与其列出的参考文献,未做数据下载与实测。三处需要特别提示:一是体量估算仅为量级推断,不是精确值;二是与两个姊妹数据集的人数、采样率、设备差异来自两份条目页的 Methods 段对照,并非作者明示;三是 DAIMS 判定为编辑判断,非官方评估。


相关数据集导航

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

  • qt-database — 共享标签:生理信号 / 心电信号 / 评测基准
  • vtac — 共享标签:生理信号 / 心电信号 / 评测基准
  • multimodal-surgery-anesthesia — 共享标签:生理信号 / 药物安全 / 评测基准
  • nifeadb — 共享标签:生理信号 / 心电信号 / 评测基准
  • actes-cycloergometer-exercise — 共享标签:生理信号 / 心电信号 / 评测基准
  • ecgcipa — 共享标签:生理信号 / 心电信号 / 药物安全
  • code-test — 共享标签:生理信号 / 心电信号 / 评测基准
  • ecg-arrhythmia — 共享标签:生理信号 / 心电信号 / 评测基准
  • ecg-fragment-high-risk-label — 共享标签:生理信号 / 心电信号 / 评测基准
  • mit-bih-afdb — 共享标签:生理信号 / 心电信号 / 评测基准

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

返回 AI-Ready 数据集