皮肤上的脉冲,镇静前后 — EDA Rest & Sedation 数据集

22 人分两组 / 静息一小时 256 Hz / 镇静三到四小时 500 Hz

来源 https://physionet.org/content/eda-rest-sedation/1.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 12
皮肤上的脉冲,镇静前后 — EDA Rest & Sedation 数据集

信息速览

数据集名称皮肤上的脉冲,镇静前后 — EDA Rest & Sedation 数据集
数据类型时序信号,元数据,文献引用
规模22 名(两组各 11 名,互不重叠)
接入方式https://physionet.org/content/eda-rest-sedation/1.0/
AI 就绪度

皮肤电导这件事,在监护仪上从来没有被当作一个正经指标。它被当作应激研究里的一个附属通道,被当作可穿戴手环上一个「情绪」的玩具输出。真正把它当成一条有生理机制的信号来读的,是麻省理工与麻省总医院那一组做麻醉与自主神经的人——他们不满足于「电导曲线升高了」这种描述,而是问:这条曲线上一个个孤立的脉冲,为什么在时间轴上的分布长成那个样子。

这份数据的回答方式是:不发布曲线,只发布脉冲。每个受试者拿到两个单列文件,一个是脉冲发生的时刻(秒),一个是脉冲的幅度。清醒静坐组与丙泊酚镇静组各十一名健康志愿者,前者录一小时、采样 256 Hz、电极贴非惯用手的手指,后者录三到四小时、采样 500 Hz、电极贴左手掌心。原始电导、张力成分、相位成分都不在这里。

所以它不是一份拿来训练皮肤电深度网络的原料库,而是一份「已经替你做完脉选择」的结论库:装着作者用基于汗腺整合发放生理的模型化方法筛出来的事件,供人复现他们的点过程统计。理解它该用来做什么、不该用来做什么,比知道它有多大更要紧。一屏速览见下表。

维度 内容
全名 Pulse Amplitudes from electrodermal activity collected from healthy volunteer subjects at rest and under controlled sedation
发布方 PhysioNet(作者 Sandya Subramanian、Patrick Purdon、Riccardo Barbieri、Emery Brown)
首次发布 2021 年 6 月 30 日,版本 1.0
DOI 10.13026/r9p1-bk90
受试者 22 名健康志愿者,两组各 11 名,两组互不重叠
清醒组 11 名,22–34 岁,非惯用手第二与第四指远端倒数第二节指骨,约 1 小时,256 Hz
镇静组 11 名,左手掌心,约 3–4 小时,500 Hz,丙泊酚分阶段控制镇静
采集设备 清醒组用 Thought Technology 神经营养反馈系统;镇静组用 BedMaster
发布内容 每位受试者 pulse_times_##.csv 与 pulse_amps_##.csv 两个单列文件
目录结构 顶层两个目录:At-Rest 与 Propofol-Sedation
原始波形 不在此次发布范围内,见同组作者另一项目
刺激与分段标注 无。官方明示全部为观察性数据
许可 PhysioNet Contributor Review Health Data License 1.5.0
体量 官方未公布文件总字节数
典型用途 点过程统计、脉冲间期分布建模、脉选择方法复现、自主神经状态比较

§1 它要解决的具体麻烦

1.1 一条曲线被压成一张点图,麻烦与价值同时在

皮肤电导这条曲线,肉眼看上去最显著的特征是「一波一波地涨起来再慢慢退下去」。每一波对应一小簇汗腺的分泌活动,而这些活动由交感神经节后纤维驱动。生理学上,这种「涨一波、退回去」的过程被写成一个整合发放模型:驱动量累积超过阈值就放一次,然后被清零重来。如果这个模型成立,那么相邻两次脉冲之间的间隔,其分布应该呈现逆高斯形状——这正是漂移扩散过程首次穿越阈值的时间分布。

麻烦就在这里。真实曲线上的「一波」不是一个干脆的尖峰,而是一个上升沿若干秒、下降沿十几到几十秒的隆起;噪声、运动伪影、呼吸引起的基线起伏全都叠在上面。要从这样一条曲线里把「波」一个个挑出来,必须下一个决心:多高的隆起才算一次脉冲。各家软件的做法是用一个固定的幅度阈值,官方页面对此的评价很直接:这类做法无法把脉冲从噪声里分开。

作者的做法是把阈值本身变成一个受试者专属的搜索变量:对每个受试者、每一个候选阈值,都去拟合四类右偏分布(逆高斯、广义逆高斯、对数正态、伽马),看哪一档阈值筛出来的脉冲,其间隔分布最像生理学预测的逆高斯。尾部行为是判据——逆高斯与广义逆高斯尾部沉得慢,对数正态更慢,伽马与指数更快。选定阈值后,还要用拟合优度分析复核一遍。

这一步做完,留给后人的东西就是脉冲表。它省掉了每个人重复实现同一套脉选择的工作,代价是:后人再也看不到曲线,也改不了阈值。

1.2 三条常见的错误期待

期待一:以为这是一份原始皮肤电数据库。 名字里的 Pulse Amplitudes 已经说明了一切,但很多人在检索时会把它和同组作者那份「健康志愿者清醒静息皮肤电」混为一谈。后者的 DOI 是 10.13026/arty-2540,官方页面在「Parent Projects」里写明本库派生自它,并在数据描述里说:那份数据额外含原始未处理信号与张力/相位分解。要原始波形,得去那一份(§3.3)。

期待二:以为两个目录可以当成「同一批人先后两种状态」。 官方摘要的原话是 11 名清醒静坐的志愿者和 11 名「不同的」健康志愿者接受丙泊酚镇静。这是两个独立队列,不是同一组人的前后对照。任何「同一受试者镇静前后皮肤电变化」的分析,都不可能在这份数据上完成。

期待三:以为采样率差异无所谓,可以直接拼接。 两组不只是采样率不同:设备不同、电极位置不同(手指远端指骨对掌心)、记录时长相差三到四倍、所在机构与伦理批件也不同。即便脉冲是用同一套方法提取的,脉冲率本身的量纲都受电极与部位影响。把两个目录拼成一个大数据集训练一个「镇静/清醒」分类器,学到的东西里必然混着器械与部位的差异(§7.3)。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
复现点过程框架下的脉冲间期分布 逐事件脉冲时刻,秒为单位 够,这正是它设计的用途
检验逆高斯假设在不同状态下的稳健性 清醒与镇静两种状态的脉冲序列各十一份 够,但样本小,只能做描述性结论
做皮肤电原始信号去噪或分解 不含原始电导 不够,换用父项目或其它库
训练一个情绪识别模型 无情绪标签,无刺激 不够,完全不适合
分析丙泊酚浓度与皮肤电的关系 无给药时间曲线,官方指向外部文献 不够,需自行对齐外部给药方案
比较清醒与镇静的自主神经活动 两种状态各一组,但器械与部位混杂 部分够,须把器械差异当作协变量
建立「脉冲率—状态」的简单基线 每人一份时刻表,算脉冲率只需相除 够,这是最低成本的用法
研究汗腺单次发放的幅度分布 逐事件幅度 够,振幅层面的分析是本库的主场
做跨种族、跨年龄的推广 22–34 岁、单一中心、健康 不够

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
你在写皮肤电信号处理的论文,需要一个已被审稿人接受的点过程基准 提供作者已发表的脉选择结果,可直接比对你的新方法 先用它算脉冲率与间隔分布,再与作者的参照结果对齐
你在做镇静深度监测,想知道皮电这一路到底有没有信息 提供清醒与镇静两端的脉冲序列,可先做最小可行的判别实验 把它当可行性探针,不要当训练集;结果阳性再去申请更大的麻醉库
你在做可穿戴情绪识别,想找「干净」的皮电标签 没有任何情绪标签 放弃这份,转去看带唤醒度或效价标注的多模态库
你要复现某篇引用了点过程模型的论文 提供论文所用的同一批脉冲数据 直接读作者另发的模型论文,按文献描述的参数复现
你在评估「多小的样本能做皮电统计」 22 个人已经能撑起三篇论文,是一个下限参考 按受试者级做统计,不要按脉冲级算样本量
你需要原始电导做自定义预处理 给不了 去父项目或其它含原始波形的皮电库

