PERG-IOBA 图形视网膜电生理数据集

西班牙巴利亚多利德大学 IOBA 研究所二十年积累的 336 份记录、一千三百余 条瞬态图形视网膜电图,每条 255 个采样点覆盖 150 毫秒,配年龄、性别、视力与至多三项诊断,是最早公开的眼科电生理信号库之一

来源 西班牙巴利亚多利德大学应用眼科生物学研究所(IOBA)2003 至 2022 年临床检查,Metrovision MonPack 120 视诱发电位仪采集发布时间: 2026-10-19最后更新: 2026-10-20 阅读 20
PERG-IOBA 图形视网膜电生理数据集

信息速览

数据集名称PERG-IOBA 图形视网膜电生理数据集
数据类型生理信号,时序数据,临床变量,开放获取
规模304 名受试者;336 份记录;一千三百余 条 PERG 信号
接入方式西班牙巴利亚多利德大学应用眼科生物学研究所(IOBA)2003 至 2022 年临床检查,Metrovision MonPack 120 视诱发电位仪采集
AI 就绪度

眼科人工智能的公开数据几乎全是影像:眼底照、光学相干断层扫描、视野图,动辄数万张。但眼睛不只有结构,还有功能,而功能层面的客观测量长期缺少公开数据。图形视网膜电图(pattern electroretinogram,常缩写为 PERG)就是这样一个空位——它用电极记录黄斑与视网膜神经节细胞对翻转棋盘格刺激的电反应,能在结构尚未改变时发现功能异常。

这份数据集是目前公开可得的少数 PERG 资源之一。西班牙巴利亚多利德大学应用眼科生物学研究所(IOBA)把 2003 至 2022 年近二十年的临床检查整理出来,共 304 名受试者、336 份记录、一千三百余条信号,配年龄、性别、logMAR 视力与最多三项诊断,整包不到 1 MB。

它的规模在机器学习语境里算不上大,但它的位置很特殊。要研究视网膜与视神经的功能性改变、要验证波形分析方法、要把电生理与影像做多模态融合,这份数据是目前少有的可用起点。需要提醒的是,官方描述里有几处数字与文件内容不符,后文会逐条列出,使用时建议自己重算。

§1 它是什么:一份功能模态的眼科电生理库

1.1 一句话定义与三条边界

这是一套以单次就诊为记录单位、以 150 毫秒瞬态波形为内容、覆盖多种视网膜与视神经疾病的功能性电生理数据集。

「以单次就诊为记录单位」意味着主键是就诊而非患者。304 名受试者产生 336 份记录,差额来自 23 名多次就诊者:19 人两次、1 人三次、1 人四次、2 人五次。做患者级分析必须先按受试者聚合,否则同一个人会被重复计数。

「150 毫秒瞬态波形」意味着每条信号只覆盖刺激后很短的一段时间。这个窗口刚好容纳 N35、P50、N95 三个特征波,但 N95 之后的部分被截断,看不到更长的时程。做频域分析时,150 毫秒的窗长决定了频率分辨率的下限约为 6.7 Hz。

「覆盖多种疾病」意味着这不是一个病例对照设计好的队列。诊断是临床综合判断的结果,分布高度不均,前五类占约三分之二,其余七十余种各只有个位数。用这份数据做分类研究,必须先想清楚类别怎么合并。

1.2 四个组成部分

组成 规模 粒度 用途
信号文件 336 份 一次就诊一份 波形分析、特征提取
参与者信息表 336 行 一次就诊一行 标签、协变量
标准波形示意图 1 张 — 核对形态是否正常
校验和清单 339 行 — 完整性核验

四者通过四位编号连接。信号文件名就是编号,信息表的第一列也是编号。这个设计简单直接,但要注意编号是四位补零的字符串,排序时应按数值而非字典序处理——虽然本例中 0001 到 0336 连续且位数一致,字典序与数值序恰好相同,但一旦编号超过 9999 这个假设就会失效。

1.3 PERG 测的是什么

理解这份数据,先要理解这个检查在测什么。

眼睛受到翻转棋盘格刺激时,视网膜会产生一系列电反应。全视野视网膜电图(ERG)用弥散闪光刺激整个视网膜,主要反映光感受器与双极细胞的功能;PERG 不同,它用图案刺激黄斑区,主要反映视网膜神经节细胞及其轴突的功能。两者的分工是:ERG 看「感光与初步处理」,PERG 看「输出通路」。

波形上有三个标志点。N35 出现在约 35 毫秒,是负向波;P50 在约 50 毫秒,是正向波;N95 在约 95 毫秒,是幅度更大的负向波。三者中 P50 主要来自外层视网膜,N95 与神经节细胞的关系更紧。

临床最常用的指标是 N95 与 P50 的幅度比值。正常人的这个比值通常在 1 以上,当神经节细胞受损而外层视网膜相对完好时,N95 变小、P50 保持,比值下降。青光眼与视神经病变正是这种模式。反过来,如果黄斑本身病变,P50 会先变小,比值可能升高或不变。

这个比值的诊断价值在于它把「哪里坏了」变成了一个可计算的比例,而不只是一个绝对幅度。绝对幅度受电极接触、角膜状态、瞳孔大小影响很大,比值则部分抵消了这些因素。

不过比值也有失效的时候,这一点在文献里讨论得不多但对使用者很重要。当 P50 本身很小(例如黄斑严重病变),分母趋近于零,比值的方差会急剧放大,此时算出来的数值没有意义。同理,若 N95 完全消失,比值接近零,但「零」既可能是真实的神经节细胞功能丧失,也可能是信号太弱测不出来。

因此判断时应设一个幅度门槛:P50 低于某个阈值时,比值记为缺失而不是记为一个数。这个阈值取多少没有统一标准,但常见做法是参考同机构正常人均值的一小部分。这份数据没有提供正常值表,使用者只能自己从诊断标注为正常的记录里估计。

1.4 采集协议的关键参数

参数 值 含义
设备 Metrovision MonPack 120 法国 Metrovision 公司视诱发电位仪
标准 ISCEV 图形视网膜电图指南 国际临床视觉电生理学会
刺激 黑白翻转棋盘格 低对比度,翻转频率 1–2 Hz
标称采样率 1,700 Hz 设备记录时的采样率
记录窗长 150 毫秒 每条信号覆盖的时间
采样点数 255 每份文件固定 255 行
电极位置 角膜或眼周皮肤 非侵入
信号处理 多次试次平均 提升信噪比

