信息速览
两片电极、一节电池、一只手指,就能测到人体最难伪装的一条信号。皮肤电活动(electrodermal activity,EDA)测的是汗腺活动带来的皮肤电导变化,它几乎只受交感神经支配,不能用意志直接控制,因此在测谎、情绪计算、压力监测、疼痛评估里被反复拿来当"客观的生理读数"。但这条最容易采集的信号,同时也是最难解释的一条:同一个人在安静坐着的一小时里,皮肤电导曲线上会冒出几十次自发的隆起,这些隆起算不算"一次反应"、幅度多高才算、持续多久算一次,至今没有统一标准,各家工具箱的阈值与峰宽都是研究者自己定的自由参数。
公开数据的形态让这件事更难办。绝大多数能下载到的 EDA 数据来自情绪诱发实验:给受试者看图片、听声音、做心算,每个试次几十秒,事件标记精确对齐刺激 onset,采样率常常只有个位数赫兹。这样的数据训练出来的模型,学到的是"刺激之后一到五秒内那段上升沿"的形状与时序;一旦把刺激时间轴抽掉,模型就没有可对照的东西了。也就是说,绝大多数公开 EDA 数据只能回答"刺激引起了什么",回答不了"没有刺激时它本来长什么样"。
这个库是从反面下手的。它没有给任何刺激,给的是两段长时程、高采样率、无事件标记的连续记录:十一名健康志愿者清醒静息坐位一小时、256 Hz;另外十一名不同的健康志愿者在计算机控制的丙泊酚镇静下约三小时、500 Hz。更关键的是,作者把自己算出来的中间结果一并发布——慢变的紧张性成分与快变的相位性成分各自一条序列,以及逐次脉冲的时刻与幅度各一份清单。它卖的不是情绪标签,而是一把尺子:在没有外部标签的情况下,EDA 自身的统计结构到底长什么样。代价同样清楚,只有 22 名受试者、两个目录的文件构成不对称、且必须签署数据使用协议才能拿到。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Electrodermal Activity of Healthy Volunteers while Awake and at Rest(健康志愿者皮电库) |
| 发布方 | PhysioNet,由 MIT 计算生理学实验室维护托管 |
| 作者 | Sandya Subramanian、Patrick Purdon、Riccardo Barbieri、Emery Brown |
| 首次发布 | 2020 年 8 月 4 日,版本 1.0 |
| 最新版本 | 2021 年 8 月 26 日,版本 2.0(DOI 10.13026/136t-7g98) |
| 受试者数 | 22 名互不重叠的健康志愿者(静息 11 人、镇静 11 人,官方明确为不同志愿者) |
| 记录数 | 静息 11 段完整记录;镇静 11 份脉冲清单,其中 3 人另附原始波形 |
| 单段时长 | 静息约 60 分钟;镇静约 3 小时(使用说明另表述为 2 至 3 小时之间) |
| 通道数 | 1(单通道皮肤电活动;其余四类是派生序列与脉冲清单,不是并列通道) |
| 采样率 | 静息 256 Hz;镇静 500 Hz |
| 采集设备 | 静息用 Thought Technology 公司的神经反馈系统;镇静用 BedMaster 系统 |
| 电极位置 | 静息贴于非惯用手食指与无名指的中间指节;镇静贴于左手 |
| 伦理批准 | 麻省理工学院 COUHES;麻省总医院人类研究委员会 |
| 文件格式 | CSV 单列数值,按 At-Rest 与 Propofol-Sedation 两个目录分开 |
| 配套代码 | 4 个 Matlab 文件,主文件名为 eda_analysis(官方页面写作 eda_analysis.mat) |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0 |
| 访问门槛 | 认证账号 + 签署 DUA 1.5.0 + 完成 CITI「Data or Specimens Only Research」培训 |
| 典型用途 | 脉冲检测算法对照、相位与紧张成分分解对照、自主神经点过程建模、镇静下交感抑制观察 |
§1 它要解决的具体麻烦
1.1 一条信号,两副面孔
皮肤电活动在任何一段记录里都是两个东西叠在一起。慢变的那部分叫紧张性成分(tonic),它随皮肤含水量、室温、电极膏、坐姿甚至当天的饮水情况缓慢漂移,时间尺度是分钟级,幅度可以远大于事件本身;快变的那部分叫相位性成分(phasic),就是通常说的皮肤电反应,一次反应在 1 到 5 秒内升起、在十几秒内回落。几乎所有应用关心的都是 phasic 上那一个个隆起,但所有记录仪拿到的都是两者之和。
分离这两件事的方法不止一种,而且彼此并不等价。有的把低通滤波后的轨迹当 tonic、原信号减去它当 phasic;有的把汗腺建模成一阶系统再用反卷积去估计神经驱动;还有的干脆不做分离,直接在原信号上按固定阈值找峰。三种口径在同一个人的同一段数据上会给出不同的脉冲数与不同的幅度,而文献里没有公认的裁判。这就是这个库最实际的价值之一:它把作者自己那一套口径下的分解结果与脉冲清单一起发布了,等于给了一个可以对齐的官方参照。
1.2 三条常见的错误期待
第一条,期待它有情绪或压力标签。静息数据集官方原话是"purely observational; no specific stimuli were applied",即纯观察、未施加任何特定刺激;受试者被允许阅读、冥想或用笔记本与平板看东西,而研究者并没有控制他们看的是什么。想拿它做情绪分类,标签是不存在的。
第二条,期待 22 名受试者都有完整的原始波形与分解结果。构成是不对称的:静息 11 人五类文件齐全,镇静 11 人只有脉冲时刻与脉冲幅度,其中只有 3 人额外提供原始波形与 phasic、tonic 序列。把"22 人"当成"22 段完整波形"来估算工作量会直接算错。
第三条,期待它接近可穿戴腕带的形态。它用的是台式与床旁采集设备、指部电极、256 Hz 与 500 Hz 采样;腕带常见的 EDA 采样率在个位数赫兹级别,电极在腕部而非指部,还伴随加速度与温度等多模态通道。两者同名不同物,混用会把结论带偏。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 脉冲检测算法的对照口径 | 逐受试者的脉冲时刻与幅度清单,来自作者的模型化选取流程 | 够,可以作为外部对照而不是训练标签 |
| 相位与紧张成分分解的对照 | 官方发布的 phasic 与 tonic 序列 | 够做算法输出比对,不够当生理真值 |
| 长时程无刺激下的点过程建模 | 一小时 256 Hz 与约三小时 500 Hz 的连续记录 | 够,这正是它被采集的目的 |
| 清醒与镇静两种交感张力的对照 | 两组各 11 人,一组清醒静息、一组丙泊酚镇静 | 可做,但两组是不同的人、不同的设备与采样率 |
| 情绪识别或压力识别 | — | 不够,无刺激、无事件标记、无自评量表 |
| 疼痛评估 | — | 不够,两组都没有伤害性刺激与疼痛评分 |
| 可穿戴腕带算法评测 | — | 不够,采样率、电极位置、设备形态都不匹配 |
| 麻醉深度监测的建模 | 镇静组 11 人的脉冲清单,浓度按升降阶段变化 | 可做探索,浓度曲线在文献里而不在文件里 |
| 健康青年人群的基线 | 静息组招募年龄段 22 至 34 岁 | 够做青年健康人,不够做老年人或患病人群 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你写了一个脉冲检测算法,不知道阈值该怎么选 | 提供官方口径的脉冲清单,可以逐受试者对齐后算一致度 | 先在同一批文件上跑你的算法,再与官方清单比对,把差异归因到阈值而非噪声 |
| 你在做 tonic 与 phasic 的分解方法 | 提供官方分解结果作为对照序列 | 对齐长度与采样率后逐点比较,注意两组采样率不同 |
| 你要验证某个分布假设(例如脉冲间隔服从逆高斯) | 一小时与三小时的连续记录足够做逐受试者的拟合优度检验 | 用官方脉冲时刻构造脉冲间隔序列,再按受试者分别检验 |
| 你在做可穿戴设备的 EDA 模块 | 只能当高采样的上界参照 | 不要下采样后冒充腕带数据,也不要用它训腕带模型 |
| 你在做麻醉或镇静下的自主神经研究 | 镇静组 11 人的脉冲清单与 3 人的原始波形 | 先确认你关心的是脉冲层面的指标还是波形层面的指标 |
| 你要给学生讲皮肤电反应 | 一段静息波形就能同时展示慢漂与隆起 | 截取数分钟窗口作图,注明这是无刺激自发活动 |
| 你在复现 PNAS 2020 或 IEEE TBME 2021 那两篇论文 | 数据与处理代码都在库里 | 先跑官方 Matlab 主文件,再对照论文里的四个候选分布 |
1.5 一句话判断
它不适合当"有标签的训练粮仓",而适合当"没有标签时的标准尺":用来检验你的脉冲检测与分解算法在没有刺激提示的情况下还能不能稳定工作。
1.6 不适合谁:四条边界
不适合需要监督标签的任务。 静息与镇静两组都没有刺激事件标记、没有自评、没有行为学评分。任何以"情绪类别"或"疼痛等级"为目标的建模,在这里拿不到因变量。
不适合靠样本量换性能的项目。 22 名受试者、静息 11 段一小时、镇静原始波形仅 3 段,深度模型一两轮就能记住全部形态。它从来不是为大规模训练准备的。
不适合做严格的定量比较。 官方页面没有给出 CSV 内数值的单位与标定方式,也没有说明脉冲时刻文件用的是秒还是采样点序号。跨研究比较绝对幅度或绝对时刻之前,这两件事必须先自己确认。
不适合当可穿戴场景的代理。 指部电极、256 与 500 Hz、床旁与台式设备,与腕带场景在噪声谱、运动伪差、接触状态上都不是一回事。
§2 数据构成与规格
2.1 两个目录,五种文件
库的内容按采集条件分成两个目录,官方写法是 At-Rest 与 Propofol-Sedation。每个目录里放的都是 CSV,每个 CSV 只有一列数值。文件按受试者编号区分,编号写在文件名里。
| 目录 | 文件类型 | 覆盖的受试者 | 采样率 | 单文件时长 |
|---|---|---|---|---|
| At-Rest | 原始 EDA 波形 | 11 人全部 | 256 Hz | 约 60 分钟 |
| At-Rest | phasic 成分 | 11 人全部 | 256 Hz | 约 60 分钟 |
| At-Rest | tonic 成分 | 11 人全部 | 256 Hz | 约 60 分钟 |
| At-Rest | 脉冲时刻 | 11 人全部 | 不适用(时刻清单) | 不适用 |
| At-Rest | 脉冲幅度 | 11 人全部 | 不适用(幅度清单) | 不适用 |
| Propofol-Sedation | 脉冲时刻 | 11 人全部 | 不适用(时刻清单) | 不适用 |
| Propofol-Sedation | 脉冲幅度 | 11 人全部 | 不适用(幅度清单) | 不适用 |
| Propofol-Sedation | 原始 EDA 波形 | 3 人 | 500 Hz | 约 3 小时 |
| Propofol-Sedation | phasic 成分 | 3 人 | 500 Hz | 约 3 小时 |
| Propofol-Sedation | tonic 成分 | 3 人 | 500 Hz | 约 3 小时 |
上表是把官方"每名受试者包含哪些文件"的逐项清单摊平后的结果。官方页面没有给出文件总数;按这份清单推算,At-Rest 目录约 55 个 CSV,Propofol-Sedation 目录约 31 个 CSV,另加 4 个 Matlab 文件。这个推算值只用于估计下载与解析工作量,不要写进论文的"数据规模"一节。
2.2 文件命名与序号的含义
| 文件名 | 含义 | 形状 | 使用注意 |
|---|---|---|---|
eda_##.csv |
原始皮肤电活动波形 | 单列数值,长度等于时长乘采样率 | 官方未声明单位;两组采样率不同 |
phasic_##.csv |
快变成分 | 单列数值,与原始序列等长 | 由作者的分解流程得到,不是独立测量 |
tonic_##.csv |
慢变基线成分 | 单列数值,与原始序列等长 | 同上;与 phasic 相加不一定逐点等于原信号 |
pulse_times_##.csv |
脉冲发生时刻 | 单列,每个脉冲一个值 | 单位(秒或采样点序号)官方未说明 |
pulse_amps_##.csv |
脉冲幅度 | 单列,每个脉冲一个值 | 与时刻文件应当逐行配对 |
## |
受试者序号 | 两位数字 | 官方明确说明受试者顺序是随机的 |
序号随机这件事有一个直接后果:不能把 ## 当成任何有意义的分层变量。它不代表年龄顺序、不代表采集先后、不代表性别,也不能用来把两组人配对。更要注意的是,官方明确写了两组是不同的志愿者,所以 At-Rest/eda_07.csv 与 Propofol-Sedation/pulse_times_07.csv 里的 07 号不是同一个人,任何跨目录的同号配对都是错的。
2.3 一条静态记录的解剖
以静息组的一个文件为例。一个 eda_##.csv 只有一列数值,没有表头、没有时间戳列、没有受试者信息列。按官方说明,它是 256 Hz 的单通道序列,长度约 60 分钟。把这两个数乘起来,一个文件大约是 921,600 行——这个数字是按官方给出的采样率与时长推算的,不是从文件里读出来的,因为文件目录需要认证后才能访问。
import pandas as pd
import numpy as np
#-- 单列无表头,必须显式关掉表头推断
x = pd.read_csv('At-Rest/eda_01.csv', header=None).iloc[:, 0].to_numpy()
FS = 256 #-- 官方页面给出的静息采样率
print(x.shape, x.dtype) #-- 行数应接近 256 * 3600
print(float(x.min()), float(x.max()))
#-- 时间轴要自己造:没有时间戳列,采样率靠官方页面
t = np.arange(x.size) / FS
print(f'覆盖 {t[-1] / 60:.1f} 分钟')
这段代码里唯一容易错的地方是 header=None。CSV 第一行就是数值,如果不关掉表头推断,pandas 会把第一个采样点当成列名,序列长度平白少一个,而在九十二万行的长度上少一个点,肉眼根本看不出来。
时间轴也必须自己造。没有时间戳列意味着任何依赖绝对时刻的分析(比如与另一台设备的记录对齐)都缺少依据,只能按等间隔采样的假设重建。这个假设对采集设备是合理的,但对"有没有丢帧"缺少内部校验手段。
2.4 镇静目录的不对称
镇静目录的构成是这套数据里最容易被误读的地方。官方在"数据描述"里先说"每名受试者提供脉冲时刻与脉冲幅度",随后单列三行说明"3 名受试者的原始 EDA 时间序列"“3 名受试者的 phasic 数据”“3 名受试者的 tonic 数据”。
| 项目 | 静息目录 | 镇静目录 |
|---|---|---|
| 有脉冲时刻与幅度的受试者 | 11 人 | 11 人 |
| 有原始波形的受试者 | 11 人 | 3 人 |
| 有 phasic 与 tonic 的受试者 | 11 人 | 3 人 |
| 采样率 | 256 Hz | 500 Hz |
| 单段时长 | 约 60 分钟 | 约 3 小时(使用说明另写 2 至 3 小时) |
| 电极位置 | 非惯用手食指与无名指 | 左手 |
| 采集设备 | Thought Technology 神经反馈系统 | BedMaster 系统 |
| 伦理批准 | 麻省理工学院 COUHES | 麻省总医院人类研究委员会 |
| 官方给出的年龄范围 | 22 至 34 岁 | 未说明 |
为什么镇静目录只放出 3 人的原始波形,官方页面没有解释。可以确认的是,脉冲清单覆盖全部 11 人,所以"镇静下脉冲层面的分析"与"镇静下波形层面的分析"可用的样本量不一样,前者 11 人,后者 3 人。做任何统计之前都要先分清自己站在哪一边。
时长表述也有一处内部不一致:数据描述段写"每条时间序列约 3 小时",使用说明段写"每条数据文件包含 2 到 3 小时的数据"。这两句话可以同时成立(约 3 小时是中心值,2 至 3 小时是范围),但它意味着不能假定各文件等长。镇静组的分析最好先读长度再决定切窗策略。
2.5 与同类 EDA 数据的字段差异
| 对照对象 | 采样率 | 时长形态 | 事件信息 | 与它的差别 |
|---|---|---|---|---|
| 腕带多模态生理库 | 个位数赫兹 | 数小时至数天 | 有加速度、体温等并列通道 | 它是单通道、指部、256 与 500 Hz,没有并列模态 |
| 情绪诱发实验库 | 通常数十赫兹 | 数十分钟,含多个试次 | 有刺激 onset 标记与条件标签 | 它没有任何刺激标记,条件只有"静息"与"镇静"两种 |
| WFDB 格式的生理信号库 | 数百赫兹 | 数十分钟至数小时 | 有 .hea 头文件与 .atr 注释 |
它用 CSV,没有头文件、没有增益与单位声明 |
| 同类自主神经衍生库 | 不一 | 不一 | 多为逐秒或逐阶段索引 | 它的逐次脉冲粒度更细,但只覆盖汗腺这一条通路 |
这张表想说明的是格式选择带来的后果。WFDB 库至少在头文件里写清了增益与物理单位,CSV 库把这些都省掉了;反过来说,CSV 的好处是任何语言都能直接读,不需要专门的波形库。代价就是单位与标定成了悬案。
2.6 五类文件的物理含义
| 文件类型 | 物理含义 | 时间尺度 | 能不能单独用 |
|---|---|---|---|
| 原始 EDA | 皮肤电导随时间的连续变化,含慢漂与快变 | 全程 | 能,但要自己处理伪差 |
| phasic | 快变成分,对应汗腺的阵发性释放 | 秒级事件叠加在全程上 | 能,作为分解算法的对照或输入 |
| tonic | 慢变基线,受温度、湿度、电极状态影响 | 分钟级漂移 | 能,但单独看几乎没有事件信息 |
| pulse times | 每次汗腺释放事件被判定发生的时刻 | 离散时刻 | 能,是点过程建模的直接输入 |
| pulse amps | 对应每次事件的幅度 | 离散值 | 能,但要与时刻文件逐行配对 |
这五类不是五个并列通道,而是一条处理链上的五个环节:原始波形经过伪差检测与剔除,分解成 tonic 与 phasic,再从 phasic 中提取脉冲,最后记录每次脉冲的时刻与幅度。理解这一点很重要——后面四类都是计算产物,它们的定义依赖前一步的口径。
§3 它是谁的数据
3.1 贡献者与机构
| 作者 | 官方页面给出的机构 |
|---|---|
| Sandya Subramanian | Harvard-MIT Health Sciences and Technology,MIT |
| Patrick Purdon | 哈佛医学院;麻省总医院麻醉、重症与疼痛医学科 |
| Riccardo Barbieri | 米兰理工大学(Politecnico di Milano) |
| Emery Brown | MIT 医学工程与科学研究所;MIT Picower 学习与记忆研究所;MIT 脑与认知科学系;麻省总医院与哈佛医学院麻醉、重症与疼痛医学科 |
这个作者组合解释了两件事。第一,为什么数据分成两个目录:静息部分走的是 MIT 的伦理与采集资源,镇静部分走的是麻省总医院的人类研究委员会,两套体系各管一段。第二,为什么处理方法是点过程与统计建模那一套:作者群来自 MIT 的神经统计与计算生理学方向,数据是为"给汗腺活动建一个统计模型"这个目标采的,不是为"做一个情绪识别基准"采的。
3.2 时间线
| 时间 | 事件 |
|---|---|
| 2013 年 | 作者群发表丙泊酚麻醉下脑电特征的研究(PNAS 110 卷 E1142 至 E1151),镇静队列的实验范式出自这一系列工作 |
| 2019 年 7 月 15 日 | 版本 1.0 页面记载的临时专利申请(US 62/874,300) |
| 2020 年 7 月 15 日 | 版本 2.0 页面记载的专利申请(PCT/US2020/042031) |
| 2020 年 8 月 4 日 | 版本 1.0 发布,只有静息一个数据集、只有原始波形,11 名受试者 |
| 2020 年 10 月 2 日 | 配套论文在 PNAS 发表,报告 11 名志愿者一小时安静清醒状态下的脉冲间隔结构 |
| 2021 年 4 月 6 日 | 脉冲选取方法的论文在 IEEE TBME 在线发表 |
| 2021 年 6 月 30 日 | 同作者群的"静息与镇静下皮电脉冲幅度"库发布,受限访问 |
| 2021 年 7 月 30 日 | 同作者群的"丙泊酚致无意识期间的行为与自主神经动态"库发布,公开访问,9 名受试者 |
| 2021 年 8 月 26 日 | 版本 2.0 发布,加入镇静数据集与派生处理结果 |
这条时间线里有两个容易被忽略的点。一是版本 2.0 与两个兄弟库几乎同期发布,三者内容有交叉但文件构成不同;二是论文在先、扩版在后,版本 1.0 就已经支撑了 PNAS 那篇论文的发表。
3.3 两个采集场景
| 项目 | 静息场景 | 镇静场景 |
|---|---|---|
| 地点与伦理 | MIT,COUHES 批准 | 麻省总医院,人类研究委员会批准 |
| 招募与纳入 | 健康志愿者,招募 12 人,年龄段 22 至 34 岁 | 健康志愿者 11 人 |
| 排除 | 1 人因采集后自述偶发雷诺现象被剔除,剩 11 人 | 官方未说明排除情况 |
| 体位与状态 | 坐直、要求保持清醒 | 计算机控制丙泊酚镇静,浓度先升后降 |
| 允许的行为 | 可以阅读、冥想、用笔记本或平板看东西,但不能用受试手写字 | 未说明 |
| 手部与电极 | 非惯用手,食指与无名指的中间指节 | 左手 |
| 设备 | Thought Technology 公司开发的神经反馈系统,官方称其通过 FDA 批准 | BedMaster 系统 |
| 环境假设 | 皮肤温度与环境温度在实验期间假定恒定 | 同样假定恒定 |
| 知情同意 | 书面知情同意 | 书面知情同意 |
"允许看东西但不控制看什么"这一条是理解静息数据性质的关键。它意味着记录里必然混入了阅读、看视频、冥想带来的自发唤醒波动,而这些波动既没有标记也无法回溯。对点过程建模来说这不妨碍——模型要的正是自发活动的统计结构;对任何想做条件对比的分析来说,这是无法弥补的缺口。
3.4 来源层次
| 层次 | 内容 | 可信度 | 使用方式 |
|---|---|---|---|
| 第一层:原始采集 | eda_##.csv,官方说明"未作任何进一步处理" |
直接来自设备 | 可自行处理,也可复核别人的处理结果 |
| 第二层:作者派生 | phasic、tonic、脉冲时刻、脉冲幅度 | 算法产物,依赖阈值与模型选择 | 当对照口径,不要当真值 |
| 第三层:处理代码 | 4 个 Matlab 文件,主文件 eda_analysis | 官方提供的可复现实现 | 用来理解第二层是怎么算出来的 |
| 第四层:论文结论 | PNAS 2020 与 IEEE TBME 2021 的结论 | 作者对自己数据的解读 | 用来理解研究目的,不要反过来当数据描述 |
区分这四层能避开一类常见错误:把第二层当成标注。官方的脉冲清单是"作者模型在某套准则下选出的最优解",论文里明确写了它来自跨阈值的敏感性分析与四种右偏分布的拟合优度比较。它比随手设阈值的结果更讲究,但它不是人工逐条确认的事件表。
§4 它最独特的东西
4.1 稀缺的不是人,是时长与干净的时间轴
| 特征 | 常见 EDA 公开数据 | 这个库 |
|---|---|---|
| 采样率 | 个位数到数十赫兹 | 256 Hz 与 500 Hz |
| 单段时长 | 数十秒到数十分钟 | 约 60 分钟与约 3 小时 |
| 刺激事件标记 | 通常有 | 完全没有 |
| 自发活动是否可分析 | 试次间隙太短,难以分析 | 正是分析对象 |
| 派生结果是否随数据发布 | 少见 | 五类文件一并给出 |
| 处理代码是否随数据发布 | 少见 | 4 个 Matlab 文件 |
把这几行连起来看,它占的是一个别人不太愿意占的坑:在没有刺激、没有标签的长时程记录上,用高采样率把汗腺的自发活动完整录下来。做这件事要付出的成本很实在——一小时坐直不动、三小时镇静监测,都不可能靠众包采集,且都需要伦理委员会批准。这就是为什么同类数据稀少,也是为什么它只有 22 人。
4.2 两种相反的交感张力
它的第二个独特之处是条件设计。清醒静息与丙泊酚镇静大致对应交感张力的两个极端:清醒状态下汗腺活动频繁,脉冲密集;镇静状态下交感输出被压低,脉冲变稀。同一套处理流程在两个目录上都跑了一遍,于是可以直接比较"同一个人的同一条信号,在两种张力下的统计结构差异"。
这个设计有个前提要讲清楚:两组是不同的志愿者,设备不同、采样率不同、电极位置也不同。所以这不是严格的配对设计,任何"同一个人镇静前后"的说法都不成立。能做的比较是组间比较与逐受试者内部的纵向结构,不能做的是把两组的同号文件当成前后测。
4.3 处理链与官方口径
官方页面的方法段与配套论文把处理链写成了四个环节:检测并剔除伪差;把信号分离成慢变的 tonic 与快变的 phasic;从 phasic 中提取代表离散汗腺释放事件的"脉冲";对提取出的脉冲做多种统计模型的拟合优度分析。
| 环节 | 官方表述 | 产物文件 | 注意 |
|---|---|---|---|
| 伪差检测与剔除 | 代码包含这个环节 | 无单独产物 | 原始 CSV 未作处理,伪差仍留在原文件里 |
| 成分分离 | 分离慢变与快变成分 | tonic_##.csv、phasic_##.csv |
官方未说明所用分解器 |
| 脉冲提取 | 提取代表离散汗腺释放事件的脉冲 | pulse_times_##.csv、pulse_amps_##.csv |
阈值由敏感性分析确定 |
| 拟合优度检验 | 对多种统计模型做检验 | 无单独产物 | 论文给出四个候选分布 |
配套的 IEEE TBME 2021 论文把第三个环节说得更具体:以汗腺阵发的积分—发放生理为出发点,预测脉冲间隔应服从逆高斯分布;做法是跨阈值做敏感性分析,对四个右偏模型(逆高斯、广义逆高斯、对数正态、伽马与指数一类)同时拟合,选出最像逆高斯结构的那个阈值,再用拟合优度检验确认。论文图注里出现的三个代表性阈值量级为 0.002、0.004 与 0.02,未标注单位——这也从侧面说明,官方文件里的数值量纲需要使用者自己确认。
4.4 事件粒度:逐次脉冲,不是逐秒标签
它的事件信息是"第几次脉冲发生在什么时候、有多高",不是"每一秒属于什么状态"。这个粒度对点过程建模是刚好的,对序列标注类任务则完全不够。脉冲时刻与幅度应当逐行配对:第 n 行时刻对应第 n 行幅度。官方没有明确写这两个文件是否等长,使用前必须自己校验长度一致,否则整段对齐会错位。
4.5 边界条件一览
| 边界项 | 官方说明 | 影响 |
|---|---|---|
| 人群 | 健康志愿者 | 不能外推到患者人群 |
| 静息组年龄 | 招募 12 人,年龄段 22 至 34 岁 | 只覆盖青年,无逐人年龄可分层 |
| 镇静组年龄 | 未说明 | 无法做年龄相关的对照 |
| 排除标准 | 1 人因自述偶发雷诺现象被剔除 | 说明采集方对末梢循环敏感,末梢灌注差的人数据质量存疑 |
| 体位 | 坐直、保持清醒 | 不含卧姿、运动、睡眠条件 |
| 环境 | 皮肤与环境温度假定恒定,未记录 | 无法把慢漂归因到温度 |
| 活动 | 允许阅读、冥想、看视频 | 自发唤醒波动存在且不可回溯 |
| 手部 | 静息用非惯用手,镇静用左手 | 两组电极侧别口径不同 |
| 浓度 | 镇静组丙泊酚浓度先升后降,描述在文献里 | 文件内没有浓度曲线,需另找来源 |
| 利益冲突 | 相关专利已于 2020 年 7 月 15 日申请 | 复现其方法用于商业用途前应先看清专利范围 |
§5 怎么拿到
5.1 目录结构
认证通过后,官方文件目录的层级是两层:第一层是条件目录,第二层是文件。
electrodermal-activity/2.0/
├── At-Rest/
│ ├── eda_01.csv ... eda_11.csv
│ ├── phasic_01.csv ... phasic_11.csv
│ ├── tonic_01.csv ... tonic_11.csv
│ ├── pulse_times_01.csv ... pulse_times_11.csv
│ ├── pulse_amps_01.csv ... pulse_amps_11.csv
│ └── eda_analysis 及其余 Matlab 文件
└── Propofol-Sedation/
├── eda_01.csv、eda_02.csv、eda_03.csv
├── phasic_01.csv、phasic_02.csv、phasic_03.csv
├── tonic_01.csv、tonic_02.csv、tonic_03.csv
├── pulse_times_01.csv ... pulse_times_11.csv
└── pulse_amps_01.csv ... pulse_amps_11.csv
上面这个树是按官方逐项清单摆出来的示意,不是从服务器列出来的实际结果——文件目录需要认证才能访问,本文核验时未取得访问权。它对规划下载脚本仍然有用:静息目录是规整的 11 乘 5,镇静目录是 11 乘 2 加 3 乘 3 的错位结构。
5.2 三道门槛与批量下载
| 门槛 | 官方表述 | 要做什么 |
|---|---|---|
| 账号 | Only credentialed users who sign the DUA can access the files | 注册并完成 PhysioNet 认证 |
| 协议 | PhysioNet Credentialed Health Data Use Agreement 1.5.0 | 在线签署 DUA |
| 培训 | CITI Data or Specimens Only Research | 上传 CITI 结课证明 |
三道都过了才能拿到文件。下载走的是带认证的请求,常见做法是把用户名与密码交给 wget 或用 .netrc 保存凭据:
#-- 认证后按目录递归取回;凭据走 .netrc 更安全
BASE="https://physionet.org/files/electrodermal-activity/2.0"
#-- 先只取静息目录的原始波形,确认通路与体积
wget -r -np -nH --cut-dirs=2 -A "eda_*.csv" \
"${BASE}/At-Rest/"
#-- 再取派生结果与脉冲清单
wget -r -np -nH --cut-dirs=2 \
-A "phasic_*.csv,tonic_*.csv,pulse_*.csv" \
"${BASE}/At-Rest/" "${BASE}/Propofol-Sedation/"
ls -1 At-Rest | wc -l
第一步建议只下一个文件确认通路,别一上来就递归。认证目录的 403 与限流都不罕见,一次请求太多文件容易被中断,中断后靠 wget 的续传能力接着跑比重新规划更省事。
5.3 单文件读取与长度校验
import pandas as pd
import numpy as np
from pathlib import Path
def load_series(path, fs):
#-- header=None 是必须的:CSV 无表头,第一行就是数据
v = pd.read_csv(path, header=None).iloc[:, 0].to_numpy(dtype='float64')
return v, v.size / fs / 60.0 #-- 返回序列与覆盖分钟数
for name in ['eda_01.csv', 'phasic_01.csv', 'tonic_01.csv']:
p = Path('At-Rest') / name
if not p.exists():
print(f'缺失 {p}')
continue
v, mins = load_series(p, 256)
print(f'{name:16s} 行数 {v.size:>9d} 约 {mins:6.1f} 分钟')
#-- 时刻与幅度必须等长,否则整段对齐会错位
pt = pd.read_csv('At-Rest/pulse_times_01.csv', header=None).iloc[:, 0].to_numpy()
pa = pd.read_csv('At-Rest/pulse_amps_01.csv', header=None).iloc[:, 0].to_numpy()
print('脉冲条数', pt.size, pa.size, '等长' if pt.size == pa.size else '不等长,需排查')
这段校验的价值在于它能在几分钟内暴露三件事:文件是否下载完整、采样率假设是否成立、两组清单是否可配对。这三件事任意一个不成立,后面的所有统计都不用做了。
5.4 转成通用的表结构
下游如果是常规的深度学习管线,通常需要切成定长片段:
import pandas as pd
import numpy as np
FS, WIN_MIN = 256, 1
WIN = FS * 60 * WIN_MIN #-- 一分钟一窗
x = pd.read_csv('At-Rest/eda_01.csv', header=None).iloc[:, 0].to_numpy()
n = x.size // WIN
seg = x[:n * WIN].reshape(n, WIN)
rows = []
for i in range(n):
rows.append({'subject': '01', 'win': i,
'start_sec': i * WIN_MIN * 60,
'mean': float(seg[i].mean()),
'ptp': float(np.ptp(seg[i])),
'slope': float(np.polyfit(np.arange(WIN), seg[i], 1)[0])})
df = pd.DataFrame(rows)
print(df.shape)
这里刻意只算了均值、峰峰值与线性斜率三个描述量,没有给任何类别标签——因为库里没有可拿来当标签的东西。如果下游一定要标签,只能自己定义(例如按脉冲是否落入该窗构造二值标记),而这个定义必须写进方法节,否则无法复现。
切窗时还有两点要注意:一是窗长不要跨目录混用,256 Hz 与 500 Hz 的窗内点数不同;二是原始文件未作伪差处理,切窗后应当先做一次可见的粗略筛查(例如整窗为常值、整窗超出合理量程的窗直接标为可疑),否则伪差会被平均进特征里。
5.5 脉冲清单的对齐用法
import pandas as pd
import numpy as np
FS = 256
pt = pd.read_csv('At-Rest/pulse_times_01.csv', header=None).iloc[:, 0].to_numpy(float)
pa = pd.read_csv('At-Rest/pulse_amps_01.csv', header=None).iloc[:, 0].to_numpy(float)
#-- 单位未声明:若量级远大于秒数,多半是采样点序号
unit_is_sample = pt.max() > 3600
tt = pt / FS if unit_is_sample else pt
inter = np.diff(np.sort(tt))
print('脉冲条数', pt.size, '时刻单位', '采样点' if unit_is_sample else '秒')
print('间隔的最小区间', float(inter.min()), float(inter.max()))
这段代码的判断分支是关键。官方没有写清时刻文件的单位,而"秒"与"采样点序号"在 256 Hz 下差了 256 倍。靠最大值与时长比较来判断是最省事的办法:如果最大时刻远超记录秒数,那它只能是采样点序号。这个判断要在论文里写清楚,因为它直接决定所有时间尺度的结论。
5.6 五个最容易出错的地方
| 位置 | 错误写法 | 后果 | 正确做法 |
|---|---|---|---|
| 受试者编号 | 把 ## 当条件或年龄分组依据 |
分组无效且不可复现 | 官方明确说明顺序随机,只用做文件标识 |
| 跨目录配对 | 认为两个目录的同号是同一个人 | 凭空造出前后测设计 | 官方明确两组是不同志愿者 |
| 单位 | 假定数值是微西门子、时刻是秒 | 幅度与时间尺度可能整体错位 | 官方未声明,使用前先按文件量级自行确认并写入方法节 |
| 采样率 | 把两个目录混在一个 256 Hz 的管线里 | 镇静数据时间轴被压缩近一半 | 分别按 256 Hz 与 500 Hz 处理 |
| 派生文件 | 把官方脉冲清单当人工标注的真值 | 把算法口径当成金标准 | 它是模型化选取的产物,只能当对照 |
| 时长 | 假定镇静文件都是 3 小时 | 切窗越界或末尾截断 | 官方两处表述不一,先读长度再切窗 |
§6 与库内条目的关系
6.1 关系图谱
| 站内数据集 | 核心内容 | 与它的关系 |
|---|---|---|
| propofol-anesthesia-dynamics | 9 名志愿者丙泊酚镇静下的心率变异性与皮电脉冲索引、意识消失与恢复时刻 | 同作者群、同一实验范式,公开访问;那里是逐阶段的索引,这里是逐次脉冲与原始波形 |
| multimodal-surgery-anesthesia | 101 台全麻手术的逐五秒生理特征与伤害性刺激标记 | 同为围术期自主神经研究,但那是手术患者、有刺激标记、多模态 |
| eeg-power-anesthesia | 麻醉脑电多锥谱与逐两秒意识标签 | 互补:脑电看中枢,皮电看外周交感;两者合起来才是完整的镇静图谱 |
| eeg-gaba-anesthesia | 四人 GABA 能麻醉脑电频谱与给药曲线 | 同属麻醉神经生理,但信号通路完全不同 |
| wearable-exam-stress | 真实考场里腕带采集的 EDA、心率、体温等与成绩标签 | 同名 EDA 但采样率与设备形态差异巨大,是"可穿戴形态"的对照 |
| vitaldb | 术中生命体征与监护仪波形 | 可提供床旁采集的工程经验,但没有皮电通道 |
| cps-dataset-sleep | 多导睡眠监测的一夜记录 | 同属长时程生理记录,可借鉴切窗与伪差处理思路 |
| motion-artifact | 运动伪差与生理信号的对照采集 | 它的原始文件未作伪差处理,伪差识别方法可参照 |
| alott | 遥测波形与电子病历的时间对齐 | 时间对齐的工程做法可参照,它没有时间戳列 |
| hbedb | 人体平衡数据库,站姿与重心记录 | 无实质关联,只是同在 PhysioNet 的生理信号条目,不要误当邻近资源 |
最后一行值得单独说一句。站内那条人体平衡库与它虽然同属 PhysioNet 的生理信号资源,但采集范式、信号通路、受试者任务都不同,两者之间没有可迁移的对照关系。检索时如果按"生理信号"这个宽标签撞到它,可以直接跳过。
6.2 检索路径
| 你要找的东西 | 检索词 | 会落到哪里 |
|---|---|---|
| 同作者群的镇静研究 | propofol、Purdon、Subramanian |
§6.1 第一行,站内丙泊酚动态库 |
| 可穿戴形态的 EDA | wearable、Empatica、EDA 4 Hz |
§6.1 第五行与 §2.5 对照表 |
| 麻醉下的中枢指标 | EEG、propofol、意识标签 |
§6.1 第三、四行 |
| 伪差处理做法 | artifact、motion |
§6.1 第八行与 §5.4 |
| 长时程切窗经验 | sleep、polysomnography |
§6.1 第七行 |
| 时间对齐工程 | waveform alignment |
§6.1 第九行 |
6.3 与其他库的分工判据
| 任务 | 主粮仓该用什么 | 它的位置 | 原因 |
|---|---|---|---|
| 脉冲检测算法的对照评测 | 无可替代 | 主力 | 官方提供逐受试者的脉冲清单 |
| 相位与紧张成分分解的对照 | 无可替代 | 主力 | 官方提供分解序列 |
| 自主神经点过程建模 | 无可替代 | 主力 | 长时程无刺激、高采样,正是为这个目的采的 |
| 情绪识别 | 带刺激标记的情绪库 | 不适用 | 无刺激、无标签 |
| 疼痛评估 | 带伤害性刺激与评分的围术期库 | 不适用 | 无疼痛相关变量 |
| 可穿戴算法预训练 | 腕带采集的大体量库 | 不适用 | 设备形态与采样率不匹配 |
| 镇静下交感抑制的观察 | 可配合丙泊酚动态库 | 主力之一 | 11 人脉冲清单加 3 人原始波形 |
| 患者人群外推 | 临床队列库 | 不适用 | 只有健康青年志愿者 |
§7 质量评估与局限性
7.1 阅读本节前的一个前置校正
先纠正一个常见的误判:把 22 人当成"样本太小所以没用"。这个库的设计目标不是估计人群参数,而是刻画"单个人的汗腺活动在长时间里服从什么统计结构"。评价它的尺子应该是"每个受试者内部能不能凑够足够多的脉冲去拟合一个分布",而不是"有多少人"。在静息一小时与镇静三小时的尺度上,逐受试者的脉冲数是够做拟合优度检验的——这正是配套论文的做法。混淆这两种尺子,会得出"不值得用"的错误结论。
7.2 五维评分
按常用的数据质量维度打分,每项 1 至 5 分,分数针对"作为生理信号算法研究数据"这个用途:
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 2 | 22 名受试者,镇静原始波形仅 3 人,训练不足 |
| 标注质量 | 3 | 脉冲来自模型化选取并有拟合优度支撑,但不是人工确认的事件表 |
| 任务适配 | 5 | 长时程、无刺激、高采样加官方派生结果,同类资源稀少 |
| 文档完整 | 3 | 人群、设备、时长、伦理写得清楚,但单位与时刻口径缺失 |
| 可获取性 | 2 | 需认证、签 DUA、完成 CITI 培训,且文件目录未公开可见 |
五项合计 15 分(满分 25)。分数结构说明它是一个"专科工具":任务适配拉满,规模与获取门槛拖后腿,文档处在中间——该写的都写了,但该声明的两项偏偏没声明。
7.3 派生结果的两层
第一层是算法产物。phasic、tonic、脉冲时刻、脉冲幅度都是作者的处理流程算出来的,口径写在论文里,代码也在库里。作为对照,它比任何随手设定的阈值都更讲究,因为它经过了跨阈值的敏感性分析与拟合优度比较。
第二层是生理真值。它并不是。汗腺释放事件没有任何独立的金标准可以核对——没有同步的显微神经记录,没有人工逐条确认。所以"官方脉冲"更准确的身份是"某一套明确准则下的最优解"。拿它训练一个脉冲检测器,等于把这套准则蒸馏进你的模型,而不是在学习生理。
| 用途 | 把它当对照 | 把它当真值 |
|---|---|---|
| 脉冲检测算法评测 | 合理,可算一致度 | 不合理,会把作者准则当标准答案 |
| 点过程建模 | 合理,模型假设可另行检验 | 需谨慎,分布结论依赖选取口径 |
| 监督训练 | 可以,但要声明标签来源 | 不合理,标签本身是算法产物 |
| 跨研究比较 | 合理,前提是口径一致 | 不合理,不同论文的选取口径未必相同 |
7.4 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 |
|---|---|---|
| 人群单一 | 全部为健康志愿者,静息组年龄段 22 至 34 岁 | 不能外推到老年、儿童与患者 |
| 两组不可配对 | 官方明确为不同志愿者,设备与采样率也不同 | 不能做前后测式比较 |
| 序号无意义 | 受试者顺序随机 | 不能用编号做分层或配对 |
| 活动未控 | 允许阅读、冥想、看视频 | 自发唤醒波动存在且不可回溯 |
| 温度未记录 | 只假定恒定 | 慢漂无法归因 |
| 浓度曲线不在文件里 | 镇静组浓度升降描述在文献中 | 想按浓度分层需另找来源 |
| 文件构成不对称 | 镇静原始波形只有 3 人 | 波形层面与脉冲层面的可用样本量不同 |
| 单位未声明 | 数值与时刻的单位都没有写 | 定量比较前必须自行确认 |
| 利益冲突 | 相关专利已申请 | 商业化前需看清专利范围 |
7.5 外部验证与扩散程度
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 作者自己的方法验证 | PNAS 2020 用 11 人的静息数据检验脉冲间隔分布 | 逐受试者检验,样本结构匹配 | 数据与方法是同一批人,属内部验证 |
| 跨队列的方法验证 | IEEE TBME 2021 在静息与镇静两个队列、两套设备上验证 | 设备与条件都换了,稳健性证据更硬 | 两个队列都出自同一作者群 |
| 第三方独立使用 | 平台展示的第三方指标里引用数记为 0 | 该指标为实验性,仅作参考 | 说明在库外扩散有限,独立复现少 |
第三行是它最真实的位置:数据发布至今,公开可见的第三方引用很少。这不意味着数据有问题,而是意味着"用它当基准"这件事还没有形成社区共识。对使用者的直接含义是:如果你的结果和官方派生结果不一致,没有第三方文献可以帮你判断谁对,得自己说清楚口径。
7.6 它为何能持续
它没有再扩版,也没有被并入更大的库,但它的位置一直没被替代。原因很简单:一小时无刺激、256 Hz 的指部皮电,加三小时镇静下的 500 Hz 记录,这个组合的采集成本决定了很少有人愿意再做一遍。只要"研究汗腺自发活动的统计结构"这个需求存在,它就是最直接的入口。
§8 生态位与历史
8.1 沿革:从单一数据集到双队列
版本 1.0 于 2020 年 8 月 4 日发布,只有静息一个数据集、只有原始波形、11 名受试者,作者三人。版本 2.0 于 2021 年 8 月 26 日发布,作者增到四人,内容加了镇静队列,并首次提供派生结果与处理代码。官方的发布说明写得很直白:第一版只有一个数据集且只有原始数据,第二版有两个数据集并含处理过的数据。
这次扩容的方向值得注意。它没有去扩大静息队列的人数,而是加了一个条件相反的队列,并把处理结果一并公开。这符合它的定位——它不是要变成更大的训练集,而是要把"汗腺活动在不同交感张力下的统计结构"这条证据链补完整。
8.2 与论文的关系,与挑战赛无关
| 文献 | 角色 | 与文件的关系 |
|---|---|---|
| PNAS 2020(117 卷 42 期 26422 至 26428) | 报告 11 人一小时安静清醒下脉冲间隔的逆高斯结构 | 用的就是版本 1.0 的静息数据 |
| IEEE TBME 2021(68 卷 9 期,PMID 33822719) | 提出跨阈值敏感性分析与拟合优度的脉冲选取方法 | 静息与镇静两个队列都参与了验证 |
| PNAS 2013(110 卷 E1142 至 E1151) | 丙泊酚致意识消失与恢复的脑电特征 | 镇静队列的实验范式来源 |
需要明确否定一件事:它不是一个挑战赛数据集,既没有训练集与测试集的官方划分,也没有排行榜或评测脚本。文献里提到的"四个右偏分布""拟合优度"是统计方法,不是比赛任务。
8.3 生态位:标准尺而不是粮仓
| 角色 | 主力粮仓 | 标准尺 |
|---|---|---|
| 典型用法 | 大规模训练与预训练 | 算法对照、方法验证、统计结构刻画 |
| 需要的前提 | 数据量大、标签细 | 条件明确、处理口径公开、可复现 |
| 代表数据 | 大体量情绪生理库、腕带长期记录 | 本库、其他小体量但口径公开的专科库 |
| 失败模式 | 过拟合、标签噪声累积 | 样本少导致结论不稳、口径依赖 |
它坐在右边这一列。把标准尺当粮仓用,会立刻遇到规模瓶颈;把粮仓当标准尺用,会因为口径不公开而无法复现。两者不能互换,而公开 EDA 数据里右边这一列本来就空。
8.4 谁在用它,用来做什么
从文献与数据本身的定位看,使用者大致是三类:做 EDA 统计建模的人(要长时程无刺激数据来检验分布假设)、做分解与脉冲检测算法的人(要官方口径的对照)、做麻醉镇静下自主神经研究的人(要镇静队列的脉冲清单)。第三类最少,因为镇静原始波形只有 3 人,但正是它最难替代——在公开数据里,镇静下高采样的皮电记录几乎没有第二份。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一天 | 第一周 | 注意事项 |
|---|---|---|---|
| 生理信号算法研究者 | 读完官方页面的方法段与使用说明,跑通 §5.3 的读取与校验 | 用官方脉冲清单对照自己的检测器,逐受试者报告一致度 | 先确认时刻单位(§5.5) |
| 麻醉与镇静研究者 | 看镇静目录的文件构成,确认自己要的是脉冲层面还是波形层面 | 按 500 Hz 重建时间轴,与文献中的浓度阶段对照 | 浓度曲线不在文件里 |
| 可穿戴设备工程师 | 拿静息波形做高采样上界参照 | 比较不同降采样策略对脉冲可见性的影响 | 不要当成腕带数据训练模型 |
| 教学人员 | 截取数分钟静息波形讲解慢漂与快变 | 用 phasic 与 tonic 两条序列演示分解 | 注明是无刺激自发活动 |
9.2 一条最短的可用流程
#-- 1. 认证后先取一个文件确认通路
wget --user='你的账号' --ask-password \
"https://physionet.org/files/electrodermal-activity/2.0/At-Rest/eda_01.csv"
#-- 2. 列一下本地已取到的文件,确认命名与编号范围
ls -1 At-Rest | head
import pandas as pd
import numpy as np
FS = 256
x = pd.read_csv('At-Rest/eda_01.csv', header=None).iloc[:, 0].to_numpy(float)
print('采样点', x.size, '约', round(x.size / FS / 60, 1), '分钟')
pt = pd.read_csv('At-Rest/pulse_times_01.csv', header=None).iloc[:, 0].to_numpy(float)
pa = pd.read_csv('At-Rest/pulse_amps_01.csv', header=None).iloc[:, 0].to_numpy(float)
print('脉冲条数', pt.size, '幅度条数', pa.size)
两步走完,你已经能确认四件事:文件是单列无表头、静息时长约一小时、时刻文件是否等长于幅度文件、以及时刻单位是秒还是采样点序号。这四件事决定了后面所有分析能不能站住。
9.3 引用方式
| 引用对象 | 内容 |
|---|---|
| 数据集 | Subramanian, S., Purdon, P., Barbieri, R., & Brown, E. (2021). Electrodermal Activity of Healthy Volunteers while Awake and at Rest (version 2.0). PhysioNet. https://doi.org/10.13026/136t-7g98 |
| 平台 | 按官方页面 Cite 按钮生成的 PhysioNet 平台综述引用 |
| 方法 | 使用官方派生结果时,建议同时引用 PNAS 2020 与 IEEE TBME 2021 两篇方法论文 |
| 合规 | 使用须遵守 PhysioNet Credentialed Health Data License 1.5.0 与已签署的 DUA 1.5.0 |
写论文时建议同时注明四件事:使用的版本号、用的是原始文件还是派生文件、脉冲时刻的单位是如何判定的、以及是否按受试者而非按文件划分。前两件决定可复现性,第三件决定所有时间尺度的结论,第四件决定统计是否独立。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方页面与方法文献摘要 |
| 文件核验 | 文件目录需认证访问,本文核验时未取得访问权,未逐文件核对 |
| 不一致说明 | 镇静时长在官方页面有"约 3 小时"与"2 至 3 小时"两种表述,已在 §2.4 并列说明 |
| 论文信息 | 仅参考 PNAS 与 IEEE TBME 的摘要与图注,未读全文 |
| 未核验内容 | CSV 数值单位、脉冲时刻的单位、分解所用具体算法、镇静组年龄、镇静仅 3 人提供波形的原因 |
| 图像 | 无配图;封面为生成式提示词,不含真实波形 |
| 免责 | 本文不构成临床建议;数据使用须遵守受限访问协议与许可条款 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「22 人都有完整原始波形」 | 静息 11 人有;镇静 11 人中只有 3 人有 | 官方数据描述段单列三行说明"for 3 subjects" |
| 「它带情绪标签」 | 纯观察,未施加任何特定刺激 | 官方使用说明原话:no specific stimuli were applied |
| 「两组是同一批人的两次记录」 | 官方明确是不同的志愿者 | 摘要与背景段均写 11 different volunteers |
| 「编号可以做条件分组」 | 受试者顺序是随机的 | 官方:The subject order is randomized |
| 「两个目录可以混在一个采样率管线里」 | 256 Hz 与 500 Hz 分别适用于静息与镇静 | 官方对两个数据集分别给出采样率 |
| 「官方脉冲清单是人工标注的真值」 | 是模型化选取的结果 | 方法论文写明跨阈值敏感性分析与拟合优度比较 |
| 「原始 CSV 已经处理过」 | 剩余 11 人的数据是未作任何进一步处理的 | 官方:included in this database without any further processing |
| 「它开放下载」 | 需认证账号、签 DUA 1.5.0、完成 CITI 培训 | 官方访问政策三行 |
| 「镇静文件都是 3 小时」 | 数据描述写约 3 小时,使用说明写 2 至 3 小时 | 同一页面两处表述 |
| 「它是腕带可穿戴数据」 | 指部电极、台式与床旁设备、256 与 500 Hz | 官方设备与电极位置说明 |
| 「有年龄信息可以分层」 | 只有静息组给出招募年龄段 22 至 34 岁,无逐人年龄 | 官方方法段 |
FAQ
Q1:它到底有多少人、多少文件?
22 名互不重叠的健康志愿者,静息 11 人、镇静 11 人。静息每名受试者五类 CSV(原始波形、phasic、tonic、脉冲时刻、脉冲幅度),镇静每名受试者两类(脉冲时刻、脉冲幅度),其中 3 人另有三类波形与分解文件。官方没有给出文件总数,按逐项清单推算静息目录约 55 个 CSV、镇静目录约 31 个 CSV,另加 4 个 Matlab 文件。这个推算值只适合估计工作量,不适合写进论文的规模描述。
Q2:我要办什么手续才能拿到数据?
三道:注册并完成 PhysioNet 认证、在线签署 PhysioNet Credentialed Health Data Use Agreement 1.5.0、上传 CITI「Data or Specimens Only Research」的结课证明。三道都过了才有文件访问权限。许可本身是 PhysioNet Credentialed Health Data License 1.5.0,与完全开放的署名许可不同,使用范围受协议约束。
Q3:静息目录和镇静目录的同号文件是同一个人吗?
不是。官方在背景段明确写了镇静队列是"different volunteers",即不同的志愿者。文件编号只在本目录内有意义,且官方说明受试者顺序是随机的。任何跨目录的同号配对都是凭空造出前后测设计,结论不成立。
Q4:官方给的脉冲清单能直接当标签用吗?
当对照可以,当真值不行。这份清单来自作者的模型化选取流程:跨阈值做敏感性分析,对多个右偏分布同时拟合,选出最符合逆高斯结构的阈值,再用拟合优度检验确认。它比随手设阈值严谨得多,但汗腺释放事件没有独立的金标准可供核对,所以它是"某一套明确准则下的最优解"。拿它训练检测器,等于把这套准则蒸馏进模型,方法节必须写明。
Q5:它和 2021 年那几个同作者的兄弟库是什么关系?
同作者群在 2021 年 6 月 30 日发布了静息与镇静下皮电脉冲幅度的库(受限访问),7 月 30 日发布了丙泊酚致无意识期间的行为与自主神经动态库(公开访问,9 名受试者,含心率变异性与皮电脉冲索引以及意识消失与恢复时刻),8 月 26 日发布了本库的版本 2.0。三者内容有交叉但文件构成不同:那两个库给的是索引与幅度,本库给的是原始波形加分解序列加脉冲清单加处理代码。如果你的目标是阶段间的索引对比,看兄弟库;如果要自己跑处理流程,用本库。
术语表
| 术语 | 解释 |
|---|---|
| 皮肤电活动(EDA) | 由汗腺活动引起的皮肤电导变化,主要受交感神经支配 |
| 皮肤电反应(SCR) | 快变的、事件性的皮肤电导升高,通常持续数秒至十余秒 |
| 紧张性成分(tonic) | 慢变的基线水平,随温度、湿度、电极状态与个体状态漂移 |
| 相位性成分(phasic) | 从原始信号中分离出的快变成分,事件性反应叠加其上 |
| 脉冲(pulse) | 一次被判定发生的离散汗腺释放事件,含时刻与幅度两个属性 |
| 脉冲间隔 | 相邻两次脉冲之间的时间长度,是点过程建模的核心变量 |
| 逆高斯分布 | 由带漂移的高斯随机游走首次到达阈值的时间分布,是积分—发放过程的标准结果 |
| 积分—发放 | 输入累积到阈值即发放一次并重置的模型,用来类比汗腺的阵发释放 |
| 拟合优度 | 检验样本数据是否符合某个概率分布的方法,论文中用于确认脉冲选取阈值 |
| 点过程 | 用离散事件的时刻序列描述随机现象的建模框架 |
| 交感神经 | 自主神经系统中负责"战斗或逃跑"反应的分支,支配汗腺 |
| 丙泊酚 | 常用静脉麻醉药,靶控输注可按目标浓度给药并使浓度升降 |
| 靶控输注 | 由计算机按药代动力学模型控制输注速率以逼近目标血药浓度 |
| BedMaster | 床旁数据采集系统,镇静队列用它采集皮电信号 |
| 雷诺现象 | 末梢小动脉阵发性痉挛,可影响末梢循环进而影响皮电质量 |
| COUHES | 麻省理工学院"以人为实验对象委员会",即该校伦理审查机构 |
| DUA | 数据使用协议,签署后才取得受限数据的访问权 |
| CITI | 科研伦理与合规培训课程体系,PhysioNet 受限数据常要求其结课证明 |
| 微西门子 | 电导单位,常用于皮电;本库是否采用该单位官方未声明 |
附录 A:核心数字核对表
| 项 | 值 | 出处 | 来源层级 |
|---|---|---|---|
| 受试者总数 | 22 名 | 官方数据描述段 | 官方页面 |
| 静息受试者 | 11 名 | 官方摘要与数据描述 | 官方页面 |
| 镇静受试者 | 11 名(不同志愿者) | 官方摘要与背景段 | 官方页面 |
| 静息招募与排除 | 招募 12 人,排除 1 人 | 官方方法段 | 官方页面 |
| 静息年龄范围 | 22 至 34 岁 | 官方方法段 | 官方页面 |
| 静息采样率 | 256 Hz | 官方摘要与方法段 | 官方页面 |
| 静息时长 | 约 60 分钟 | 官方摘要与使用说明 | 官方页面 |
| 镇静采样率 | 500 Hz | 官方摘要与方法段 | 官方页面 |
| 镇静时长 | 约 3 小时(使用说明另写 2 至 3 小时) | 官方数据描述与使用说明 | 官方页面 |
| 镇静有原始波形的人数 | 3 名 | 官方数据描述段 | 官方页面 |
| 静息每受试者文件类型 | 5 类 | 官方数据描述与命名说明 | 官方页面 |
| 镇静每受试者文件类型 | 2 类,3 人另加 3 类 | 官方数据描述段 | 官方页面 |
| 配套代码文件数 | 4 个 Matlab 文件 | 官方数据描述段 | 官方页面 |
| 静息单文件采样点 | 约 921,600(按 256 Hz × 60 分钟推算) | 由官方采样率与时长推算 | 推算值 |
| 首版发布 | 2020 年 8 月 4 日,版本 1.0 | 官方版本列表 | 官方页面 |
| 现版发布 | 2021 年 8 月 26 日,版本 2.0 | 官方页面头部 | 官方页面 |
| 版本 2.0 DOI | 10.13026/136t-7g98 | 官方发现区 | 官方页面 |
| 版本 1.0 DOI | 10.13026/arty-2540 | 版本 1.0 页面 | 官方页面 |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0 | 官方访问区 | 官方页面 |
| 专利 | 2020 年 7 月 15 日申请(PCT/US2020/042031) | 官方利益冲突段 | 官方页面 |
| 静息目录 CSV 数 | 约 55 个(按逐项清单推算) | 由官方每受试者清单推算 | 推算值 |
| 镇静目录 CSV 数 | 约 31 个(按逐项清单推算) | 由官方每受试者清单推算 | 推算值 |
附录 B:数字的来源分层
第一层:官方页面。 受试者数、两组构成、采样率、时长、设备、电极位置、伦理批准、文件命名规则、许可与访问门槛、版本与 DOI、专利信息。这些直接来自项目主页的摘要、背景、方法、数据描述与使用说明各段。
第二层:论文摘要与图注。 脉冲间隔的逆高斯结构、跨阈值敏感性分析的做法、四个候选分布、三个代表性阈值的量级。这些来自 PNAS 2020 与 IEEE TBME 2021 的摘要与图注,未读全文,因此只能支撑"作者做了什么",不能支撑"这样做在所有数据上都成立"。
第三层:推算值。 单文件采样点数、两个目录的 CSV 数量。这些由官方给出的采样率、时长与每受试者文件清单相乘得出,正文中已逐处标注为推算,只用于估计工作量。
第四层:未核验。 CSV 数值的物理单位、脉冲时刻的单位、分解所用具体算法、镇静组的年龄、镇静目录只放 3 人原始波形的原因、以及各受试者的脉冲条数。文件目录需要认证才能访问,核验时未取得访问权,这些只能留待取得数据后确认。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | Electrodermal Activity of Healthy Volunteers while Awake and at Rest, version 2.0 | https://physionet.org/content/electrodermal-activity/2.0/ | 全部规模、结构、边界数字的来源 |
| 2 | 同一资源版本 1.0 页面 | https://physionet.org/content/electrodermal-activity/1.0/ | 版本沿革与首版构成 |
| 3 | Subramanian 等,Point process temporal structure characterizes electrodermal activity,PNAS 117(42):26422-26428, 2020 | https://doi.org/10.1073/pnas.2004403117 | 研究目的与脉冲间隔分布假设 |
| 4 | Subramanian 等,A Model-Based Framework for Assessing the Physiologic Structure of Electrodermal Activity,IEEE TBME 68(9), 2021 | https://doi.org/10.1109/TBME.2021.3071366 | 脉冲选取方法与两个队列的验证 |
| 5 | Purdon 等,Electroencephalogram Signatures of Loss and Recovery of Consciousness from Propofol,PNAS 110(12):E1142-E1151, 2013 | https://doi.org/10.1073/pnas.1221180110 | 镇静队列实验范式的来源 |
| 6 | PhysioNet 受限访问与许可说明 | https://physionet.org/content/electrodermal-activity/view-license/2.0/ | 许可条款 |
| 7 | 同作者群的丙泊酚行为与自主神经动态库(对照) | 见站内相关数据集导航 | §6.1 与 FAQ 第 5 问的对照 |
附录 D:两段可复用代码
任务一:逐受试者核对文件完整性
import pandas as pd
from pathlib import Path
KINDS = ['eda', 'phasic', 'tonic', 'pulse_times', 'pulse_amps']
def audit(root, ids):
#-- 静息目录应为 5 类齐全;镇静目录只有脉冲两类保证齐全
rows = []
for i in ids:
for k in KINDS:
p = Path(root) / f'{k}_{i:02d}.csv'
if not p.exists():
rows.append((i, k, 'missing', 0))
continue
n = sum(1 for _ in open(p)) #-- 只数行数,不载入内存
rows.append((i, k, 'ok', n))
return pd.DataFrame(rows, columns=['subject', 'kind', 'status', 'lines'])
df_rest = audit('At-Rest', range(1, 12))
print(df_rest.pivot(index='subject', columns='kind', values='lines'))
任务二:按受试者对齐脉冲间隔
import pandas as pd
import numpy as np
def interpulse(subject, root='At-Rest', fs=256):
pt = pd.read_csv(f'{root}/pulse_times_{subject:02d}.csv',
header=None).iloc[:, 0].to_numpy(float)
#-- 单位判定:最大值超过记录秒数即视为采样点序号
t = np.sort(pt / fs if pt.max() > 3600 else pt)
return np.diff(t)
for s in range(1, 12):
try:
d = interpulse(s)
except FileNotFoundError:
continue
print(f'{s:02d} 脉冲间隔条数 {d.size} 最小 {d.min():.3f} 最大 {d.max():.3f}')
第二段代码刻意只打印条数与极值区间,不下任何分布结论。极值区间的作用是体检——如果出现负的或为零的间隔,说明时刻文件里有重复或倒序的记录,需要回头查单位判定是否正确。
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 22 名志愿者分成静息 11 人与镇静 11 人,两组是不同的人 | 这条决定了所有比较设计的边界 |
| 2 | 静息 256 Hz 约一小时,镇静 500 Hz 约三小时 | 采样率与时长在两组都不同,管线必须分开 |
| 3 | 官方脉冲清单是对照口径,不是人工标注的真值 | 它是模型化选取的产物,训练时要声明 |
| 4 | 数值单位与脉冲时刻单位官方都没写 | 这两项不确认,所有定量结论都不成立 |
| 5 | 它是标准尺,不是训练粮仓 | 用它做大规模训练会立刻遇到规模瓶颈 |
编辑说明
本文的核验时间为 2026 年 10 月 28 日。核对方式为直接访问 PhysioNet 项目页的版本 2.0 与版本 1.0 页面、查看访问与许可区块、查阅平台指标页,并检索配套论文的公开摘要与图注。文件目录需要认证账号与数据使用协议才能访问,核验时未取得访问权,因此未逐文件核对文件清单、数值单位与脉冲时刻单位。正文中凡涉及推断的数字都标注了"推算",涉及未核实的项目一律写进 §10 的未核验内容与附录 B 第四层。镇静时长的两种官方表述已并列呈现,未做取舍。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- eeg-gaba-anesthesia — 共享标签:生理信号 / 麻醉与镇静
- mimic3wdb — 共享标签:生理信号
- mimic3wdb-matched — 共享标签:生理信号
- mimic4wdb — 共享标签:生理信号
- argo — 共享标签:生理信号
- chf2db — 共享标签:生理信号
- icehg-ds — 共享标签:生理信号
- slpdb — 共享标签:生理信号
- ucddb — 共享标签:生理信号
- umwdb — 共享标签:生理信号
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