1.5 一句话判断

它更像一份「结论」,而非「原料」:作者把最难的脉选择替你做完了,代价是你只能沿着他们的方法往下走,任何想回头改预处理的念头都得先回到父项目。

1.6 不适合谁:四条边界

不适合想把皮电当端到端输入的人。 没有波形,就没有端到端。任何以原始采样点为输入的架构(一维卷积、时序 Transformer、自编码器)在这份数据上都无从下手,因为输入根本不存在。

不适合做人群层面外推的人。 22 名健康志愿者,清醒组年龄 22–34 岁,镇静组年龄官方未公布;单一机构、单一城市。健康、年轻、无合并用药,这三点决定了它的结论只能在「生理机制」层面讨论,不能落到临床人群。

不适合做带标签监督学习的人。 全库没有一个刺激标记。清醒组官方明说「纯粹观察性,没有施加特定刺激」,连受试者在看什么都不受控;镇静组的阶段划分指向外部文献,本库内不含阶段标签。

不适合做器械无关性研究的人。 两组用了两套设备、两种电极部位、两种采样率。若研究目的正是「不同器械下脉冲率是否可比」,它反而是一个可用的负面样本;若只是想研究生理,器械差异就是必须处理的噪声。

§2 数据构成与规格

2.1 一个目录、两个文件、一列数

结构简单到几乎没有解释空间。顶层两个目录,At-Rest 与 Propofol-Sedation。每个目录里,每位受试者两个 CSV:pulse_times_##.csv 存脉冲时刻,单位为秒;pulse_amps_##.csv 存对应脉冲的幅度。官方没有交代幅度用的是什么物理单位,从方法描述的脉络看,它来自原始电导的相对变化,而不是经过标定的微西门子值——这一点在使用时必须当作「相对量」处理。

两个文件的行序一一对应:第 k 行的时刻与第 k 行的幅度,描述的是同一个脉冲事件。行数就是这位受试者被保留的脉冲总数。官方未公布每位受试者的脉冲条数。

文件里没有表头说明、没有受试者元数据、没有采样率字段、没有时间零点说明。时间零点是否对应该段记录的起点,官方页面没有明确写出,这是接入时第一个必须先确认的事项(§5.4)。

2.2 字段与记录的完整字典

项 位置 取值或格式 官方说明 使用时注意
组别 目录名 At-Rest / Propofol-Sedation 按目录分开 目录名即唯一的状态标签
受试者编号 文件名的 ## 部分 数字,起止未公布 文件命名规则明示 两组编号是否重复官方未说明
脉冲时刻 pulse_times_##.csv 数值,单位秒 官方明确单位为秒 零点是段起点还是绝对时间未说明
脉冲幅度 pulse_amps_##.csv 数值,单位未公布 官方未写明单位 按相对量处理,勿当微西门子
记录时长 无字段 清醒约 1 小时,镇静约 3–4 小时 摘要与方法段均给出 脉冲率需要拿时长作分母
采样率 无字段 256 Hz / 500 Hz 方法段给出 只影响原始波形的分辨率,不影响 CSV
设备 无字段 神经营养反馈系统 / BedMaster 方法段给出 组间比较必须当作协变量
电极位置 无字段 非惯用手第二与第四指 / 左手掌心 方法段给出 部位不同即生理基底不同
皮肤温度 无字段 假设恒定 方法段写明假设 是假设不是测量
丙泊酚浓度 无字段 未提供 指向外部文献 无法在本库内做浓度—脉冲对齐
意识水平 无字段 未提供 未提 无法做事件级二分类
刺激 无字段 无 官方明示观察性、无刺激 情绪类任务无从构造
原始波形 无 不发布 指向父项目 预处理不可改

这张表最值得记住的一行是「皮肤温度」:官方写的是「我们假设皮肤与环境温度在整个实验期间恒定」,而不是「我们测量并校正了温度」。假设与测量的差别,在用长时程数据(镇静组三到四小时)时必须牢记——汗腺活动对皮肤温度相当敏感,三四个小时里室温波动与体表温度漂移是否真的可以忽略,本库无法回答。

2.3 一条记录的完整解剖

把一位受试者的数据读进来,得到的是两条等长、按时间升序的数组。下面这段读取与基本核对的代码,只用标准库与 numpy,不需要任何专用解析器。

#-- 读取单个受试者的两份 CSV 并做基本一致性核对
import csv
import pathlib

import numpy as np

def load_subject(root, group, idx):
    #-- root 指向解压后的 eda-rest-sedation 目录
    d = pathlib.Path(root) / group
    t_path = d / f"pulse_times_{idx:02d}.csv"
    a_path = d / f"pulse_amps_{idx:02d}.csv"
    #-- 单列 CSV,可能是无表头,按全部行当数值读
    t = next(csv.reader(open(t_path)))
    times = np.array([float(v) for row in csv.reader(open(t_path)) for v in row])
    amps = np.array([float(v) for row in csv.reader(open(a_path)) for v in row])
    return times, amps

def audit(times, amps, expected_seconds):
    report = {}
    report["n_pulses"] = int(times.size)
    report["length_match"] = bool(times.size == amps.size)
    report["monotonic"] = bool(np.all(np.diff(times) >= 0))
    report["span_s"] = float(times[-1] - times[0]) if times.size > 1 else 0.0
    report["span_vs_expected"] = report["span_s"] / expected_seconds
    report["rate_per_min"] = report["n_pulses"] / (expected_seconds / 60.0)
    return report

if __name__ == "__main__":
    t, a = load_subject("./eda-rest-sedation", "At-Rest", 1)
    for k, v in audit(t, a, expected_seconds=3600).items():
        print(k, v)

这段代码里有三个刻意的设计。第一,两个文件都按「摊平后全部是数字」处理,因为官方没有说明有没有表头,稳妥的做法是先读第一行判断能否转成浮点。第二,跨度核对用的是「脉冲时刻的最大值减最小值」而不是末值本身——如果时间零点不是段起点,末值会误报;跨度只说明脉冲分布在这段时间内部,不会因为零点偏移而失真。第三,脉冲率的分母用的是官方给的标称时长,不是数据跨度;这两者若差得远,说明时间零点确实有偏移,或者该受试者的脉冲集中在某一段。

一个典型的核对输出大致会呈现这样的形状:条数千量级、跨度接近标称时长、每分钟脉冲数在个位到十位之间。官方未公布这些数的范围,所以这里不给任何「预期值」,只给核对方法。

2.4 两组之间的规格对照