这个排列的实用含义在于它描述了一条从「器械可控」到「贴近真实」的梯度,但在 PERG 这里只有单一一类检查,不涉及多测试的梯度问题。

协议遵循 ISCEV 标准这一点很重要,需要展开说。视觉电生理领域曾经因为各家参数不一而难以横向比较:刺激的棋盘格尺寸不同、对比度不同、翻转频率不同、记录窗长不同,同一个患者在不同医院做的 PERG 数值可能相差显著。ISCEV 指南把关键项统一起来,2012 年更新版是目前公认的基准,规定了刺激野大小、翻转频率、放大器带宽、记录窗长与电极类型。

遵循标准意味着这份数据具备与其他同类研究比较的方法基础。但它不保证数值可比——标准规定的是方法,不是正常参考值。不同设备的放大器特性、不同实验室的电极类型仍会造成系统偏差,跨中心比较时通常需要各自建立正常参考区间再做标准化。

这份数据没有提供正常参考区间,只提供了标注为正常的原始记录。这既是缺憾也是机会:使用者可以从这些记录里自行估计本数据集的参考分布,但这个分布能否推广到别的中心,取决于设备与操作是否一致。

1.5 与眼科影像数据集的分工

模态 反映 典型公开资源 局限
眼底照 视网膜表面形态 多,规模大 看不到功能
OCT 视网膜分层结构 多,规模大 早期功能异常时结构可正常
视野 主观视功能 有,多为青光眼队列 依赖受试者配合
PERG 客观视网膜电功能 极少 幅度小、噪声敏感

这四类互补而非替代。结构正常但功能异常是很多视网膜营养不良的早期特征,例如视网膜色素变性在眼底改变尚不明显时,电生理往往已经异常。反过来,电生理正常也不能排除结构病变,因为检查只覆盖黄斑区一小块区域。

公开资源的分布极不均衡,影像类动辄数万张,电生理类几乎空白。这份数据集的价值主要不在规模,而在这个「有」本身。

1.6 二十年跨度意味着什么

2003 到 2022 年,近二十年。这个跨度带来两重含义。

正面的是样本多样性。不同年份的设备状态、操作技术员、检查流程都有变化,数据里因此包含了真实世界的技术变异。这类变异在精心设计的单年前瞻研究里通常被控制掉了,而真实部署的算法恰恰要面对它。

负面的是缺乏统一质控。二十年里 ISCEV 指南更新过(2012 年修订),设备可能维护升级,技术员换过几批。官方没有提供按年份的质控信息,也没有说明是否做过回溯性的一致性检查。做时间分层分析时要留意这一点:若某年的信号质量整体偏差,模型可能会把年份当成特征。

§2 数据构成:文件、字段与真实结构

2.1 目录与文件

perg-ioba-dataset-1.0.0/
├── csv/
│   ├── 0001.csv  …  0336.csv     336 份记录,编号连续
│   └── participants_info.csv     参与者信息主表
├── LICENSE.txt                   许可全文(19.9 KB)
├── SHA256SUMS.txt                校验和(25.8 KB,339 行)
└── typical_PERG.png              标准波形示意(11.7 KB)

未压缩总 5.7 MB,ZIP 包 978.9 KB。校验和清单有 339 行:336 份记录、主表、许可、图片,与实际文件数完全对应。这个对应关系本身就是一次完整性证据——若清单行数与实际文件数不符,说明打包有问题。

2.2 记录文件的实际列结构

官方描述基础列为 TIME_1、RE_1、LE_1,重复测试时增加 TIME_2、RE_2、LE_2。与描述一致,且列数分布如下:

列组数 列数 记录数 含义
1 3 49 双眼各测一次
2 6 240 其中一只眼重复一次
3 9 41 两只眼各重复一次,或一只眼测三次
4 12 5 更多重复
5 15 1 最多的一份,共 10 条信号

按列统计,信号总数 = 49×2 + 240×4 + 41×6 + 5×8 + 1×10。这个加法与官方公布的总数完全一致,是一处可独立验证的自洽点。

需要说明的是,仅从列名无法区分「两只眼各重复一次」与「一只眼测三次」这两种情况。要判断必须看具体哪只眼的列存在。336 份记录全部同时含 RE 与 LE 两类列,与官方「每份记录保证每只眼至少一条信号」的说明一致。

2.3 时间戳的真实含义

这是本数据集最需要看清的一处细节。

官方给出采样率、窗长与采样点三个数字,三者不完全自洽:150 毫秒按标称采样率应有 255 个间隔即 256 个点,若取 255 个点则覆盖 254 个间隔。文件给出的答案是:时间戳从 0 开始,步长稳定为 0.6 毫秒,最后一个点的时刻为 149.9 毫秒。

换算一下:0.6 毫秒的倒数约 1,667 Hz,接近但不等于标称值。255 个点、254 个间隔、每间隔 0.6 毫秒,总跨度 152.4 毫秒的说法不成立,按 254×0.6 = 152.4 毫秒推算与文件末尾的 149.9 毫秒冲突——实际是步长 0.6 毫秒但首点时刻非零,或设备内部做了取整。无论哪种,结论是:以文件里的时间戳为准,不要用标称采样率反推时间轴。

这个细节的重要性在于频谱分析。若按标称采样率去算频率轴,与按 1,667 Hz 算相比,所有频率读数会偏高约 2%。对定位 N95 这种宽峰影响不大,但对需要精确频率的谐波分析会有系统性偏移。

2.4 幅值的量级

对全部信号、345,270 个采样点做统计:

指标 值
全库最小 −27.9 μV
全库最大 +32.9 μV
全库均值 −0.32 μV
全库标准差 2.68 μV
逐信号正向峰值中位数 2.3 μV
逐信号正向峰值第 95 百分位 7.1 μV
逐信号负向谷值中位数 −2.5 μV
逐信号峰峰值中位数 5.3 μV