规格项 清醒静坐组 丙泊酚镇静组 差异对分析的影响
人数 11 11 相等,但为不同个体
年龄 22–34 岁 官方未公布 可能构成年龄混杂
电极部位 非惯用手第二与第四指远端倒数第二节指骨 左手掌心 汗腺密度与角质层厚度不同
采集设备 Thought Technology 神经营养反馈系统 BedMaster 放大器带宽与滤波特性可能不同
采样率 256 Hz 500 Hz 只影响原始信号,不影响脉冲表
时长 约 1 小时 约 3–4 小时 镇静组有更长的漂移暴露
温度处理 假设恒定 假设环境温度恒定 均为假设,非测量
姿态与配合 坐姿,被要求保持清醒,可阅读或看屏幕,不得用被接电极的手书写 控制镇静,分阶段 清醒组有认知活动,镇静组无
伦理批件 MIT COUHES MGH 人类研究委员会 两个独立批件,两个独立队列
刺激 无 无 两组都不可做刺激响应分析

这张表回答了一个很多人会问的问题:为什么不能把两组拼起来当「二分类数据」。左侧每一行对应的都是「人与设备」的组合差异,右侧写的是这些差异会以什么方式混入结果。若研究方向是「生理状态对脉冲统计的影响」,正确的做法不是消除这些差异(做不到),而是把器械与部位作为协变量显式建模,并且清楚任何结论都只能在这个混杂条件下成立。

2.5 与同类资源的字段差异

资源 发布层级 含原始电导 含张力/相位分解 含事件表 含状态标签
本库(Pulse Amplitudes) 二次派生 否 否 是 仅按目录两级
同组作者清醒静息皮肤电(10.13026/arty-2540) 原始加分解 是 是 官方描述为含原始与分解成分 清醒
DriveDB 驾驶生理库 原始多参数 是(手与足) 否 否 驾驶负荷场景
DEAP 情绪库 原始多模态 是 否 否 效价与唤醒度自评
QoL_Stress 原始多模态 是 否 否 放松/应激双相
术中伤害性刺激索引 派生加标注 否 否 是 伤害性刺激事件

从这张表能看出本库的位置:它是唯一把「脉冲」当成一等公民的皮电资源。别的库给你波形,让你自己切;它给你切好的点,让你只做点上的统计。这个取舍没有对错,只有适配。

§3 它是什么:一份以汗腺为单位的数据集

3.1 皮肤电导被拆成了什么

皮肤电活动在生理学上有两个成分。一个是张力成分(tonic),是皮肤电导的基线水平,变化慢,分钟到小时量级,受汗腺总体分泌状态与角质层水合程度影响;另一个是相位成分(phasic),是一次次快速的上升与缓慢回落,秒到十几秒量级,对应单次或一簇汗腺的分泌爆发。经典的做法是把两者分离(常用的是指数衰减核的卷积模型),再做分析。

本库走的是另一条路:不显式分离成分,而是直接在原始电导上找相位脉冲,输出「时刻+幅度」这张事件表。这条路的理论依据是 §1.1 说过的整合发放模型,它的落点是「脉冲间隔的分布形状」,而不是「成分的波形」。换句话说,它把连续的皮肤电导问题,转换成了一个点过程问题。

这个转换带来一个重要的性质:分析的单位从采样点变成了事件。一条一小时的 256 Hz 记录有三万六千余秒、九十二万余个采样点;而一位受试者的脉冲可能只有几百个。样本量的这个缩水,既是本库被批评的地方(统计功效低),也是它的方法论主张所在(点过程本来就不需要海量样本,需要的是干净的事件定义)。

3.2 两组的分工不是对照实验

把两个目录理解成「清醒 vs 镇静」的对照,是一种合理的简化,但必须知道它的边界。真正的对照实验应当是:同一批人、同一套器械、同一部位、随机顺序、两次记录。本库的两组,人在哪一端都不重合,器械不同、部位不同、机构不同、批件不同。

那它为什么还值得放在一起?答案是:它服务于一个更宽泛的假设检验——同一种生理机制(汗腺整合发放)是否在截然不同的自主神经状态下都表现为相似的脉冲间期结构。这个假设只需要「两种状态下的脉冲序列都符合某类分布」,不需要同一批人。作者在方法论文里对清醒组做了这项检验,并在镇静数据上做了使用(§8.2)。

对使用者而言,这意味着一个实用的判别标准:如果你想问的是「镇静让脉冲变少了多少」,本库给不了干净答案;如果你想问的是「脉冲间期的分布形状在两种状态下是否稳定」,本库正好是为此准备的。

3.3 与父项目的关系

官方页面的「Parent Projects」区写明,本库派生自「Electrodermal Activity of Healthy Volunteers while Awake and at Rest」1.0 版,DOI 为 10.13026/arty-2540。数据描述段进一步说明:那部分数据与本库有重叠,但那份数据额外含原始未处理信号,以及分离后的张力与相位成分。

这一句话解决了很多人的困惑。想要原始波形的,去父项目;想要已经被脉选择筛选过、方便直接做点过程统计的,用本库。两份数据的关系是「原料与半成品」的关系,不是「新旧版本」的关系——父项目只覆盖清醒组,镇静组的原始波形并不在它那里。这一点在官方描述里没有单独强调,但从父项目的标题与描述可以确认:它只针对清醒静息。

3.4 一条脉冲在当地发生了什么

理解单条记录最快的办法,是顺着一次脉冲走一遍。假设某位清醒组受试者在下午三点十二分左右,交感神经的一次发放到达掌心与指腹的汗腺,乙酰胆碱作用于腺体,腺体分泌的汗液通过导管进入角质层,角质层的电导升高,电极测到的两点间电导随之上升。这个上升在原始波形上是一个几秒量级的爬坡,随后腺体分泌停止,汗液被重新吸收与蒸发,电导以十几到几十秒的时程回落。

本库做的事,是在这个爬坡的顶点附近记下一个时刻,在那个时刻量出电导相比基线高出多少,作为幅度。它不记录爬坡的斜率,不记录回落的时程,也不做反卷积去还原神经发放的精确时刻。所以「脉冲时刻」是一个生理事件的时间标号,不是一个神经事件的时间标号;两者之间的差,正是汗腺这一级传递函数带来的延迟。这条链上的每一环——腺体密度、皮肤厚度、汗液重吸收速度、环境温湿度、电极贴合度——都会参与决定幅度。

这也解释了为什么幅度这一个数值在不同受试者之间不能直接比。同一次神经发放,在手掌与小臂上测到的幅度可以差出数倍。本库的两组恰好用了两个不同部位,这让跨组比幅度几乎注定被部位效应污染。

§4 点过程这条路:为什么只有几百个点也够用

4.1 事件数据的统计逻辑与采样点数据不同

如果拿一条十万采样点的波形去做分类,样本量的说法是「十万个点、一个标签」;如果拿一张几百个事件的表去做统计,样本量的说法是「几百个事件、一个受试者」。这两者的推断边界完全不同。前者的问题在于点与点之间高度自相关,有效自由度远小于采样点数;后者的点与点之间共享同一个受试者的汗腺配置,也存在相关,但至少每个点都是一个可辨识的独立生理事件。

点过程框架的主张正是:脉冲间隔的分布形状,本身就携带受试者的自主神经状态信息。如果这个主张成立,那么几百个间隔就足以给出一位受试者的统计画像,不需要海量数据。作者在方法论文里对 11 名清醒志愿者做了这项检验,报告的结果是:每一条序列都被逆高斯模型准确描述,用柯尔莫哥洛夫—斯米尔诺夫度量衡量。这是本库最核心的一条科学依据,也是它只有 22 人却仍然被引用的原因。

4.2 四种右偏分布各代表什么

脉选择方法里拟合四类分布,不是为了选一个最好的,而是为了用尾部行为做判别。四类分布的尾部沉得越慢,说明越多的长间隔被纳入,也就越接近「等待时间长尾」的生理预期。可以用一张表把它们的角色列清楚。

分布 尾部行为 在本方法中的角色
逆高斯 由漂移扩散首次穿越时间导出,是生理上的先验 首选,尾部沉得慢
广义逆高斯 含逆高斯作为特例,多一个形状参数 用于检验偏离方向
对数正态 尾部更重,允许长间隔更多 代表极慢状态
伽马 尾部更轻 代表快节奏状态
指数 尾部最轻,无记忆 用作对照的下界

这张表解释了作者方法为什么被称为「模型化」的方法:阈值不是靠经验拍的,而是靠「哪一档阈值能让间隔分布最像生理」反推出来的。换一个受试者,阈值就变;换一种状态,同一个受试者的阈值也可能变。

4.3 一个具体的判别场景:清晨与深夜

设想一个具体的对照:同一个人,清晨静躺半小时与深夜睡前静躺半小时,皮肤电的脉冲会怎样变化。晨间交感张力偏高,脉冲更密、幅度更大;夜间副交感占优,脉冲变稀、幅度变小,甚至整段时间只有零星几个。若用固定的绝对幅度阈值,深夜的序列可能一个脉冲都切不出来;若用固定百分位阈值,清晨会把噪声也当成脉冲。

这就是模型化阈值在实际场景里的优势:它不假设两者有同一个「高」的标准,而是各自找各自能让分布长成生理样子的那一档。本库的清醒组数据这类「生理状态自然漂移」的场景很像——一小时静坐,允许阅读、冥想或看屏幕,不控制内容,因此受试者的觉醒水平在一小时内会有真实的起伏。官方明说没有施加刺激,这句话的另一面是:数据的变异性来自自然波动,而不是设计好的操控。

4.4 案例:一位清醒受试者的一小时

把 §4.3 的场景具体化。取 At-Rest 目录里任意一位受试者,把他的一小时切成六个十分钟的窗口,分别数脉冲数,再算每两个窗口之间的间隔中位数。你会得到一张很朴素的表:脉冲数在窗口之间上下浮动,间隔中位数随之反向浮动。这张表不需要任何高级工具,只需要把 pulse_times 那一列做差分、分组、取分位数。

这个练习的价值不在结果,而在它暴露的三件事。第一,一小时内脉冲率不是常数,用整段平均会抹掉节奏;第二,窗口切得越细,每个窗口里的事件越少,间隔中位数的抖动越大,这正是小样本的直接后果;第三,如果某位受试者的某几个窗口一个脉冲都没有,说明他的阈值被定在了很高的位置,或者那段时间皮肤电确实安静——这两种情况从事件表上无法区分,只能回到原始波形。

§4.4 的案例会在 §7.3 与 §9.2 再次出现,分别用来说明偏差来源与最短流程的具体落点。

4.5 为什么作者要发布事件表而不是代码

一个自然的疑问是:既然方法论文已经公开,为什么还要单独发数据?答案是,方法可以复现,但脉选择的结果不能随意复现——阈值搜索对噪声、对边界条件、对实现细节都敏感。同一份原始波形,两组研究者按同一篇论文实现,很可能得出不同的脉冲集。发布事件表,等于发布了一个「冻结的参照结果」:后来者可以拿自己的实现去对齐它,从而把「方法是否被正确实现」与「方法是否有效」两件事分开。

这也是本库在方法学上的定位:它是方法论文的配套数据,为「我的实现和作者的一致吗」这个问题提供答案。任何以它为基础的二次分析,都应当先做一次这样的对齐。

§5 怎么把它取下来并用起来

5.1 获取路径与地区限制

官方页面在文件区对部分访问者返回「本地区因法律或政策限制数据不可用」。本次访问也遇到了同样的提示,目录列表接口与文件接口均返回 403 或该提示语。这意味着两件事:第一,能否取到文件取决于访问所在地,不取决于账号权限;第二,本页所有关于文件内容与命名的描述,均来自官方正文的「Format」小节与数据描述段,而不是来自实际下载的文件。

官方正文明示的访问政策是:任何人只要遵守许可条款即可访问。许可为 PhysioNet Contributor Review Health Data License 1.5.0,配套数据使用协议为同名 1.5.0 版。这两个名字与常见的 ODC-BY 不同,属于 PhysioNet 的贡献者评审类许可,使用时须按其条款而非 ODC-BY 理解。

获取途径 地址 本次访问状态
项目主页 https://physionet.org/content/eda-rest-sedation/1.0/ 200,正文可取
文件目录 https://physionet.org/files/eda-rest-sedation/1.0/ 403
At-Rest 子目录 项目内 At-Rest/ 403
Propofol-Sedation 子目录 项目内 Propofol-Sedation/ 403
DOI 解析 https://doi.org/10.13026/r9p1-bk90 解析到项目页

5.2 下载与解压的一般流程

即便在可访问的地区,推荐的做法也是先取项目页与许可,再取文件。下面这段脚本只做一件事:把两个目录的文件清单抓下来,作为后续逐文件下载的输入。它在受限地区会得到空清单,这时应停止,而不是继续尝试。

#-- 在可访问地区执行:先确认项目页可达,再取两个子目录的清单
BASE="https://physionet.org/files/eda-rest-sedation/1.0"
for d in "At-Rest" "Propofol-Sedation"; do
  echo "== $d"
  curl -sL --max-time 30 "$BASE/$d/" \
    | grep -oE 'pulse_(times|amps)_[0-9]+\.csv' \
    | sort -u > "list_${d}.txt"
  wc -l "list_${d}.txt"
done

若清单为空,先看返回码再判断:403 是地区策略,302 是登录跳转,200 而清单为空则说明目录页结构与预期不同。这三种情况要分别处理,不要盲目重试。

5.3 校验:两份文件的长度必须一致

拿到文件后第一件事不是建模,是核对。pulse_times 与 pulse_amps 必须等长;时刻必须单调不减;时刻必须落在记录时长之内。下面这段脚本对整批做一遍,把异常受试者单独列出来。

#-- 批量核对:等长、单调、跨度合理
import csv
import pathlib