这些数字说明 PERG 是幅度极小的信号。对比一下:静息心电的 R 波通常在 1 毫伏即 1,000 微伏量级,脑电的诱发电位在几微伏到几十微伏。PERG 的主体能量在几个微伏,与脑电诱发电位同量级,比心电低两到三个数量级。

幅度小带来两个直接后果。第一,对电极接触与皮肤阻抗极敏感,同样的视网膜功能可能因接触差异而读数不同。第二,对肌电、眼动、工频干扰都敏感——这也是为什么要多次试次平均。

2.5 三个特征波的位置

按常规窗口提取每个信号的三峰位置(N35 取 20–45 毫秒内最小值,P50 取 45–70 毫秒内最大值,N95 取 70–130 毫秒内最小值),在峰值可辨的 1,259 条信号上得到:

特征波 中位潜伏期 四分位区间
N35 28.2 ms 26.4 – 35.4 ms
P50 54.6 ms 49.8 – 58.8 ms
N95 104.4 ms 95.4 – 117.0 ms

P50 的中位潜伏期 54.6 毫秒落在 ISCEV 参考的正常范围附近,N95 在 104 毫秒左右,两者都与教科书描述吻合。这说明数据整体可用,波形没有系统性错位。

N95 与 P50 的幅度比值中位数为 0.83,四分位区间 0.41 至 1.8,跨度很大。这个分布反映的是疾病构成的异质性——黄斑病变会让 P50 变小从而抬高比值,神经节细胞病变会让 N95 变小从而压低比值,两类混在一起就成了一个很宽的分布。按诊断分层后应该会清晰得多。

2.6 参与者信息表的真实字段

官方列出的字段名与文件里实际的列名不完全一致。文件表头为:

id_record, date, age_years, sex, diagnosis1, diagnosis2,
diagnosis3, va_re_logMar, va_le_logMar, unilateral, rep_record, comments

差异在四处:年龄列叫 age_years 而非 age;视力列叫 va_re_logMar 与 va_le_logMar;性别取值是 Male / Female 而非小写;其余五列与描述一致。

这不是数据错误,而是文档与实现之间的常见脱节。它说明了一件实操层面的事:任何「字段说明」都应视为待核对,而不是可直接依赖的契约。写脚本前先读表头,只需三行代码,能省掉后面大量调试。

各字段的实际填充情况:

字段 说明 实际填充
id_record 四位编号 336 行,与信号文件一一对应
date 就诊日期 已随机平移,仅保留顺序与间隔
age_years 年龄 4 至 86 岁,均值 37.1 岁
sex 性别 女 176、男 160
diagnosis1–3 至多三项诊断 共 82 种写法,空值常见
va_re_logMar 右眼视力 有缺失
va_le_logMar 左眼视力 有缺失
unilateral 单侧标记 仅 8 行有值
rep_record 随访关联 55 行有值
comments 备注 多为空

视力两列合计 38 个空缺单元。相对 672 个应填单元(336 行 × 2 列),缺失率约 5.7%。这个比例不算高,但要注意缺失机制——若缺失集中在儿童或认知障碍者(无法配合视力表),则缺失与人群特征相关,直接删除会引入偏倚。

2.7 诊断字段的分布

82 种不同写法的前十五位如下:

诊断 记录数
Normal 106
Retinitis pigmentosa 47
Macular dystrophy 33
Inflammatory disease 24
Stargardt disease 23
Cone-Rod dystrophy 15
Chorioretinopathy Birdshot type 12
Inherited optic atrophy 10
Systemic disorder with ocular manifestations 9
Fundus flavimaculatus 8
Congenital stationary night blindness 8
Central areolar choroidal dystrophy 8
Autoimmune retinopathy 8
Retinal toxicity 7
Congenital abnormality of the retina 7

前五类合计 233 条,占 336 份记录的约 69%。其余七十七种分布在剩余的三成里,多数只有一两次出现。

这个分布形态对建模有直接影响。想做一个「正常 vs 异常」的二分类,106 对 230,比例尚可。想做多分类,前五类之外的类别样本太少,无论如何划分都会有一批类别无法可靠评估。更现实的做法是按机制归并:营养不良类(视网膜色素变性、Stargardt、锥杆营养不良、眼底黄色斑点症、中央晕状脉络膜营养不良)、炎症类、视神经类、正常、其他。

按机制归并后的大致规模如下:

大类 包含的主要诊断 记录数约
正常 Normal 106
遗传性营养不良 视网膜色素变性、Stargardt、锥杆营养不良、眼底黄色斑点、中央晕状脉络膜营养不良 113
炎症与其他获得性 炎症性疾病、Birdshot 型脉络膜视网膜病变、自身免疫性视网膜病变、视网膜毒性 51
视神经 遗传性视神经萎缩 10
系统性疾病眼部表现 Systemic disorder with ocular manifestations 9
先天异常 视网膜先天异常、先天性静止性夜盲 15
其他与未归 其余写法 32

这张表是归并方案的一个示例,不是唯一答案。不同的研究问题会要求不同的切法:研究遗传性视网膜营养不良,可以把第一类再细分;研究药物毒性,需要把视网膜毒性单独拎出。

要提醒的是,这个归并基于诊断字符串的字面意思,未核对临床定义。例如「眼底黄色斑点症」与「Stargardt 病」在临床上高度重叠,有些文献视为同一疾病的不同阶段,但在这份数据里是两个独立写法。若按字面归入同一大类,需要说明依据。

2.8 随访关联的特殊之处

rep_record 字段格式为 id:编号,标记该记录是随访。官方描述称编号可能指向「前一次或后一次记录」,这个双向表述值得注意。

多向关联的存在(有一行填了 Id:0329 - Id:0154 - Id:0049 - Id:0271 四个编号)说明这个字段不是简单的父子链接,而更像一个松散的组标记。做纵向配对时不能假设有向图结构,应当先把所有编号抽出来建立无向图,再看连通分量的形态。

55 份记录带随访标记,占 16.4%。这意味着八成以上的记录是孤立的单次检查,纵向分析的实际可用样本远小于 336。这是个容易低估的限制。

§3 怎么拿到:开放下载与宽松许可

3.1 获取路径

这是完全开放的条目。不需要凭证、不需要签数据使用协议、不需要培训、不需要机构审批。任何人访问条目页即可下载。

三种下载方式:

方式一 整包
wget https://physionet.org/static/published-projects/perg-ioba-dataset/a-comprehensive-dataset-of-pattern-electroretinograms-for-ocular-electrophysiology-research-1.0.0.zip
unzip a-comprehensive-dataset-of-pattern-electroretinograms-for-ocular-electrophysiology-research-1.0.0.zip

方式二 递归下载目录
wget -r -N -c -np https://physionet.org/files/perg-ioba-dataset/1.0.0/

方式三 AWS 命令行
aws s3 sync --no-sign-request s3://physionet-open/perg-ioba-dataset/1.0.0/ ./perg

第三种方式值得记一下。PhysioNet 的开放数据同步在公开的 S3 桶 physionet-open 上,用 --no-sign-request 可以匿名拉取。对批量下载多个数据集的场景,这比逐个 HTTP 请求稳定得多。

整包只有 978.9 KB,一次请求即可完成,不必考虑断点续传。

3.2 校验

sha256sum -c SHA256SUMS.txt | grep -v OK

没有输出即全部通过。清单 339 行,覆盖全部文件。

这里有个容易犯的错:清单里的路径形如 csv/0001.csv,是相对路径,必须在解压后的根目录执行。若在上一级目录跑,会全部报找不到文件,看起来像整包损坏,实际只是路径不对。判断方法很简单——失败率 100% 就是路径问题。

3.3 许可的具体含义

Open Data Commons Attribution License v1.0,通常简称 ODC-By。三个要点:

只要求署名。 使用、修改、再分发都允许,唯一义务是标注来源。

允许商业使用。 这一点与知识共享的 BY-NC 系列不同。数据集本身没有排除商业用途,做产品原型时可以放心使用。

不要求相同方式共享。 与 BY-SA 不同,衍生作品可以用你自己的许可发布。这意味着在这份数据上训练出来的模型、写出来的代码,不必反过来开源。

对比来看,这套条款在医学公开数据里属于最宽松的一档。多数医学数据要么受限访问(如 MIMIC 系列),要么禁止商用(如许多 CC BY-NC 条目)。ODC-By 的组合很少见。

副标题里的「署名」在实务上应怎么做:论文里引用数据集与 DOI;代码仓库的 README 里注明数据来源;产品文档里列出数据出处。这三处任一缺失都可能构成违约,成本很低,建议当成固定动作。

§4 质量与已知问题

4.1 官方描述与文件内容的三处不一致

这是使用这份数据最需要先知道的事。

项 官方描述 文件内容 差异
无眼科疾病受试者 100 名 诊断字段为 Normal 的记录 106 条 +6
女性受试者 155 名 性别为 Female 的记录 176 条 +21
参与者信息表字段名 age / va_re / sex 等 age_years / va_re_logMar / sex 等 命名不同

第三处是文档与实现的脱节,无实质影响。前两处需要分析。

最可能的解释是统计口径不同。官方说「100 subjects」「155 were female」,用的是「人」;本页统计的是「记录」。304 人产生 336 份记录,若多次就诊者中女性偏多、或正常人中多次就诊者偏多,就会出现记录数高于人数的情况。但 176 − 155 = 21 的差额相对 336 份记录并不算小,仅凭 32 份额外的记录难以完全解释。

另一种可能是官方在撰写时的统计与最终发布版本之间存在版本差。数据在 2024 年 1 月发布,论文描述可能在更早的草稿阶段写成。官方页面没有版本变更记录可以佐证。

无论原因如何,实务结论是一样的:涉及样本构成的表述,自己重算一遍并写明口径。写「336 份记录中诊断标注为正常的 106 份」比写「100 名正常人」更准确,也更不容易被质疑。

4.2 缺失与不规则

视力缺失。 两份视力列共 38 个空缺。官方说缺失标为 NA,实际部分空缺是空字符串而非 NA。读表时要同时处理两种表示。

单侧标记稀疏。 unilateral 只有 8 行有值。这意味着「病变只影响一只眼」这个信息在绝大多数记录里是缺省的,不能解读为「双眼都受影响」。若要做眼别分析,只能靠逐眼比对信号来推断。

诊断至多三项。 字段设计上限是三项,但临床上一位患者可能同时有多种诊断。超出三项的部分被丢弃,这是一个信息截断,官方未说明截断规则。

随访标记覆盖不足。 55 份记录有随访标记,占 16.4%。其余记录可能是首次就诊,也可能是随访但未标记。官方未说明标记的填写规范。

4.3 信号质量:95 条近乎平直的记录

按「正向峰值不超过 0.3 微伏」这一简单判据筛,全部信号中有 95 条属于近乎平直的情况,占 7.0%。

这个比例值得单独说。平直信号的可能原因有三种:视网膜功能确实严重丧失(例如晚期视网膜色素变性);电极接触不良或阻抗过高;记录被噪声掩盖后平均消掉了真实信号。三者在数据上表现相似,单看波形无法区分。

处理建议是分级。对研究「疾病严重程度」的课题,平直信号是真实信息,应当保留但单独标记。对研究「波形形态与分析方法」的课题,平直信号提供不了有用信息,应当排除。对训练自动判读模型,平直信号是有价值的一类——模型必须学会区分「真的没信号」与「技术失败」,因此最好保留并在标注里说明。

4.4 振幅窗口截断

150 毫秒的窗长刚好覆盖 N95,但 N95 之后的部分看不到。这在多数分析里不成问题,因为临床关注点就是这三个波。但它限制了几类分析:

无法观察 N95 之后的慢波成分。无法做完整的时频分析——150 毫秒窗的频率分辨率约 6.7 Hz,对分离低频成分不够。无法评估刺激后抑制等较长时程的现象。

这类限制不是数据缺陷,而是 PERG 这个检查本身的设计选择。ISCEV 标准之所以定 150 毫秒,是因为三个特征波都在这个范围内,更长的窗只会引入更多噪声。

4.5 时间戳的平移与可比性

日期经过随机平移。官方说明目的是保留序列与时间跨度,同时去除可识别信息。

平移的含义要理解准:不是把每条记录各自随机改一个日期,而是整体平移。否则同一受试者两次检查的间隔就被破坏了,「保留时间跨度」这句就落空。因此间隔可信、绝对时间不可信。