def read_col(p):
    with open(p, newline="") as f:
        return [float(v) for row in csv.reader(f) for v in row

def check_group(root, group, expected_hours):
    out = []
    for t_path in sorted((pathlib.Path(root) / group).glob("pulse_times_*.csv")):
        idx = t_path.stem.split("_")[-1]
        a_path = t_path.with_name(f"pulse_amps_{idx}.csv")
        if not a_path.exists():
            out.append((idx, "missing_amps"))
            continue
        t, a = read_col(t_path), read_col(a_path)
        if len(t) != len(a):
            out.append((idx, f"len_mismatch {len(t)} vs {len(a)}"))
        elif any(t[i] > t[i + 1] for i in range(len(t) - 1)):
            out.append((idx, "not_sorted"))
        elif t and (t[-1] - t[0]) > expected_hours * 3600 * 1.2:
            out.append((idx, "span_too_long"))
        else:
            out.append((idx, "ok", len(t)))
    return out

if __name__ == "__main__":
    for row in check_group("./eda-rest-sedation", "At-Rest", 1):
        print(row)

这一段把「跨度上限」设为标称时长的一点二倍,是一个保守的经验界:若时间零点不对应段起点,跨度可能偏小;若存在时间戳拼接错误,跨度可能一跃超出标称值很多。超限的受试者应当逐一回看,而不是直接丢弃。

5.4 时间零点:必须先定的一个约定

前面反复提到时间零点。官方只给了「单位为秒」,没有说是相对段起点还是绝对时间。三种可能都会改变分析:若是相对起点,则末值就是这段记录的长度;若是相对某个全局时刻(比如整场实验的动员时刻),则清醒组的末值可能远超一小时;若是按文件重排过,则单看数值无法判断。

处理办法是拿「末值减首值」与官方标称时长做比较。清醒组标称约一小时,镇静组标称约三到四小时,两者的区间都有弹性。若某组的末值普遍落在标称上限之内,基本可以判定为相对起点;若普遍超出一大截,则应把时间差当作相对间隔使用,不把绝对值当作含义。

#-- 用末值分布判断时间零点口径
import pathlib

def last_values(root, group):
    vals = []
    for p in sorted((pathlib.Path(root) / group).glob("pulse_times_*.csv")):
        txt = p.read_text().strip().split()
        if txt:
            vals.append(float(txt[-1].replace(",", " ").split()[-1]))
    return vals

if __name__ == "__main__":
    v = last_values("./eda-rest-sedation", "At-Rest")
    print(len(v), min(v), max(v))

若最大值明显超过三千六百秒,说明零点不是段起点;若都落在三千六百秒上下,则口径基本确定。这一步不做,后面的脉冲率就会系统性偏大或偏小。

5.5 从事件表到统计量

事件表能直接给出的量不多,但每一个都稳:脉冲数、脉冲率、间隔序列、间隔的分位数、幅度的分布。下面的代码是一份最小统计的骨架,输出可以直接塞进论文的描述性表格。

#-- 每位受试者一组描述统计
import numpy as np

def subject_stats(times, amps, nominal_seconds):
    d = np.diff(np.asarray(times))
    return {
        "n": int(len(times)),
        "rate_per_min": len(times) / (nominal_seconds / 60.0),
        "iqi_median_s": float(np.median(d)) if d.size else float("nan"),
        "amp_median": float(np.median(amps)) if len(amps) else float("nan"),
        "amp_cv": float(np.std(amps) / np.mean(amps)) if len(amps) else float("nan"),
    }

这份骨架里刻意省掉了常用的时域指标(如皮电反应幅度、恢复时间),因为那些指标需要原始波形,而本库不给。能用事件表算的,就只有点和点之间的关系。这不是缺陷,而是使用边界的自然结果。

5.6 与点过程模型的对接

若要用逆高斯模型做检验,输入是间隔序列,输出是拟合参数与拟合优度。下面的代码用矩估计给出一个粗拟合,足以做探索,不足以替代正式检验。

#-- 间隔序列的逆高斯矩估计与简单优度检查
import numpy as np

def ig_moments(intervals):
    x = np.asarray(intervals, dtype=float)
    mu = float(np.mean(x))
    lam = float(mu ** 3 / np.var(x, ddof=1))
    return mu, lam

def ks_distance(x, cdf):
    x = np.sort(np.asarray(x, dtype=float))
    n = x.size
    emp = np.arange(1, n + 1) / n
    return float(np.max(np.abs(emp - cdf(x))))

正式检验应改用极大似然,并报告参数的标准误;矩估计在这里只用于快速看形状。若要复现作者的结论,应直接读方法论文给出的做法,不要以这段骨架替代。

§6 与库内记录的关系

6.1 关系图谱

本库在站内不是孤岛。它与三类记录构成关系:同机构同方法的麻醉与自主神经族、含皮电通道的多模态生理库、以及同名易混的皮肤图像族。这张表把关系与区隔一次说清。

站内记录 与本库的关系 关键区隔
propofol-anesthesia-dynamics 同组作者、同机构、同为丙泊酚 那份是九人十阶段、含意识消失与恢复时刻与心率变异性索引;本库为十一人、只发脉冲表、无意识标签
eeg-power-anesthesia 同机构麻醉数据 那份是脑电多锥谱与逐两秒意识标签;本库无脑电
multimodal-surgery-anesthesia 同机构术中自主神经 那份是手术中、含标注事件与药物记录;本库是志愿者、无事件标注
autonomic-aging-cardiovascular 同为自主神经静息数据 那份是心电加连续血压、千余人;本库是皮电、二十二人
drivedb 同为含皮电的 PhysioNet 库 那份是驾驶场景多参数、无状态标签;本库有静息与镇静两级
qol-stress 同为皮电多模态 那份是 Fitbit 采集、含自评量表;本库是专用设备、无自评
deap 同为生理信号情绪研究 那份有情绪自评标签;本库无任何刺激与标签
cobra、skincap、skincon 等 仅名称相近 那几份是皮肤图像与病理,与本库无数据交集

这张表里最需要强调的一行是最后一行。以「皮肤」为关键词检索时,皮肤图像族会大量出现,而它们的皮是「皮肤疾病」的皮,与皮肤电导无关。站内检索应当用「皮肤电」或「皮电」而不是单用「皮肤」。

6.2 检索路径

按使用目的,有三条检索路径。

你想找的 站内关键词 会命中的记录 备注
皮肤电的原创事件级数据 皮肤电、皮电、电导、汗腺 本库 唯一以脉冲为单位的记录
麻醉下的自主神经变化 丙泊酚、镇静、自主神经 propofol-anesthesia-dynamics、multimodal-surgery-anesthesia 三份可对照阅读
麻醉下的脑电 麻醉脑电、意识水平 eeg-power-anesthesia 与本库互补,不重叠
静息自主神经的基线 静息、心率变异性 autonomic-aging-cardiovascular 规模远大于本库
带情绪标签的皮电 情绪、唤醒度 deap 有标签,但无镇静
可穿戴皮电 可穿戴、Empatica qol-stress 等 器械层级完全不同

检索时最容易犯的错是把「皮电」当成一个检索词直接去找「有没有可用数据」,然后按体量排序。本库在体量上毫无竞争力,但在「事件定义是否已冻结」这一点上独一无二。检索的目标应当先定:你要的是原料,还是结论。

6.3 与 propofol-anesthesia-dynamics 的逐项对照

这两份数据来自同一批作者、同一家医院,容易被人当作同一件事的两种版本。逐项对照下来,差异相当大。

对照项 本库 propofol-anesthesia-dynamics
受试者 11 名镇静组 9 名
给药程序 分阶段,具体浓度变化指向外部文献 十阶段,浓度 0 升至 5 再降回 0,每阶段约十五分钟
记录时长 约 3–4 小时 约 3 小时
心率变异性 无 有,逐拍索引
意识消失与恢复时刻 无 有,按钮反应判定
皮肤电内容 逐事件脉冲时刻与幅度 皮电点过程索引,按窗口汇总
脑电 无 无
发布内容形态 两个单列 CSV 多位受试者多文件 CSV 加代码

这张表的关键结论是:意识状态标签只在那份数据里。如果你想做「意识消失时刻的皮肤电变化」,本库给不了时刻,必须去那份数据;如果你只想要事件级的脉冲表,本库给得更直接。两份数据应视为互补,不能互相替代。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

在给这份数据打分之前,要先纠正一个常见的框架错位:它不是按「数据量」这个维度设计的产品,用数据量去衡量它必然得出低分,而这个低分没有信息量。它的设计目标是为一套统计方法提供冻结的参照结果,衡量它的尺子应当是「事件定义是否清晰、方法是否可复现、边界是否透明」。用图像分类数据集的标准去衡量它,就像用体重秤去量身高。

同样的错位也会导致误判:看到 22 名受试者就断定「不能做统计」,看到没有原始波形就断定「质量差」。这两条判断都跳过了它原本的用途。本节下面的评分,每个维度都会先说清「在本库的用途下这意味着什么」。

7.1 DAIMS 五维评分

按 DAIMS(Data and AI Model Scorecard)常用的五维做一次粗评,满分各五分,作为监督数据源与作为方法参照两种用途分别给分。

维度 作为方法参照 作为监督数据源 依据
数据规模 4 1 事件数按人计足够做描述统计,按人计只有 22
标注质量 4 2 事件由模型化方法筛出并有优度复核,但无独立人工标注
文档完整度 3 3 方法段详尽,字段说明极简,单位与零点未明
可获取性 3 3 许可清晰,但部分地区受限,且无一次性打包
可复用性 3 2 事件表可直接用,预处理不可改,组间混杂
合计 17 11 两种用途分差明显,与它的设计取向一致

分差的来源只有一个:它把最难的预处理固定在原地了。对以方法为参照的人,这是资产;对想拿它做训练集的人,这是负债。

7.2 分数的具体依据

规模一项给「作为方法参照」四分而非满分,理由是事件级样本虽够,但受试者级样本只有 22。任何跨个体的结论都落在一个很窄的置信带上,作者自己的论文也是以「每一条序列都被描述」的方式表述,而不是「这一组人平均如何」。

标注质量一项的两分与四分,区别在于「有没有独立的人工标注作为对照」。本库的事件是算法筛出来的,作者用拟合优度做了自洽性复核,这是一种「内部一致」而非「外部正确」的证据。它足以支撑方法论文的结论,不足以支撑「这些就是全部真实脉冲」的更强主张。

文档一项的三分,扣在字段层面。官方把采集条件写得很细(设备、部位、采样率、时长、假设),但把文件本身写得很薄:无单位、无表头说明、无零点说明、无编号起止。这种「方法详、字段略」的文档风格在同组作者的数据里比较一致,使用者应当预期需要自己补一层解析。

7.3 已知的、可枚举的偏差

偏差 方向 对结果的典型影响
组间器械与部位不同 两组的幅度与脉冲率都掺入器械效应 跨组比幅度不可信,比脉冲率也需谨慎
健康青壮年、单一中心 脉冲率与幅度偏向该人群 向老年或病人外推会低估变异
记录一小时的样本少 窗口越细,脉冲数波动越大(§4.4 的案例) 短窗口的统计量不稳定
温度只作假设未测量 长时程中温度漂移进入信号 镇静组三到四小时的基线漂移无法被解释
无刺激、无标签 数据变异性来自自然波动 无法定义事件相关的响应
阈值按受试者选 个体间幅度可比性下降 跨受试者比幅度需先标准化
事件表不可回收 预处理链路固定 换方法无法在同一批数据上验证

第一行值得展开。§4.4 的案例里,如果那位清醒受试者与一位镇静受试者的脉冲率相差一倍,这个差异里有多少来自镇静、多少来自「手指远端 vs 掌心」,本库无法回答。除非研究者的结论只在「两种状态各自的分布形状」这一层面陈述,否则混杂就无法回避。

7.4 外部验证矩阵

验证来源 能验证什么 不能验证什么
方法论文(PNAS 2020) 清醒组间隔分布符合逆高斯 镇静组是否同样符合
方法论文(IEEE TBME 2021) 模型化脉选择在不同队列与噪声下的稳健性 具体阈值数值的可移植性
镇静自主神经论文(PLoS ONE 2021) 行为与自主神经动态的关联 本库事件表与其索引逐项对应
父项目(arty-2540) 清醒组原始波形与分解成分 镇静组原始波形
同组作者其它 PhysioNet 发布 同机构的方法一致性 受试者是否重叠

这张表说明了一件重要的事:本库的每一项主张,都能在某一篇论文里找到落点;但没有任何一项主张,能在另一份独立团队的数据上得到外部验证。这不是本库独有的问题,而是小样本方法论文的通病。使用者应当把「已发表的内部一致」与「已独立复现」当作两件事。

7.5 它为何能持续:一个被反复引用的冻结参照

小库能活下来的方式,通常不是靠数据量,而是靠它占据了一个别人不愿意重做的位置。本库的位置是「已冻结的脉选择结果」:重做这件事需要原始波形、需要按论文实现阈值搜索、需要处理每个受试者的噪声差异,成本高、收益低。有人做了并公开,后来者便会引用它,而不是重做。

这个机制还带来一个副产品:它的引用会集中在方法学论文里,而不是应用论文里。这解释了为什么它的下载量不大,却在点过程与皮电分析的圈子里稳定出现。只要整合发放模型仍是皮电分析的主流解释之一,这份冻结结果就仍有参照价值。

§8 生态位与历史

8.1 从皮肤电到点过程的这条线

皮肤电的研究史可以粗分三段。第一段是临床与心理生理学的描述期,重点是把皮肤电导测准、把反应与刺激对上;第二段是成分分离期,把慢的张力与快的相位分开,用指数衰减模型去拟合;第三段是事件化期,也就是本库所在的这一段,把连续信号转成点过程,用间隔分布做推断。

第三段的转折点是整合发放模型的引入。它把「汗腺为什么这样发放」解释成一个可推导的随机过程,从而给间隔分布一个先验形状(逆高斯),再把这个先验当作脉选择的判据。这个转向的意义在于:阈值不再是一个需要拍脑袋的超参数,而是一个可以被生理约束反推的量。

8.2 作者的系列工作与本库的位置

同组作者围绕这条线做了一串工作,本库是其中的数据落点之一。

年份 工作 与本库的关系
2020 点过程刻画皮肤电(PNAS) 用清醒组数据验证逆高斯结构,是本库的科学基础
2020 整合发放模型解释脉冲幅度(预印本) 幅度层面的理论支撑
2021 模型化脉选择(IEEE TBME) 本库事件表所用的方法
2021 丙泊酚下行为与自主神经动态(PLoS ONE) 与本库镇静组相关的分析,但受试者数不同
2021 本库发布 把方法论的中间产物冻结公开

这五件事连起来看,本库的位置很清楚:它不是一个新数据集,而是一组论文的中间产物被整理成可下载的形态。理解这一点,就不会期待它有额外的标注或更大的规模。

8.3 同类资源为什么不走这条路

绝大多数皮电数据集选择发布原始波形,原因很实际:波形是通用的,事件表是方法专属的。发布波形,别人可以用任何方法处理;发布事件表,别人只能用你的方法,或者把你的结果当作对照。前者受众广,后者受众窄。

本库选择后者,等于接受了一个较小的受众,换来一个较高的复用精度。这个取舍在方法学社区里是合理的,在应用社区里则显得不友好。这也是为什么同一批作者同时发布了父项目(波形)与本库(事件)——让两类受众各取所需。

8.4 它在今天的可用性

今天再回头看,这份数据的价值没有衰减,但它的使用方式变了。当年它的主要用途是复现作者的统计流程;今天,它更多被当作「皮电事件检测算法」的黑盒测试输入——你写了一版新的脉检测,把结果和它对齐,看差多少。

这个新用途也带来了新的坑:对齐的前提是两边用的是同一批原始波形。若拿它去测一个基于不同前置滤波的实现,差异里会同时含有滤波差异与算法差异。想清楚这一点,再用它当基准,才不会把工程差异误读成算法优劣。

§9 使用指引

9.1 三种角色的路径

角色 最短路径 主要收获 主要风险
方法研究者 取事件表 → 算间隔 → 拟合分布 → 与论文数值比对 验证自己的实现 把门槛设得过宽,忽略了阈值搜索
应用工程师 取事件表 → 算脉冲率与幅度分布 → 做可行性探针 判断皮电是否有信息 直接拿去做训练,过拟合
教学与综述作者 取两组各一位受试者 → 画间隔分布 → 讲点过程 一个干净的示例 把两组当对照讲,误导听众

第一类人应当从方法论文出发,把本库当作对齐目标;第二类人应当把它当作「假设是否值得投入」的快速检验;第三类人应当只取单组,避免在课堂上制造一个假的对照。

9.2 一条最短的可用流程

下面是本库最短的一条完整流程:取一位清醒受试者的事件表,算间隔,做分布拟合,输出一张可以写进论文的图。

#-- 最短流程:单受试者间隔分布与拟合
import numpy as np

def load_two(path_t, path_a):
    t = np.loadtxt(path_t, delimiter=",", ndmin=1)
    a = np.loadtxt(path_a, delimiter=",", ndmin=1)
    assert t.shape == a.shape, "times 与 amps 长度不一致"
    return t, a

def pipeline(path_t, path_a, nominal_seconds=3600.0):
    t, a = load_two(path_t, path_a)
    iq = np.diff(t)
    mu, lam = float(iq.mean()), float(iq.mean() ** 3 / iq.var(ddof=1))
    return {
        "n": int(t.size),
        "rate_per_min": t.size / (nominal_seconds / 60.0),
        "iqi_mean_s": mu,
        "iqi_median_s": float(np.median(iq)),
        "ig_mu": mu,
        "ig_lambda": lam,
        "amp_median": float(np.median(a)),
    }

if __name__ == "__main__":
    print(pipeline("At-Rest/pulse_times_01.csv", "At-Rest/pulse_amps_01.csv"))

这个流程与 §4.4 的案例是同一件事的实现版:窗口级的问题在这里被收窄成单个受试者的整段统计,先跑通再看是否需要细化窗口。文中所有路径都按 At-Rest 目录相对当前工作目录书写,实际执行前请把目录改成你的解压位置。

9.3 引用方式

使用本库时,官方给出的引用格式为:作者列全、标题全称、标注版本 1.0、期刊署名为 PhysioNet、年份 2021、DOI 10.13026/r9p1-bk90,并建议同时附上 PhysioNet 平台本身的引用。若分析涉及父项目的数据来源,还应把 DOI 10.13026/arty-2540 一并列出。

论文方法段建议写明三点:使用了哪个目录(哪一组)、是否对两组做过器械协变量控制、是否自行重做过脉选择。第三点尤其重要——若你直接在作者的事件表上做分析,结论的成立范围就被限定在作者的脉选择方法之内;若你重做过,就应当在方法段说明你与作者方法的差异。

§10 AI 使用声明

项目 声明
文本生成 本文由 AI 辅助撰写,编辑负责结构与事实把关
数字来源 规模、结构、边界三类数字来自 PhysioNet 官方项目页与 Europe PMC 摘要
文件核验 项目页正文已取;文件目录在本次访问中返回 403,未能核对文件名与题头
论文信息 仅阅读摘要,未读全文
未核验内容 文件编号起止、时间零点口径、幅度的物理单位、各组事件条数、总字节数
图像 无配图;封面为生成式提示词,不含真实生理信号
免责 本文不构成临床建议;使用须遵守 PhysioNet Contributor Review Health Data License 1.5.0

常见误读(避坑清单)

说法 实际 证据
这是一份皮肤电原始波形库 只有事件表,原始波形在父项目 官方 Format 段与 Parent Projects 区
两组是同一批人前后对照 两组为不同个体 官方摘要明确写「不同的」健康志愿者
清醒组一共采了 11 人 采了 12 人,一人因雷诺现象排除 官方 Methods 段
镇静组就是丙泊酚十阶段九人那份 人数与编号体系都不同 两份 PhysioNet 项目的官方描述
脉冲时刻等于交感神经放电时刻 汗腺延迟与平滑使两者相差数秒 官方 Background 段对汗腺机制的说明
脉冲幅度可以直接跨人比较 幅度受皮位、皮肤厚度、电极接触影响 官方 Methods 段列出两种电极位置
可以拿它训练情绪分类模型 无刺激、无标签,官方明示观察性 官方 Usage Notes 段
许可等同于 ODC-BY 为 PhysioNet Contributor Review 1.5.0 官方 Access 区
全库体量很小,可以一次取全 官方未公布体积,且部分地区受限 官方文件区提示与本次访问结果
时间单位是秒,可以直接当毫秒用 单位是秒,转换需自查 官方 Format 段

FAQ

问:这份数据能不能直接做深度学习的输入?
不能直接做。它没有波形,只有事件。若一定要用,只能把事件表当作特征,例如按窗口统计脉冲数与幅度,这已经不是端到端。

问:为什么只有 22 人还能发论文?
因为它的推断单位是事件与序列,而不是人。作者对 11 条清醒序列逐一做分布检验,报告每条都能被逆高斯描述。这种表述方式本身就不依赖人群层面的统计。

问:镇静组的丙泊酚浓度在哪?
不在本库。官方在数据描述里写明浓度随时间变化的情况见外部文献,本库不含给药曲线。

问:能把两组拼起来做二分类吗?
技术上前提具备(两类事件表),但结果会被器械与部位差异污染。若要尝试,必须把设备与电极部位作为协变量,并在结论里明确这一限制。

问:文件编号从 1 开始还是从 0 开始?
官方未公布。只能从实际下载的文件名判断,或从目录清单推断。

问:脉冲幅度的单位是什么?
官方未写明。应按相对量处理,不要当作微西门子。

问:为什么我下载不到文件?
文件区对部分访问地区返回不可用提示。这是地区策略,不是账号问题,也不是数据集下架。

问:它与父项目能否混用?
可以,但要清楚父项目只覆盖清醒组,且会给原始波形与分解成分。两者重叠部分的数据是一致的。

问:能不能用它评估新的脉检测算法?
可以,但它只能对齐到作者的方法。若你的实现前置滤波不同,差异中会混入滤波效应。

问:为什么要强调只取一组做教学?
因为两组混杂,课上演示成对照会传递错误的方法论。单组演示反而能干净地讲清点过程。

术语表

术语 英文 含义
皮肤电活动 electrodermal activity, EDA 皮肤电导随汗腺活动变化的统称
皮肤电导 skin conductance 两点之间的电导,单位西门子
张力成分 tonic component 缓慢变化的基线水平
相位成分 phasic component 秒量级的脉冲式上升与回落
脉冲 pulse 一次可辨识的电导上升事件
脉冲时刻 pulse time 脉冲发生的时间标号,单位秒
脉冲幅度 pulse amplitude 脉冲相对基线的抬升量
脉冲间隔 inter-pulse interval 相邻两次脉冲的时间差
点过程 point process 以事件时刻为基本单位的随机过程
整合发放 integrate-and-fire 驱动量累积超过阈值即发放的模型
逆高斯分布 inverse Gaussian 漂移扩散首次穿越时间的分布
广义逆高斯 generalized inverse Gaussian 含逆高斯为特例的三参数族
对数正态 lognormal 尾部较重的右偏分布
伽马分布 gamma 尾部较轻的右偏分布
拟合优度 goodness of fit 检验模型与数据吻合程度的方法
柯尔莫哥洛夫—斯米尔诺夫度量 Kolmogorov-Smirnov 经验分布与理论分布的最大偏差
交感神经 sympathetic nervous system 驱动汗腺分泌的神经分支
汗腺 sweat gland 分泌汗液的皮肤腺体
乙酰胆碱 acetylcholine 交感节后纤维作用于汗腺的递质
非惯用手 non-dominant hand 受试者不常用的那只手
远端指骨 distal phalanx 手指末节,电极所贴位置
丙泊酚 propofol 静脉麻醉药,用于本库镇静组
程控输注 computer-controlled infusion 按程序调节给药速率的方式
神经营养反馈系统 Neurofeedback System Thought Technology 公司的采集设备
BedMaster BedMaster 麻省总医院的监护数据采集系统
站立位静息 quiet wakefulness 清醒但无任务的安静状态
雷诺现象 Raynaud’s phenomenon 肢端血管痉挛,影响皮电质量

附录 A:核心数字核对表

项 值 来源 来源层级
清醒组人数 11 官方摘要与 Methods 官方页面
清醒组采集人数 12 官方 Methods 官方页面
清醒组年龄 22–34 岁 官方 Methods 官方页面
清醒组时长 约 1 小时 官方摘要与方法 官方页面
清醒组采样率 256 Hz 官方摘要与方法 官方页面
镇静组人数 11 官方摘要与 Methods 官方页面
镇静组时长 约 3–4 小时 官方摘要与方法 官方页面
镇静组采样率 500 Hz 官方摘要与方法 官方页面
两组总人数 22 官方数据描述 官方页面
文件命名 pulse_times_##.csv / pulse_amps_##.csv 官方 Format 段 官方页面
时刻单位 秒 官方 Format 段 官方页面
许可 PhysioNet Contributor Review 1.5.0 官方 Access 区 官方页面
首次发布 2021-06-30 官方页眉 官方页面
排除受试者原因 雷诺现象 官方 Methods 官方页面
总字节数 官方未公布 — 未核实
各组事件条数 官方未公布 — 未核实

附录 B:数字的来源分层

官方页面一级。 人数、年龄范围、记录时长、采样率、设备名、电极位置、排除理由、文件命名、时刻单位、许可名称、发布日期、父项目关系。这一层可以直接引用,出错责任在官方表述与转写之间。

论文摘要二级。 清醒组间隔分布符合逆高斯的结论、两组队列与器械差异下脉选择稳健的结论。这一层只用于理解方法的可信度,不用于陈述数据规模。

未核实三级。 文件编号起止、时间零点、幅度单位、各受试者事件条数、总体积、镇静组年龄、麻醉科文献中的具体给药程序。这一层在本页一律标注为未公布或未核实,不做推算。

附录 C:完整参考文献

  1. Subramanian S, Purdon P, Barbieri R, Brown E. Pulse Amplitudes from electrodermal activity collected from healthy volunteer subjects at rest and under controlled sedation (version 1.0). PhysioNet. 2021. doi:10.13026/r9p1-bk90.
  2. Boucsein W. Electrodermal Activity. Springer, 2012.
  3. Subramanian S, Barbieri R, Brown EN. Point process temporal structure characterizes electrodermal activity. PNAS, 2020. doi:10.1073/pnas.2004403117.
  4. Subramanian S, Purdon PL, Barbieri R, Brown EN. A Model-Based Framework for Assessing the Physiologic Structure of Electrodermal Activity. IEEE Trans Biomed Eng, 2021. doi:10.1109/TBME.2021.3071366.
  5. Subramanian S, Purdon PL, Barbieri R, Brown EN. Elementary Integrate-and-Fire Process Underlies Pulse Amplitudes in Electrodermal Activity. bioRxiv, 2020. doi:10.1101/2021.01.06.425499.
  6. Purdon PL, et al. Electroencephalogram Signatures of Loss and Recovery of Consciousness from Propofol. PNAS, 2013.
  7. Subramanian S, Barbieri R, Brown E. Electrodermal Activity of Healthy Volunteers while Awake and at Rest (version 1.0). PhysioNet, 2020. doi:10.13026/arty-2540.
  8. Subramanian S, Purdon PL, Barbieri R, Brown EN. Quantitative assessment of the relationship between behavioral and autonomic dynamics during propofol-induced unconsciousness. PLoS ONE, 2021. doi:10.1371/journal.pone.0254053.

附录 D:任务代码

下面这段代码把 §9.2 的流程批量化,输出一张按受试者排列的汇总表,可用于论文的描述性统计附录。

#-- 批量汇总:两组各自跑一遍描述统计并输出 CSV
import csv
import pathlib

import numpy as np

def group_table(root, group, nominal_seconds):
    rows = []
    d = pathlib.Path(root) / group
    for t_path in sorted(d.glob("pulse_times_*.csv")):
        idx = t_path.stem.split("_")[-1]
        a_path = t_path.with_name(f"pulse_amps_{idx}.csv")
        t = np.loadtxt(t_path, delimiter=",", ndmin=1)
        a = np.loadtxt(a_path, delimiter=",", ndmin=1)
        iq = np.diff(t)
        rows.append({
            "group": group,
            "subject": idx,
            "n_pulses": int(t.size),
            "rate_per_min": round(t.size / (nominal_seconds / 60.0), 3),
            "iqi_median_s": round(float(np.median(iq)), 3) if iq.size else "",
            "amp_median": round(float(np.median(a)), 6) if a.size else "",
        })
    return rows

if __name__ == "__main__":
    rows = []
    rows += group_table("./eda-rest-sedation", "At-Rest", 3600)
    rows += group_table("./eda-rest-sedation", "Propofol-Sedation", 3.5 * 3600)
    with open("eda_summary.csv", "w", newline="") as f:
        w = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
        w.writeheader()
        w.writerows(rows)
    print("rows", len(rows))

镇静组的标称时长在这里取三点五小时,是一个折中值;官方写的是约三到四小时。若要写进论文,应把这一取值作为方法段的一个明示参数,并做一次三点零与四点零的敏感性检查。

附录 E:如果只记五件事

第一,它是事件表而不是波形库。 每个受试者两个单列 CSV,时刻以秒为单位,幅度单位未公布。

第二,两组是不同的人。 11 名清醒静坐、11 名丙泊酚镇静,器械、部位、采样率、时长全不同,不是前后对照。

第三,它能做什么。 复现点过程统计、检验间隔分布形状、给脉检测算法做对齐基准。

第四,它不能做什么。 训练深度模型、做情绪识别、做器械无关的跨组比较、还原刺激响应。

第五,它为什么还在被引用。 因为它把最费力的脉选择冻结了下来,成了方法社区里一个不需要重做的参照点。

编辑说明

本页核验于 2026 年 10 月 28 日。项目页正文可直接取得;文件目录与文件接口在本次访问中返回 403 或地区限制提示,故文件命名、单位、零点等描述均转述官方正文,未逐文件核对。论文信息仅取自 Europe PMC 摘要。库内检索确认不存在与本库同名的既有记录;相近的记录按 §6.1 的表格逐一区隔。凡官方未公布的数字,本页一律标注未公布,未作推算或填补。


相关数据集导航

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

  • dreamt — 共享标签:生理信号 / 可穿戴传感 / 评测基准
  • hf-lung-v1 — 共享标签:生理信号 / 可穿戴传感 / 评测基准
  • kinecal — 共享标签:生理信号 / 可穿戴传感 / 评测基准
  • accelerometry-walk-climb-drive — 共享标签:生理信号 / 可穿戴传感 / 评测基准
  • consumer-grade-wearables — 共享标签:生理信号 / 可穿戴传感 / 评测基准
  • ecgiddb — 共享标签:生理信号 / 可穿戴传感 / 评测基准
  • macecgdb — 共享标签:生理信号 / 可穿戴传感 / 评测基准
  • videopulse — 共享标签:生理信号 / 可穿戴传感 / 评测基准
  • unicaprop — 共享标签:生理信号 / 可穿戴传感
  • grabmyo — 共享标签:生理信号 / 可穿戴传感 / 评测基准

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

返回 AI-Ready 数据集