实务上的后果:可以做「两次检查间隔多少天」的分析,不能做「某年某月前后设备升级的影响」这类分析。若研究问题涉及年代效应,这份数据无法回答。

4.6 二十年跨度的质控空白

前文提过,二十年里 ISCEV 指南修订过、设备可能维护升级、技术员换过几批。官方没有提供任何按年份的质控信息。

这不是苛责。回溯性整理的历史数据很难补齐这类信息。但它意味着使用者无法排除「年份」这个潜在混杂因素。若模型的性能在不同年份的记录上差异明显,很可能反映的是技术变化而非疾病差异。

可行的检查方法:按年份分组,统计每年的信号数量、平直信号比例、P50 潜伏期中位数。若这三项随时间有明显漂移,就把年份作为协变量纳入,或者在报告里说明未控制。这个检查成本很低,建议在做任何建模之前先跑一次。

§5 能做什么:五类任务与实现要点

5.1 任务一:特征波自动提取

最基础也最实用的任务是从 255 点波形里稳定地找出 N35、P50、N95 的位置与幅度。看似简单,实际有一堆细节。

窗口怎么定。 文献常用 N35 取 20–45 毫秒、P50 取 45–70 毫秒、N95 取 70–130 毫秒。这套窗口在成人上适用,但在儿童上要放宽——儿童潜伏期普遍偏长,用成人窗口可能把 P50 误判成 N95。数据中年龄最小 4 岁,若做儿童分析必须调整窗口。

基线怎么取。 刺激前的电平作为基线,但这份数据从刺激时刻开始记录,没有刺激前段。因此不能用常规的刺激前基线校正,只能以整个波形的均值为参考,或假定波形起始几个点接近零。这是一个必须交代的方法细节。

峰怎么判。 简单取窗口内极值会被噪声欺骗。稳妥做法是先做轻度平滑(例如 5 点滑动平均),再取极值,然后用抛物线插值细化峰值位置。平滑会略微降低幅度,需在报告里说明。

提取结果的可信度。 建议同时输出一个质量分:峰值幅度、峰与次峰的比值、极值位置距窗口边界的距离。距边界太近说明峰可能落在窗口外,该次提取不可靠。

重复测试怎么合并。 240 份记录有两组列,说明某只眼在同一次就诊里测了两次以上。合并方式有三种,各有代价。

取第一组最简单,问题是若第一组恰好接触不良,就丢掉了本可挽救的数据。取多次平均能降噪,问题是若各次之间条件变化(例如患者疲劳、泪膜改变),平均会把系统偏移混进来。取幅度最大的那次,问题是会系统性高估——噪声尖峰总会让某一次看起来最大。

建议的做法是取中位数,并对组内离散度设一个门槛:若同一次就诊内多次测试的 N95 幅度差异超过某个比例,说明重复性差,该次提取整体标记为可疑。这个规则比任何一种单点选择都更稳健,代价是需要先算离散度。

5.2 任务二:正常与异常的判别

用波形判断是否存在视网膜或视神经功能异常,是最直接的临床任务。

数据集提供了现成的二分类标签:诊断字段为 Normal 的 106 份记录,其余 230 份归为异常。

这个任务有一个必须警惕的陷阱:正常与异常的信号差异可能大到让任务变得过于容易。若异常组的幅度整体低一个量级,一个只用「峰峰值」这一个特征就能达到很高准确率,模型学不到任何形态学知识。检验方法是只用峰峰值做基线,若其性能已接近复杂模型的性能,说明后续的复杂特征没有增益。

更有价值的版本是只区分轻度异常与正常。把重度病例(幅度极低、波形几乎消失)排除,只看那些幅度尚在参考范围但形态有改变的记录。这才需要真正的形态学建模。

5.3 任务三:N95/P50 比值的分布研究

这个比值是 PERG 最有临床意义的单一指标。数据集提供了计算它所需的全部信息。

有意思的研究方向是把这个比值与诊断交叉起来看。按疾病大类分组,看比值的分布形态:营养不良类应当偏高(P50 受损更重),视神经类应当偏低(N95 受损更重),炎症类可能居中或双峰。

这个分析不需要机器学习,几行统计就能做,但它的价值在于验证数据是否符合电生理学的理论预期。若结果与预期不符,说明数据的标签或信号有问题,后续建模都没有意义。这类「先做描述统计再建模」的步骤,在小数据集上尤其重要。

5.4 任务四:信号质量评估

95 条平直信号提供了一个天然的负类。可以构造一个质量分类任务:给定一条信号,判断它是技术合格还是技术失败。

难点在于标签。平直不等于失败,可能是真实的重度功能丧失。要建立可靠的标签,只能人工复核——打开波形看是否还有微弱结构、看同一份记录里另一只眼的信号是否正常、看诊断是否支持严重功能丧失。

一个折中方案是用同记录内的另一只眼做参照。若同一份记录里右眼信号清晰、左眼平直,而诊断未提示单侧病变,那么左眼平直更可能是技术问题。这个规则不完美,但能在不做人工复核的情况下给出一个近似标签。

5.5 任务五:波形生成的统计建模

官方提到已有研究用其中 153 条正常信号验证过一种叫频率调制莫比乌斯(FMM)的模型,用于 PERG 波形的分析与预测。

这个方向值得展开。PERG 波形本质上是几个高斯状分量的叠加,用参数化模型拟合的好处是能把整条曲线压成几个可解释的参数(每个分量的中心、宽度、幅度),再用这些参数做统计比较。相比逐点比较,参数化的结果更稳健,也更符合电生理的生成机制。

做这件事的前提是有可靠的拟合初值。建议用 5.1 的特征提取结果作为初值,避免优化陷入局部极小。

拟合好坏用什么判断,也是一处需要交代的地方。常见的做法是看残差平方和或决定系数,但这两个指标对「形状对不对」不敏感——一条曲线可以统计上拟合得很好,而峰的先后关系已经错乱。更贴切的做法是同时比较拟合出的各分量中心位置与 5.1 提取的峰值位置,若偏差超过几个毫秒,说明分量分解不合理。

还有一处容易忽略:振幅极低的信号不要拟合。当整条曲线只有一两个微伏,拟合出来的参数主要由噪声决定,参数值没有生理含义,却会污染下游统计。建议设一个幅度下限,低于下限的信号只做形态判断不做参数化。

5.6 可复现的最小实验

步骤 动作 预期产出
1 解压、校验,确认 336 份记录与 339 行清单 完整性确认
2 读主表,核对 12 列名与官方描述的差异 字段映射表
3 统计诊断分布、年龄性别、视力缺失 样本画像
4 按记录展开全部信号列,与官方总数对账 完整性确认
5 三窗口提峰,输出潜伏期与幅度 特征表
6 计算 N95/P50 比值,按诊断大类画分布 电生理合理性检查
7 按受试者分组做交叉验证,跑正常/异常二分类 基线性能

第四步的对账很重要,它是唯一能在不信任文档的情况下确认数据完整的方法。算出来与官方总数吻合就说明没有漏读列,算不出来就要回头查列名解析。

第七步的分组是硬要求。304 人 336 份记录,23 人多次就诊。若按记录随机划分,同一人可能同时在训练与测试集,性能会被高估。用 GroupKFold 以受试者标识分组,受试者标识可以从 rep_record 的关联图里恢复,也可以按年龄、性别、诊断组合做近似匹配。

5.7 DAIMS 24 项检查

维度 项 判定
文档 数据字典 是(字段含义逐项说明,唯列名与实现有出入)
文档 采集协议 是(设备、标准、刺激参数齐全)
文档 设备规格 是(型号与厂商明确)
文档 标注规范 部分(诊断来自临床判断,未给判定标准)
文档 版本历史 部分(仅 1.0.0)
文档 许可说明 是
文档 引用格式 是
文档 局限披露 否(无独立章节)
质量 缺失披露 部分(提到 NA,未给比例)
质量 信号质量说明 部分(提到平均提升信噪比,未给质控指标)
质量 一致性检验 否
质量 金标准对照 部分(临床诊断可作参照)
质量 异常值处理 否
质量 隐私处理 是(编号独立设计、日期平移、去标识)
可得性 开放程度 是(完全开放)
可得性 下载方式 是(三种)
可得性 文件校验 是(SHA256SUMS)
可得性 数据体量 是(5.7 MB / 978.9 KB)
可得性 格式说明 是(CSV 列结构)
可得性 工具支持 部分(无配套代码,官方明确说明未生成)
伦理 伦理批准 是(IOBA 研究委员会 2021/47)
伦理 知情同意 是(检查时告知科研用途)
伦理 试验注册 不适用(非临床试验)
伦理 去标识化说明 是(具体说明日期平移与信息移除)

24 项中「是」14 项、「部分」8 项、「否」2 项。两个「否」是一致性检验与异常值处理,在回溯性整理的历史数据里普遍缺失。八项「部分」里最实质的是「标注规范」——诊断来自临床判断,但没给判定依据,这使得标签的可复现性依赖于临床医生的水平。

值得注意的是伦理部分做得相当完整。批准编号、知情同意方式、去标识化手段三项都明确写出,其中日期平移这一项还解释了动机(保留间隔、去除可识别性)。这在公开医学数据里不算普遍。

§6 常见误读与引用陷阱

6.1 误读一:把 336 当受试者数

336 是记录数,304 是受试者数。23 人多次就诊产生了 32 份额外记录。写「336 名受试者」是错的。

这个错误在机器学习论文里很常见,因为大家习惯把「样本数」当成「受试者数」。后果是统计功效被高估。用 336 算置信区间会比用 304 窄,而真实的不确定性取决于 304 个独立个体。

6.2 误读二:把信号数当独立样本

信号数与样本数是两回事。一份记录里同一只眼可能测了多次,这些重复测试高度相关——同一个人、同一只眼、同一次就诊,差别只在于试次。

若把每条信号当作独立样本做统计,得到的显著性会被严重夸大。正确做法是先在记录层面聚合(例如取同一只眼多次测试的均值),再在记录层面做统计。要报告信号级的变异,应把它当作技术重复来估计测量误差,而不是当作独立观测。

6.3 误读三:把官方数字当定论

前文已详述三处不一致。这里要补的是引用后果:若论文写「本数据包含 100 名正常对照」,读者会认为有人严格筛过正常组;实际是临床诊断字段标注为 Normal 的 106 条记录,筛选标准未公布。

更稳的写法是「诊断字段标注为正常的记录占 106/336」,把口径摆在明处。

6.4 误读四:把 PERG 当青光眼筛查工具

PERG 在青光眼研究里确实被反复讨论,因为 N95 下降可以在视野缺损出现前被发现。但这套数据的诊断构成里没有明确的青光眼分组。

用它论证「PERG 能筛查青光眼」,属于用一份不含该病的样本去支持该病的结论。这个推论链是断的。

6.5 误读五:把平直信号当噪声删掉

95 条平直信号看起来像噪声,但其中一部分是真实的重度功能丧失。直接按幅度阈值全删,会让样本偏向轻中度病例,模型中重度的一端被系统性低估。

正确做法是分情况处理,并在方法里写明删了多少、依据是什么、删后样本构成如何变化。

6.6 引用时必须写清的五件事

  1. 受试者、记录、信号是三个不同单位的计数,不可混用
  2. 采集机构是西班牙 IOBA,时间跨度 2003 至 2022
  3. 每条信号 255 点覆盖 150 毫秒,时间戳步长 0.6 毫秒
  4. 诊断字段至多三项,无受控词表,共 82 种写法
  5. 许可为 ODC-By,允许商用,只要求署名

前四项决定读者能否判断结论的适用范围,第五项决定他人能否合法复用。

§7 在生态中的位置

7.1 与眼科影像数据集的分工

库内眼科条目绝大多数是影像:眼底照分类、OCT 分层、糖尿病视网膜病变分级、青光眼视盘判读。这些数据规模大、任务明确,适合训练视觉模型。

这份数据的位置不同。它提供的不是图像而是波形,不是形态而是功能。两者结合的可能路径有三条:

一是作为影像模型的功能标签。若某批受试者同时有影像与 PERG,可以检验影像特征能否预测功能状态——这对判断早期病变很有意义。

二是作为多模态融合的轻量试验场。影像动辄几万张,训练成本高;PERG 只有几百条,适合快速验证融合架构是否可行,再迁移到大规模数据。

三是作为方法学的独立分支。波形分析的方法(峰提取、参数化拟合、时频分析)与图像分析完全不同,两者不能互相替代,各自都需要基准数据。

7.2 与脑电、心电数据集的类比

从信号处理的角度,PERG 与诱发电位、心电有相似之处:都是毫秒到秒级的时序,都需要基线校正与伪影剔除,都依赖峰值检测。

差别在信噪比。心电的 R 波在毫伏级,一眼可辨;PERG 的 P50 在中位数 2.3 微伏,且埋在噪声里,必须靠平均才能显出。这意味着 PERG 的处理流程更接近脑电诱发电位,而不是常规心电。

借鉴方法时应对应到脑电那一支。事件相关电位的潜伏期与幅度提取、单试次信噪比估计、成分波形分解,这些技术在这份数据上都能直接用上。

7.3 长期可用性判断

数据集发布于 2024 年 1 月,版本 1.0.0,之后无更新。PhysioNet 的开放条目不依赖凭证,长期可访问,DOI 稳定。

风险不在数据本身,而在参照体系。PERG 的正常参考值随设备、刺激参数、人群而变化,这份数据给的是单中心二十年的结果,没有提供正常值表。未来若要用它做跨中心比较,需要先建立可比性。

另一处风险在诊断词表。82 种自由文本写法没有版本管理,若未来有人想合并多份 PERG 数据做联合分析,词表对齐会成为主要工作量。

还有一个更实际的问题:这份数据会怎么被用。从公开记录看,多数引用它的是方法学论文——做波形建模的、做信号分解的、做小样本学习的。真正用它做临床研究的反而少,因为它没有分组设计,做不了病例对照。

这不一定是坏事。作为方法学基准,它的角色清晰:提供一个真实、带标签、规模适中、许可宽松的电生理数据,让新的分析方法是骡子是马拉出来遛遛。这个角色比「又一个大样本影像库」更稀缺。

但若有人指望它承担临床验证的角色,就会失望。它的诊断标签太粗、样本太小、单中心、无随访结局,任何一项都不足以支撑临床结论。使用者应当把它当成方法验证的试验台,而不是临床证据的来源。

7.4 适合谁用

使用者 适合做的事 不适合做的事
视觉电生理研究者 波形分析方法验证 建立正常参考值
眼科 AI 开发者 功能模态的多模态融合 大规模预训练
信号处理研究者 小样本、低信噪比的峰提取 高频细节分析
临床研究者 疾病组的波形特征描述 单病种诊断模型

§8 总结

这份数据的关键价值不在规模,而在它填补的模态空白。公开的眼科数据几乎全是影像,功能性的客观电生理测量长期缺位。336 份记录、1,354 条信号在机器学习标准下很小,但它是这个位置上少数可用的资源。

它的三个特点决定用法。第一,以就诊为记录单位,304 人产生 336 份记录,任何统计都要先解决重复计数。第二,每条信号只有 255 点、150 毫秒,刚好覆盖三个特征波,适合形态分析与峰提取,不适合频域深挖。第三,诊断是自由文本,82 种写法,必须先归并再建模。

使用时的三条底线:按 304 而非 336 算样本量;按记录而非信号算独立观测;自己重算样本构成而不要直接引用页面数字。

§9 术语与口径速查

术语 全称 本文口径
PERG Pattern Electroretinogram 图形视网膜电图,用翻转图案刺激黄斑区记录的电反应
ERG Electroretinogram 全视野视网膜电图,用弥散闪光刺激
N35 — 约 35 毫秒的负向波
P50 — 约 50 毫秒的正向波,主要反映外层视网膜
N95 — 约 95 毫秒的负向波,与神经节细胞轴突关系密切
ISCEV International Society for Clinical Electrophysiology of Vision 国际临床视觉电生理学会,制定 PERG 标准
IOBA Instituto Universitario de Oftalmobiología Aplicada 巴利亚多利德大学应用眼科生物学研究所
logMAR logarithm of the Minimum Angle of Resolution 视力对数单位,0 为正常,正值表示视力下降
瞬态 transient 刺激间隔足够长,每次反应在下次刺激前结束
稳态 steady-state 刺激频率高,反应叠加成周期性波形,本数据集不含
试次 trial 一次刺激呈现及其对应的记录,多次试次平均后输出
ODC-By Open Data Commons Attribution License 只要求署名的开放数据许可

§10 事实清单与附录

10.1 核心事实

项 值
受试者数 304
记录数 336
信号数 1,354(与全量核对结果一致)
多次就诊人数 23(19 人两次、1 人三次、1 人四次、2 人五次)
时间跨度 2003 至 2022
每信号采样点 255
记录窗长 150 毫秒
时间戳步长 0.6 毫秒
标称采样率 1,700 Hz
年龄范围 4 至 86 岁,均值 37.1
性别构成(记录口径) 女 176、男 160
诊断写法种数 82
前五类占比 约 69%
未压缩体量 5.7 MB
ZIP 体量 978.9 KB
校验和行数 339
设备 Metrovision MonPack 120
标准 ISCEV PERG 指南
伦理批号 IOBA 2021/47
发布机构 西班牙巴利亚多利德大学 IOBA
DOI(v1.0.0) 10.13026/d24m-w054
DOI(latest) 10.13026/2t6a-xq52
许可 ODC-By 1.0

10.2 记录文件的列结构

列组 记录数 信号数贡献
1 组(3 列) 49 98
2 组(6 列) 240 960
3 组(9 列) 41 246
4 组(12 列) 5 40
5 组(15 列) 1 10
合计 336 与官方公布总数一致

四类合计与官方信号总数完全一致,可作为独立核对点。

10.3 波形统计

指标 值
峰值可辨的信号数 1,259
近乎平直的信号数 95
N35 潜伏期中位数 28.2 ms
N35 四分位区间 26.4 – 35.4 ms
P50 潜伏期中位数 54.6 ms
P50 四分位区间 49.8 – 58.8 ms
N95 潜伏期中位数 104.4 ms
N95 四分位区间 95.4 – 117.0 ms
N95/P50 幅度比中位数 0.83
比值四分位区间 0.41 – 1.80

这些数字是对公开数据全量计算的结果,不是引用文献。计算时用固定窗口取极值,未做平滑与插值,因此与精细算法会有小幅差异。

10.4 附录 A:读取与提峰的最小代码

import csv, glob
import numpy as np

def load_record(path):
    """读一份记录,返回 (时间轴ms, {列名: 幅值数组})"""
    with open(path, encoding='utf-8') as f:
        rows = list(csv.DictReader(f))
    cols = rows[0].keys()
    t = np.array([parse_ms(r['TIME_1']) for r in rows])
    sig = {c: np.array([float(r[c]) for r in rows])
           for c in cols if c.startswith(('RE_', 'LE_'))}
    return t, sig

def parse_ms(s):
    """把 YYYY-MM-DD hh:mm:ss.ffff 转成相对首点的毫秒"""
    d, frac = s.split('.')
    hh, mm, ss = d.split(' ')[1].split(':')
    return ((int(hh)*3600 + int(mm)*60 + int(ss))*1000
            + int(frac)/1e4)

def peaks(t, v):
    """三窗口提峰,返回 (N35, P50, N95, P50幅值, 比值)"""
    def win(a, b):
        return (t >= a) & (t <= b)
    m1, m2, m3 = win(20, 45), win(45, 70), win(70, 130)
    n35 = t[m1][np.argmin(v[m1])]
    p50 = t[m2][np.argmax(v[m2])]
    n95 = t[m3][np.argmin(v[m3])]
    a50 = v[m2].max()
    a95 = abs(v[m3].min())
    return n35, p50, n95, a50, (a95 / a50 if a50 > 0.1 else np.nan)

逐记录展开全部信号列
for path in sorted(glob.glob('csv/[0-9][0-9][0-9][0-9].csv')):
    t, sig = load_record(path)
    for name, v in sig.items():
        if len(v) != 255:
            print('长度异常', path, name, len(v))
            continue
        n35, p50, n95, a50, ratio = peaks(t, v)
        print(path, name, round(n35,1), round(p50,1), round(n95,1), round(ratio,2))

这段代码有三处值得注意。parse_ms 必须手工解析,因为标准库的时间解析对四位小数秒支持不好,直接用 strptime 会丢精度。长度检查不能省,虽然目前全部为 255,但读入异常时报错比静默产出错误结果好。提峰用固定窗口,对儿童数据应放宽下界。

10.5 附录 B:六个可立即验证的疑问

  1. 官方所称「100 名正常受试者」与 106 条 Normal 记录,差异来自人去重还是版本差?
  2. 性别 155 与 176 的差额,能否由 23 名多次就诊者的性别构成解释?
  3. 95 条平直信号中,有多少来自诊断明确提示严重功能丧失的记录?
  4. 二十年里,P50 潜伏期中位数是否存在随年份的漂移?
  5. rep_record 中填了四个编号的那一行,四个记录之间的真实时间关系是什么?
  6. 同一份记录内,右眼与左眼的信号相关性有多高?这决定了能否把双眼当独立样本。

这六个问题都需要下载数据后自行核对。第六个对建模影响最大——若双眼高度相关,把每条信号当独立样本会严重高估有效样本量。

10.6 附录 C:证据链

本文的硬数字分两类。

来自官方页面的是:受试者数、记录数、信号总数(详见事实清单)、2003 至 2022 年、23 名多次就诊者的构成(19/1/1/2)、年龄 4 至 86 岁与均值 37.1、官方声称的正常 100 名与女性 155 名、设备型号 Metrovision MonPack 120、标称采样率 1,700 Hz、窗长 150 毫秒、255 个采样点、翻转频率 1 至 2 Hz、三个特征波的大致时刻、伦理批号 2021/47、5.7 MB 与 978.9 KB、ODC-By 许可、两个 DOI。

由本次全量计算得出的是:记录编号 0001 至 0336 连续无断号、主表 336 行 12 列及其实际列名、性别分布 176/160、诊断 82 种写法与前十五位计数、视力列 38 个空缺单元、rep_record 55 行、unilateral 8 行、列组分布 49/240/41/5/1、时间戳步长 0.6 毫秒与跨度 149.9 毫秒、全库幅值统计、三峰潜伏期中位数与四分位区间、N95/P50 比值分布、95 条平直信号。

两类数字在正文中已分别标注。凡与官方描述不一致处,均以文件内容为准并说明可能的解释,未据此否定官方数字。

编辑说明

核验时点:2026 年 10 月 19 日,依据 PhysioNet 条目页 v1.0.0 与对该版本全部 336 份记录文件的实测。

核验方式:官方页面逐段读;随后下载整包 978.9 KB,解压后对 336 份记录与主表做全量统计,核对记录数、信号数、行数、列结构、时间戳步长、幅值分布与三峰位置。凡官方给出而文件内容不同的数字(正常受试者数、女性数、字段名),两方并列呈现并说明可能的解释,不单方面采信任一方。

口径处理:受试者、记录、信号三个计数单位在全文严格区分,不混用。官方未说明统计口径处,本文一律采用记录口径并显式标注。诊断分布的统计按记录行计,同一记录的三项诊断分别计入,因此各类之和大于记录数。

未覆盖内容:未与原始检查报告或外部病历对照,因此无法判断诊断标签的准确性。未做年份分层分析,故二十年跨度的质控漂移只能提出检查方法而不能给出结论。未使用参数化拟合,波形统计仅基于固定窗口取极值这一最简单方法。


相关数据集导航

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

  • ou-dataset-t1d — 共享标签:生理信号 / 时序数据 / 真实世界数据
  • uwhvf — 共享标签:眼科影像 / 时序数据 / 真实世界数据
  • d1namo — 共享标签:生理信号 / 时序数据 / 真实世界数据
  • shanghai-t1dm-t2dm-cgm — 共享标签:生理信号 / 时序数据 / 真实世界数据
  • ptb-xl-plus — 共享标签:生理信号 / 时序数据 / 真实世界数据
  • mimic-iv-waveform-legacy — 共享标签:生理信号 / 时序数据
  • sleep-edf — 共享标签:生理信号 / 时序数据
  • sicdb — 共享标签:生理信号 / 时序数据
  • mhealth — 共享标签:生理信号 / 时序数据
  • mass — 共享标签:生理信号 / 时序数据

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

返回 AI-Ready 数据集