信息速览
PHDSM 不是公共卫生调查,也不是精神障碍诊断数据。PhysioNet 官方给出的全名是 Permittivity of Healthy and Diseased Skeletal Muscle,直译是「健康与患病骨骼肌的介电常数」。它记录的是小鼠腓肠肌在 9 kHz 至 862 kHz 之间,对交变电场的两种响应量——相对介电常数与电导率,按肌纤维纵向与横向两个方向分开报告,并按六个基因工程或药物处理模型分组。发布者是哈佛医学院与贝斯以色列女执事医疗中心(BIDMC)神经内科的 Benjamin Sanchez,2019 年 3 月首次上线,同年 11 月更新到 1.1 版。
整个库只有 18 个 CSV 加一个许可文件,未压缩体积 97.4 KB,比一张手机照片还小。其中没有一条原始波形,也没有一只动物的个体记录:所有数字都已经聚合成「频点 × 年龄组 × 方向 × 物理量」的均值与均值标准误。因此它的定位不是训练集,也不是队列数据,而是一份组织电学参数的参考底本——给生物电磁学仿真提供介电谱,给电阻抗肌电(EIM)方法提供健康与患病的对照基线。
它的价值恰恰来自这种「小」:介电常数随频率、方向、年龄、疾病状态变化,而这类各向异性组织的规范值在文献里长期零散且口径不齐。Sanchez 把这批数据公开,等于给出一套可复现的起点。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 官方全名 | Permittivity of Healthy and Diseased Skeletal Muscle |
| 中文通称 | 健康与患病骨骼肌介电常数库 |
| 发布者 | Benjamin Sanchez(BIDMC / 哈佛医学院神经内科) |
| 发布平台 | PhysioNet,2019 年 3 月 15 日首发,2019 年 11 月 12 日更新至 1.1 |
| 研究对象 | 小鼠腓肠肌(离体),非人类、非活体 |
| 模型数 | 6 类:脊肌萎缩、肌营养不良、肥胖糖尿病、ALS、肌纤维肥大、线粒体突变 |
| 动物规模 | 六个模型含对照合计约 130 只 |
| 文件数 | 18 个 CSV + 许可 + 校验和 |
| 体积 | 未压缩 97.4 KB,压缩包 49.3 KB |
| 频段 | 9 kHz 至 862 kHz,27 个频点 |
| 物理量 | 相对介电常数(无量纲)、电导率(S/m) |
| 方向 | 纵向(肌纤维平行电流)、横向(垂直) |
| 统计量 | 均值 + 均值标准误,无个体值 |
| 表结构 | 宽表,列承载年龄组与方向,行承载频率 |
| 许可 | ODC-By 1.0,需署名,允许商用 |
| DOI | 10.130264/c23h3b(v1.1)/ 10.13026/5889-jj86(最新) |
§1 它要解决的具体麻烦
1.1 各向异性组织的介电谱,一直是「有数但不成谱」
生物电磁学里,介电常数决定电磁场在组织内如何传播、如何衰减,是剂量学、射频消融规划、电阻抗成像与电阻抗肌电的共同输入。这类值一百多年来被反复测量,但对骨骼肌这样「方向不同、值不同」的组织,已有文献的问题不在数量而在质量:有的没写组织状态(死后多久、温度多少),有的没写病变程度,有的根本没设健康对照,年龄与性别的影响也少有系统覆盖。
Sanchez 在官方背景段里把这几条写得非常直白:介电常数在死后会变、随温度会变,而不少既往研究两者都没交代。于是出现一个尴尬的局面——做仿真的人需要一张可信的介电谱,做 EIM 的人需要一个「正常值」参照,两边都只能从几十篇口径不一的小论文里拼。PHDSM 的存在意义就是把这批测量统一到一套流程下:同一批麻醉与取材规程、同一个介电盒、同一个温度、同一套四电极法、同一张频率栅格,然后一次性放出健康与六种病变状态的对照。
理解这一点,才能理解它为什么值得单独进库:它不是「又一个肌电数据集」,而是「组织参数表」。参数表的价值不在行数,而在每一行的条件是否写清。
1.2 三条常见的错误期待
见到 PHDSM 这个缩写,最容易发生的三件事,都和数据集本身无关,而与命名有关。
第一条,把它当成公共卫生调查。PH 两个字母很容易被读成 Public Health,DSM 两个字母又恰好与精神障碍诊断手册同名,两个凑在一起,几乎注定有人以为是「公共卫生精神健康调查数据」。官方全名里没有这两个词,Disease 指的是小鼠的疾病模型,Skeletal Muscle 才是对象。整个包里不存在任何问卷、量表、诊断条目或人口学变量。
第二条,把它当成肌电信号库。PhysioNet 上确实有一批肌电数据,EMGDB 是针极记录的波形,Hyser 是高密度表面阵列,NinaPro 是手势任务。PHDSM 一个采样点都没有,它给的是频率响应曲线上的离散点,一条记录就是「某个频点上的一个均值和它的标准误」。
第三条,把它当成可以训练的样本集。18 个文件、六类模型、每类十几只动物,看上去像个小型的疾病分类基准。但样本已经聚合,个体值不公开,标签来自基因型与处理臂,不是临床诊断。拿它跑一个分类器,得到的高准确率只说明两类电流响应曲线不同,说明不了任何临床问题。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 仿真用的骨骼肌介电谱输入 | 9–862 kHz 共 27 个频点,健康与六类病变,两个方向 | 够,且是目前少见的带对照版本 |
| 神经肌肉疾病动物模型的电学基线 | 每个模型配野生型对照或同批对照,同一流程采集 | 够用,但需自己在年龄上对齐 |
| 电阻抗肌电方法的分频验证 | 纵向/横向双方向、宽频段、含疾病状态 | 够,可作为方法论文的参照集 |
| 训练疾病分类模型 | 只有均值与标准误,没有个体样本 | 不够,样本已被聚合 |
| 人体组织的体内介电值 | 小鼠离体、37 摄氏度、固定几何 | 不够,需要跨物种与活体校正 |
| 与组织学、体重、纤维类型的关联分析 | 官方提到有组织学信息,但不在包内 | 不够,需另找论文补充材料 |
| 纵向随访或治疗响应追踪 | 每个年龄组各是一批不同动物 | 不够,不是同一批动物重复测 |
| 原始阻抗波形与相位 | 只保留换算出的一阶派生物理量 | 不够,无法重算 |
这张表说明一个判断:PHDSM 的适用面窄但深。凡是需要「一张写清条件的组织参数表」的场合,它都能直接接上;凡是需要「很多条带标签的样本」的场合,它一条都给不了。把这两类需求混为一谈,是这个数据集最常被误用的起点。
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 在做多频电阻抗的有限元仿真,苦于肌肉参数找不到带方向的来源 | 直接取纵向与横向两条介电谱,健康组即是最常用的默认值 | 用 WT 各模型文件的纵向列做基线,横向列做各向异性比 |
| 正在开发 EIM 设备,需要说明「病态组织与正常组织的频响差在哪里」 | 六个模型各自与对照的差异模式,可作为设备灵敏度的先验 | 选一个模型深读,先确认自己的工作频段是否落在 20–100 kHz 这段差别最大的区间 |
| 在写动物实验的方法学论文,需要一个可对标的公开数据源 | 统一的取材与测量规程,含介电盒几何与温度 | 引数据集 DOI 与配套 Scientific Data 论文,方法段直接对照 |
| 想快速验证一个新提出的频域特征是否「有信息」 | 每类模型的均值曲线可作为最低门槛对照组 | 把特征算在聚合曲线上,若连聚合曲线都分不开,就不必往下做 |
| 需要人体肌肉的介电谱 | 只能作为跨物种参照,小鼠与人的肌肉在纤维尺寸与含水量上有系统差异 | 转用人体离体或活体文献,把 PHDSM 仅作量级核对 |
| 想做一个六分类的疾病模型识别任务 | 类别间确有可分的形状差异,可作为负责任的基线设计题 | 必须先声明它测的不是分类性能,或者只用其做仿真驱动的合成数据生成 |
1.5 一句话判断
PHDSM 的本质是一张「条件写得很清楚的组织参数表」,不是一份样本。把它当参数用,它足够可靠;把它当样本用,它一条都不够。
这个判断决定了后面所有章节的读法。§2 讲这张表长什么样,§3 讲它在证据链上处在哪一环,§4 讲它的质量从哪里来、到哪里止,§5 讲怎么把它取下来并正确解析。
1.6 不适合谁:四条边界
第一条边界,不适合任何需要人类受试者的研究。包内没有一例人体测量,没有年龄、性别、体重之外的人群信息,也没有伦理审批号对应的人类方案。它的伦理批件是 BIDMC 的动物使用方案 #087-2016。
第二条边界,不适合把模型标签当疾病诊断的任务。六个模型分别是:脊肌萎缩模型(Smn 2B/2B-Neo)、杜氏肌营养不良同源模型(D2.B10-Dmd mdx)、肥胖糖尿病模型(B6 背景 Lepr db)、ALS 模型(SOD1 G93A)、肌纤维肥大模型(ActRIIB-mFc 药物处理)、线粒体突变模型(PolG D257A 敲入)。其中最后一个不是疾病模型,而是早衰模型;肌纤维肥大模型则是药物诱导,不是病理状态。把这六个当作「六个神经肌肉疾病」,第一个概念错误就发生了。
第三条边界,不适合个体层面的统计推断。每个年龄组只有五只动物(部分模型四个时间点各五只,部分模型按每两周六到七只),公开值又是这五只的均值。任何以个体为单位的检验、回归、机器学习划分,在公开数据上都无法执行。
第四条边界,不适合需要精确上限频率的工作。文件止于 862 kHz,而官方背景与方法段的表述与配套论文标题给出的上端不一致,这处差额在 §7.3 会专门讨论。若你的模型必须覆盖 1 MHz,需要另找数据源补齐最后一段。
§2 数据构成与规格
2.1 十八个文件的两层分法
文件按两层切开:第一层是健康与患病,第二层是模型名。命名规则极简,健康以 WT 开头,患病以 Disease 开头,中间三个连字符,然后是模型缩写与可选的处理臂、性别。
phdsm/1.1/
├── WT---SMA.csv 健康对照,脊肌萎缩模型同龄
├── Disease---SMA.csv 脊肌萎缩模型,40 周龄
├── WT---MDX.csv 健康对照,DBA/2J
├── Disease---MDX.csv 杜氏肌营养不良同源模型
├── WT---DBDB.csv 健康对照,C57BLKS/J
├── Disease---DBDB.csv 肥胖糖尿病模型,Lepr db
├── Disease---ALS.csv 肌萎缩侧索硬化模型,无独立对照文件
├── WT---PBS.csv 肌纤维肥大模型的溶媒对照
├── WT---ActRIIB.csv 肌纤维肥大模型的药物组
├── WT---PolG---H2O---Female.csv 线粒体突变模型的野生型对照,饮水,雌
├── WT---PolG---H2O---Male.csv 线粒体突变模型的野生型对照,饮水,雄
├── WT---PolG---NMN---Female.csv 野生型对照,NMN 饮水,雌
├── WT---PolG---NMN---Male.csv 野生型对照,NMN 饮水,雄
├── Disease---PolG---H2O---Female.csv 线粒体突变,饮水,雌
├── Disease---PolG---H2O---Male.csv 线粒体突变,饮水,雄
├── Disease---PolG---NMN---Female.csv 线粒体突变,NMN 饮水,雌
├── Disease---PolG---NMN---Male.csv 线粒体突变,NMN 饮水,雄
├── LICENSE.txt ODC-By 1.0 全文
└── SHA256SUMS.txt 18 个文件的校验和
这里有一处命名上的陷阱值得记住:WT---ActRIIB.csv 与 WT---PBS.csv 这两个文件被标成 WT,但两者来自同一批 C57BL/6J 雄性小鼠,区别只在于注射的是肌抑制素配体陷阱 ActRIIB-mFc 还是磷酸盐缓冲液。也就是说,「WT」这个前缀在本库里承担了两种语义:一是「基因型正常」,二是「这批动物不是疾病模型」。读文件时不能只看前缀,还得看后缀里的处理臂。这一点在 §7.3 的偏差清单里再展开。
2.2 字段字典
单个 CSV 的每个数据列只有四种语义,但列数随年龄组翻倍增长,所以「字段」这个概念在这里要按两个层次理解:列角色是固定的四种,列实例的个数则随文件变化。
| 列角色 | 表头原文 | 单位 | 类型 | 取值范围或典型值 | 出现位置 | AI 用途 | 缺失与异常 |
|---|---|---|---|---|---|---|---|
| 频率轴 | FREQUENCY (Hz) |
Hz | 整数 | 9000 至 862000,共 27 个 | 每个文件第一列 | 唯一索引,跨文件对齐的锚 | 全文件一致,无缺 |
| 电导率均值 | MEAN (S m-1) |
S/m | 浮点 | 约 0.2 至 0.7(低频段附近) | 每个方向一组 | 与介电常数联合拟合 Cole-Cole 参数 | 无缺,位数到 9 位小数 |
| 电导率标准误 | SEM (S m-1) |
S/m | 浮点 | 量级为十分之一至百分之一 | 紧随均值列 | 加权拟合的权重 | 无缺,偏小提示组内一致 |
| 相对介电常数均值 | MEAN (dimensionless) |
无量纲 | 浮点 | 万级至十万级 | 每个方向一组 | 仿真输入的主字段 | 无缺 |
| 相对介电常数标准误 | SEM (dimensionless) |
无量纲 | 浮点 | 千级至万级 | 紧随均值列 | 区间估计 | 无缺,个别组偏大 |
| 年龄组标签 | Age N weeks |
周 | 文本 | 6、8、10、13、16、18、20、40、43、60 | 首行,跨 8 列合并 | 分组键 | 各模型取值不同,不齐 |
| 方向标签 | LONGITUDINAL / TRANSVERSE |
无 | 文本 | 两值 | 第二行,跨 4 列合并 | 各向异性分析的分层键 | 每年龄组内必有两条 |
| 文件名病态标签 | 文件名前缀 | 无 | 文本 | WT / Disease |
文件名 | 二分类的粗标签 | 语义有二义,见 §2.1 |
| 模型标识 | 文件名中段 | 无 | 文本 | SMA、MDX、DBDB、ALS、PolG、PBS、ActRIIB | 文件名 | 模型分组键 | 六类模型七种后缀 |
| 性别 | 文件名末段 | 无 | 文本 | Male / Female |
仅 PolG 八个文件 | 分层键 | 其余文件未标性别 |
| 处理臂 | 文件名中段 | 无 | 文本 | H2O / NMN / PBS / ActRIIB |
PolG 与肥大模型 | 干预分组键 | 其余文件无处理臂 |
表里最需要注意的是两件事。其一,所有数值都是浮点,且小数位数相当长(电导率与相对介电常数都给到 9 位),但这不表示精度,只表示聚合计算时没有截断;真实的测量不确定度应当以标准误列为准。其二,年龄、方向这两层信息藏在横跨多列的表头单元格里,用普通 CSV 读入后会被展开成一堆空列,解析时必须显式向前填充。
2.3 一条记录的完整解剖
先看 WT---SMA.csv 的真实表头。这个文件只有一个年龄组,所以结构最简单,适合作为解剖样板。
,Age 40 weeks,,,,,,,
WT - SMA,LONGITUDINAL,,,,TRANSVERSE,,,
,CONDUCTIVITY,,RELATIVE PERMITTIVITY,,CONDUCTIVITY,,RELATIVE PERMITTIVITY,
"FREQUENCY
(Hz)","MEAN
(S m-1)","SEM
(S m-1)","MEAN
(dimensionless)","SEM
(dimensionless)","MEAN
(S m-1)","SEM
(S m-1)","MEAN
(dimensionless)","SEM
(dimensionless)"
9000,0.3285,0.0342,91558.6,4380.1,0.2134,0.0192,64812.7,3871.4
11000,0.3391,0.0338,83210.5,3980.7,0.2201,0.0189,58940.2,3520.8
上面两行数据的数值仅示意量级,真实值以文件为准。但结构是精确的:三行表头叠在一起,第一行给年龄组,第二行给方向,第三行给物理量类型,第四行起才是表体。九列的含义依次是频率、纵向电导率均值、纵向电导率标准误、纵向相对介电常数均值、纵向相对介电常数标准误,然后是横向的同一四列。
所以「一条记录」到底是什么?在 CSV 的行意义上,一条记录是一个频点;在数据集的语义上,一条可用观测是「某模型某年龄组某方向在某个频点上的一个均值—标准误对」。也就是说,一个文件的行数(本文件 27 行数据)乘以年龄组数乘以方向数乘以物理量数,才是这个文件的全部原子。
用 pandas 解析时,跳过前三行表头、重建列名是最省事的做法:
#-- 读取单年龄组的简化文件
import pandas as pd
PATH = "WT---SMA.csv"
raw = pd.read_csv(PATH, header=None, skiprows=3, encoding="utf-8-sig")
raw.columns = [
"freq_hz",
"cond_lon_mean", "cond_lon_sem",
"perm_lon_mean", "perm_lon_sem",
"cond_tra_mean", "cond_tra_sem",
"perm_tra_mean", "perm_tra_sem",
]
raw = raw.apply(pd.to_numeric, errors="coerce").dropna(subset=["freq_hz"])
print(raw.shape)
print(raw.head(3).to_string())
多年龄组文件的列数不固定,必须先把首行读出来数一数,才能确定每段四列的起点。Disease---MDX.csv 有四个年龄组,共 33 列;Disease---DBDB.csv 有两个年龄组,共 17 列;Disease---SMA.csv 只有一个年龄组,共 9 列。列数公式是 1 + 8 × 年龄组数。
2.4 年龄组与规模的对照表
| 文件 | 模型 | 年龄组(官方文本) | 文件实际年龄组 | 数据列数 | 数据行数 | 官方动物数 |
|---|---|---|---|---|---|---|
| WT—SMA.csv | 脊肌萎缩对照 | 40 周 | 40 周,1 个 | 9 | 27 | 5 只同窝野生型 |
| Disease—SMA.csv | 脊肌萎缩 | 40 周 | 40 周,1 个 | 9 | 27 | 5 只 |
| WT—MDX.csv | 肌营养不良对照 | 6 至 43 周,多时点 | 6、13、43 周,3 个 | 25 | 27 | 15 只 DBA/2J |
| Disease—MDX.csv | 肌营养不良 | 6 至 43 周,多时点 | 6、10、13、43 周,4 个 | 33 | 27 | 15 只 |
| WT—DBDB.csv | 肥胖糖尿病对照 | 6 与 20 周 | 6、20 周,2 个 | 17 | 27 | 10 只 C57BLKS/J |
| Disease—DBDB.csv | 肥胖糖尿病 | 6 与 20 周 | 6、20 周,2 个 | 17 | 27 | 10 只 |
| Disease—ALS.csv | 肌萎缩侧索硬化 | 8、10、12、14、16、18 周,6 组 | 8、16、18 周,3 个 | 25 | 27 | 37 只 |
| WT—PBS.csv | 肌纤维肥大对照 | 治疗后 5 周取材 | 单组 | 9 | 27 | 10 只 |
| WT—ActRIIB.csv | 肌纤维肥大用药组 | 治疗后 5 周取材 | 单组 | 9 | 27 | 10 只 |
| WT—PolG 四文件 | 线粒体突变对照 | 约 60 周 | 60 周,1 个 | 9 | 27 | 30 只 |
| Disease—PolG 四文件 | 线粒体突变 | 约 60 周 | 60 周,1 个 | 9 | 27 | 24 只 |
这张表里最值得注意的是第四列与第三列不相等的地方。MDX 的疾病组官方写「6 至 43 周」,文件里落成 6、10、13、43 四个年龄组,对照组则只有 6、13、43 三个;ALS 的官方方法段写明在 8、10、12、14、16、18 周共六个时点各取六至七只,文件里只落了 8、16、18 三个年龄组。这两处都是「官方描述的文件化程度低于方法描述」的例子,§7.3 会给出处理建议。
2.5 与库内同类资源的字段差异
PHDSM 的字段结构和库内其他生理信号条目几乎不存在重叠,这一点值得用一张表说清,免得在检索时混淆。
| 资源 | 一行代表什么 | 是否有原始波形 | 是否有个体标识 | 频域还是时域 | 对象 |
|---|---|---|---|---|---|
| PHDSM | 某频点上的一个聚合值 | 无 | 无 | 频域(27 点) | 小鼠离体肌肉 |
| EMGDB | 一个采样点 | 有,4 kHz | 有,三段三名受试者 | 时域 | 人体针极肌电 |
| Hyser | 一个采样点 × 256 通道 | 有 | 有,20 人 | 时域 | 人体表面肌电 |
| NinaPro | 一个采样点 × 多通道 | 有 | 有,数十人 | 时域 | 人体表面肌电 |
| Graphene Bio-Z | 一个采样点 × 时变阻抗 | 有 | 有,七人 | 时域 | 人体腕部 |
| HeartCycle | 一个心动周期内的多点 | 有 | 有 | 时域 | 人体胸阻抗 |
一句话概括差异:库内其他「电」类数据集基本都是时域波形,切分在采样点上;PHDSM 是频域表,切分在频率和方向上,且样本已经聚合。这两件事同时成立,使它在库里的位置相当特殊——它既不与肌电库竞争,也不与阻抗库竞争,它提供的是这些方法背后的组织物性参数。
§3 它是哪种证据:组织参数而非生理记录
3.1 三层证据链上它站在最底下
把「诊—测—模」三层拆开看会清楚很多。最上层是临床诊断:肌电图、影像、活检、基因检测。中间层是测量方法:EIM 通过多频电流测组织阻抗,希望从阻抗谱反推病理状态。最底层是物性参数:组织在不同频率下的介电常数与电导率,是所有电磁仿真的输入。
PHDSM 位于最底层。它不告诉你任何一只小鼠的诊断,也不提供任何一次设备的输出读数,它给的是「这种组织在这个频率下大致是什么电学性质」。这个位置决定了它的两个特性:一方面它极其通用,任何需要肌肉介电参数的工作都能引用;另一方面它极其间接,从它出发到临床应用之间还隔着物种、活体与离体、几何与边界条件三道换算。
3.2 「离体、37 度、5 毫米见方」意味着什么
理解这组条件,等于理解数据的适用边界。取材流程是:CO2 安乐死,剥离腓肠肌,去掉股二头肌,用手术刀把肌腹中段修剪成 5 毫米宽、5 毫米长的方块,塞进介电盒。盒体是两块不锈钢平板电极,电压电极用两根单极肌电针接触肌肉上表面,极间距 4 毫米,几何因子 K 由同高度的盐溶液标定。盒底有加热垫维持 37 摄氏度。
这几个数字各有代价。5 毫米见方的方块意味着样本必须落在肌腹最厚处,腓肠肌两端较薄的位置被舍弃;4 毫米极间距意味着电场主要穿透表层,深部纤维的贡献被稀释;37 摄氏度是体温,这解决了「死后降温导致介电值漂移」的老问题,但离体样本在取材与修剪过程中已经历短暂缺血,这一段的电学变化无法用温度弥补。官方把「温度与死后状态」列为既往文献的主要缺陷,自己在温度上做了控制,在死后状态上只能做到「立即测量」。
3.3 相对介电常数与电导率的关系
两个物理量不是独立的两列,而是同一个复介电常数的实部与虚部换一种写法。相对介电常数刻画材料储存电荷的能力,电导率刻画电荷在其中迁移的难易。在 9 kHz 到 862 kHz 这个区间,组织呈现明显的频散:频率升高,相对介电常数下降,电导率上升。这条曲线的形状受细胞膜电容、细胞内外液电导率、膜完整性共同决定,因此它天然携带病理信息——肌纤维萎缩、纤维化、脂肪浸润、膜通透性改变,都会改写曲线的位置与斜率。
这也是为什么这套数据能「一表两用」:做仿真的人取绝对值,做 EIM 的人取形状差异。但两种用法对精度的要求不同。仿真关心绝对量级与频散的完整形状,误差容忍度在百分之几十;EIM 关心疾病组与对照组的相对差,误差容忍度取决于差值大小,往往更苛刻。§4 的案例会展示这个差别在真实数据上是什么样子。
3.4 各向异性为什么必须单列
骨骼肌的肌纤维高度定向排列,电流沿纤维方向与垂直方向走的路径不同,介电值也随之不同。文献里对这一点的处理常常是「只报一个方向」或「不说明方向」,这正是 Sanchez 在背景段点名批评的问题之一。PHDSM 的做法是把两个方向作为并列的两段列:先让纤维平行于电流电极测一次,旋转 90 度再测一次。
从文件读数看,两个方向的差异在低频段尤其明显:以脊肌萎缩健康对照的 9 kHz 行为例,纵向相对介电常数量级在九万上下,横向在六万上下,纵向明显高于横向。随着频率升高,两条曲线逐步靠拢,到 862 kHz 时差距收缩。这个「低频分离、高频收敛」的形状,是各向异性组织介电谱的典型特征,也正是单方向数据无法提供的结构信息。
§4 质量控制与特色
4.1 同一套流程覆盖六个模型
这个库最容易被低估的地方,不是某个数字,而是六个模型共用一套流程。动物来源统一到 Jackson 实验室(除 PolG 自繁),安乐死方式统一为 CO2,取材部位统一为腓肠肌,修剪尺寸统一为 5 毫米见方,测量温度统一为 37 摄氏度,频率栅格统一为 27 个频点,统计量统一为均值加减均值标准误。这种统一性在单篇论文里是标准做法,在公开数据集中却不常见——多数公开的动物电生理数据是把不同批次、不同设备、不同规程的实验拼在一起,使用者很难判断差异来自生物学还是来自流程。
统一流程带来的直接好处是可比性。跨模型比较时,你不需要先做设备校正,只需要处理年龄与性别的不齐。这一点对做方法验证的人尤其有价值:如果你的算法在 PHDSM 上分不开肌营养不良与对照,那它在别的数据上大概率也分不开,因为这里连仪器噪声这个借口都不成立。
4.2 标准误本身就是质量信号
每个均值旁边都跟着标准误,这在小型动物实验的公开数据里并不多见。标准误的大小直接反映组内一致性和样本数:五只动物、组内变异小,标准误就小;组内变异大,标准误就大。读取时如果只取均值列,等于丢弃了一半的信息。
标准误还有一个用法:判断某个年龄段的值是否值得用。低频段相对介电常数的标准误往往在均值的百分之五上下,高频段则可能升到百分之十以上,原因是高频下寄生电容与电极极化效应更难控制,动物间差异被放大。做频域特征工程时,把「标准误偏大」的频点降权,或者在拟合时用加权最小二乘,是这类数据最基本的使用纪律。
4.3 案例:MDX 模型的四个年龄组
用一个真实文件的完整结构,说明这份数据的组织方式与读法。选 Disease---MDX.csv 是因为它年龄组最多、列数最宽,把这一个文件读通,其余文件都能照做。
这个文件对应的是杜氏肌营养不良的同源小鼠模型 D2.B10-Dmd mdx,官方说明选它的理由是它复现了人类 DMD 的多项肌病理特征:后肢肌肉重量下降、肌纤维数量减少、纤维化与脂肪堆积增加、相对其他遗传背景的同类突变品系肌力更弱。实验组是 15 只雄性半合子小鼠,6 至 9 周龄入手,在 6 至 43 周的不同年龄测量;对照组是 15 只雄性 DBA/2J,每个时点五只。
文件打开后的第一行是年龄组标签:Age 6 weeks、Age 10 weeks、Age 13 weeks、Age 43 weeks,共四个。第二行在每个年龄段下方重复 LONGITUDINAL 与 TRANSVERSE,第三行再重复电导率与相对介电常数的两组列名。整表 33 列,前 1 列是频率,其后 4 段各 8 列。
对照文件 WT---MDX.csv 只有三个年龄组:6、13、43 周。这是一个必须处理的不对称:疾病组在 10 周有数据,对照组没有。做年龄配对比较时,10 周这一组只能单边使用,或者退回到 6 与 13 两个时点做两端插值。这个不对称不是错误,而是官方在对照设计上按「每时点五只」的配额分配的必然结果——疾病组 15 只分到四个时点,对照组 15 只分到三个时点。
从数据本身能看出什么形状?6 周龄(约相当于人类幼年期)时,疾病组与对照组在低频段的曲线已经分开,疾病组纵向电导率略高、相对介电常数略低;到 43 周龄,两条曲线的差距在低频段扩大,在高频段则因为频散收敛而缩小。这类「低频差异放大、高频差异压缩」的模式,在肌营养不良的电生理文献里是常见结论,而 PHDSM 的价值在于把它固定在一套统一的可复现条件下。
4.4 案例读法的三条纪律
第一条,先对齐年龄,再比数值。跨文件比较时,模型之间年龄组不同,直接取第一行会拿 6 周的白肌去比 40 周的肌萎缩模型,结论必然失真。
第二条,先看标准误,再看均值。两组均值差小于标准误之和时,不要宣称差异存在,尤其当样本数是五。
第三条,先确认方向,再谈各向异性。纵向与横向的分段在文件里靠第二行标签区分,用程序读入时极易错位,错位后算出的各向异性比会完全失去意义。
4.5 它的质量来自「条件透明度」而非「样本量」
评估这类数据时,最容易用错尺子:拿样本量去衡量一个小样本但条件透明的资源,结论必然是「太小、没用」。正确的尺子是条件透明度——取材部位、修剪尺寸、电极几何、温度、频率栅格、统计口径是否都被写出来,并且与文件内容一致。
按这个尺子,PHDSM 得分不低:官方页面把介电盒的尺寸、极间距、几何因子标定方法、加热温度都写清了,把每类模型的动物来源、品系编号、性别、年龄、样本数都写清了,把每个文件里哪一段是纵向哪一段是横向也写清了。缺陷则集中在「文件与文本的对齐」上:正文说 1 MHz、文件止于 862 kHz;正文说六个时点、文件落三个;正文提到组织学信息、包内没有。这些都属于文档一致性问题,不影响数据本身的可用性,但影响「不看代码只读文档」的人。
§5 怎么把它取下来
5.1 三条下载路径
官方给了三条等价路径,选择哪条取决于你的环境。
#-- 路径一:直接下载压缩包,体积最小
mkdir -p phdsm && cd phdsm
curl -L -o phdsm-1.1.zip https://physionet.org/static/published-projects/phdsm/phdsm-1.1.zip
unzip -o phdsm-1.1.zip
#-- 路径二:用 wget 镜像整个目录,适合只要其中几个文件
wget -r -N -c -np https://physionet.org/files/phdsm/1.1/
#-- 路径三:从 AWS 开放数据桶同步,适合有云环境的情况
aws s3 sync --no-sign-request s3://physionet-open/phdsm/1.1/ ./phdsm-1.1/
第一条路径最省事。压缩包 49.3 KB,解压后 97.4 KB。第二条适合只取两三个文件做对照的情况,因为它会建立完整的目录树。第三条在需要把数据接进云上流水线时最方便,桶是公开只读的,不需要凭据。
5.2 校验完整性
包内附了 SHA256SUMS.txt,覆盖 18 个数据文件。下载后应当先校验,再使用。
#-- 在校验和文件所在目录执行
cd phdsm-1.1
sha256sum -c SHA256SUMS.txt
#-- 只看是否有失败项,安静模式
sha256sum -c --quiet SHA256SUMS.txt && echo "ALL OK"
这一项在校验和清单里之所以值得单独一提,是因为它同时给出了「这一版有哪些文件」的权威名单:18 行,一行一个文件,与目录列表逐条对应。如果目录里出现了清单之外的 CSV,那不是官方内容。
5.3 把宽表拆成长表
解析这张表的正解是「先拆列再合并」,因为宽表的分组信息全在表头里。
#-- 把多年龄组宽表拆成整齐的长表
import csv
def parse_phdsm(path, age_groups):
#-- age_groups 需按文件首行的 Age 标签顺序手工给出
rows = []
with open(path, encoding="utf-8-sig", newline="") as fh:
reader = list(csv.reader(fh))
for rec in reader[3:]:
if not rec or not rec[0].strip():
continue
try:
freq = int(float(rec[0]))
except ValueError:
continue
for gi, age in enumerate(age_groups):
base = 1 + gi * 8
for oi, orient in enumerate(("longitudinal", "transverse")):
off = base + oi * 4
rows.append({
"file": path.rsplit("/", 1)[-1],
"age_weeks": age,
"orientation": orient,
"freq_hz": freq,
"cond_mean": float(rec[off]),
"cond_sem": float(rec[off + 1]),
"perm_mean": float(rec[off + 2]),
"perm_sem": float(rec[off + 3]),
})
return rows
#-- MDX 疾病组首行依次是 6 / 10 / 13 / 43 周
long_rows = parse_phdsm("Disease---MDX.csv", [6, 10, 13, 43])
print(len(long_rows), long_rows[0])
为了让这段代码可复现,年龄标签必须按文件首行的实际顺序给出,不能凭文档猜测——这正是 §4.3 的案例里强调过的对齐问题。
5.4 直接读成数据框
不想手写解析时,可以借助检测表头层级的方式批量处理,代价是多几行代码。
#-- 批量读取并推断年龄组数量
import pandas as pd
FILES = {
"WT---SMA.csv": 1, "Disease---SMA.csv": 1,
"WT---MDX.csv": 3, "Disease---MDX.csv": 4,
"WT---DBDB.csv": 2, "Disease---DBDB.csv": 2,
"Disease---ALS.csv": 3,
"WT---PBS.csv": 1, "WT---ActRIIB.csv": 1,
}
frames = []
for name, n_age in FILES.items():
cols = ["freq_hz"]
for gi in range(n_age):
for oi in ("lon", "tra"):
cols += [f"cond_{oi}_{gi}_mean", f"cond_{oi}_{gi}_sem",
f"perm_{oi}_{gi}_mean", f"perm_{oi}_{gi}_sem"]
df = pd.read_csv(name, header=None, skiprows=3, names=cols,
encoding="utf-8-sig")
df.insert(0, "file", name)
frames.append(df)
wide = pd.concat(frames, ignore_index=True)
print(wide.shape, wide["file"].nunique())
这段代码的价值不在效率,而在于它把「每个文件有几个年龄组」这个隐式元数据显式化了。同一段逻辑用在 PolG 八个文件上时,年龄组数一律为 1,无需修改。
5.5 拟合一个两参数模型
介电谱研究里常用 Cole-Cole 形式的弛豫模型来概括曲线。在 PHDSM 的频段内,一个简化的两参数拟合足以拿到可对外引用的描述量。
#-- 对单条曲线做幂律斜率拟合,作为频散强度的粗指标
import numpy as np
import pandas as pd
df = pd.read_csv("WT---SMA.csv", header=None, skiprows=3, encoding="utf-8-sig")
f = df.iloc[:, 0].to_numpy(float)
perm_lon = df.iloc[:, 3].to_numpy(float)
logf, logp = np.log10(f), np.log10(perm_lon)
slope, intercept = np.polyfit(logf, logp, 1)
r2 = 1 - ((logp - (slope * logf + intercept)) ** 2).sum() / ((logp - logp.mean()) ** 2).sum()
print(f"slope={slope:.4f} intercept={intercept:.4f} R2={r2:.4f}")
斜率越负,说明该频段内介电常数随频率下降越快。用它做跨模型比较时,必须在同一频段、同一方向、同一物理量上算,否则不可比。
5.6 取数时的三个拒绝条件
第一,拒绝把 WT 前缀直接当作「健康组」。WT---ActRIIB.csv 是注射了肌抑制素配体陷阱的野生型小鼠,它的介电值反映的是药物诱导的肌纤维肥大,与 WT---SMA.csv 那种同窝对照不是一回事。使用前必须读文件名全部三段。
第二,拒绝在未对齐年龄的情况下跨文件拼接。六个模型的年龄跨度从 6 周到 60 周,直接纵向堆叠会得到一张年龄混杂的表。
第三,拒绝把标准误当成标准差。SEM 已经除过根号 n,用它构造区间时若要恢复组内离散度,需要乘以组内动物数的平方根,而组内动物数只有通过官方方法段才能查到。
§6 与库内条目的关系
6.1 关系图谱
写这一节之前,我按 title 逐个检索了库内已有的心理/精神类与电生理类记录,确认 PHDSM 与它们没有实质重叠。需要说明的是,库内四个常被拿来与「心理/精神」并置的条目,实际主题与精神障碍诊断并无直接关系,检索时必须按实际内容而非按关键词归类。
| 库内记录 | 实际主题 | 与本篇的相同之处 | 关键差异 | 交集判定 |
|---|---|---|---|---|
| metatraits | 微生物表型性状库 | 都以「性状—参数」的形式组织 | 对象的量纲完全不同,一个是微生物基因组,一个是组织电学 | 无交集 |
| cd-code | 生物分子凝聚体知识库 | 都是知识型或参数型资源,非样本库 | 一个是文献策展,一个是实验测量 | 无交集 |
| clinmave | 变异功能分数与临床证据强度 | 都涉及「把测量转成可用判断」 | 一个是基因变异,一个是组织物性 | 无交集 |
| sdoh-adverse-pregnancy | 出院摘要的社会决定因素标注 | 都不面向模型训练的性能基准 | 一个是文本标注,一个是数值表 | 无交集 |
| EMGDB(emgdb) | 人体针极肌电示例 | 都服务神经肌肉评估,都来自 BIDMC 神经内科 | EMGDB 是时域波形,3 人 3 段;本篇是频域表,小鼠离体 | 同门不同物,可互补引用 |
| Hyser(hd-semg) | 人体高密度表面肌电 | 都涉及肌肉电学 | 通道阵列与时域手势任务,与本篇无字段重叠 | 无交集 |
| Graphene Bio-Z | 人体腕部电阻抗 | 都测阻抗 | 一个是可穿戴时变阻抗,一个是离体频域介电谱 | 方法相近,用途不同 |
| HeartCycle | 胸阻抗与超声同步 | 都涉及生物阻抗 | 心动周期尺度,与本篇的频率尺度不可比 | 无交集 |
| bpssrat | 大鼠逐搏血压 | 都是动物模型、都是 PhysioNet 早期小库 | 一个是血流动力学时序,一个是离体物性 | 仅在「小样本动物库」这一定位上同侪 |
| PhysioZoo | 三物种哺乳动物心电 | 都提供跨物种的规范参照 | 一个是电波形底本,一个是组织参数底本 | 定位相似,对象层不同 |
这张表的关键在最后两行与第五行。PHDSM 在库内真正的同侪不是那些肌电大数据集,而是 bpssrat 与 PhysioZoo 这类「给方法提供规范底本」的小库;而与它最容易被混为一谈的,是同属 BIDMC 神经内科、同样服务神经肌肉评估的 EMGDB。
6.2 检索路径
要判断一条引用说的是不是 PHDSM,按下面三步查。
-- 第一步:按缩写与全名同时捞,避免只按中文名漏检
select record_id, url_name, left(title, 60)
from ai_ready_dataset
where url_name = 'phdsm'
or title ilike '%permittivity%'
or title ilike '%介电常数%';
-- 第二步:按来源机构找同门记录,BIDMC 神经内科在库内不止一条
select record_id, url_name, patient_count
from ai_ready_dataset
where source ilike '%Beth Israel%'
order by record_id;
-- 第三步:按物理量找近邻,阻抗与电导类记录都归到这里
select record_id, url_name, left(title, 50)
from ai_ready_dataset
where title ilike '%阻抗%' or title ilike '%impedance%' or title ilike '%电导%'
order by record_id;
第一步的 url_name = 'phdsm' 是最快的路径,因为 slug 唯一。第二步能捞出同门记录,用于判断是否是同一个作者的另一份数据。第三步用于找到方法学近邻,避免在写相关工作时只引了肌电库而漏掉阻抗库。
§4.3 的案例在这里也能帮上忙:如果你在库里找到另一条记录,其描述里出现「MDX」「Dmd」「DBA/2J」这类词,那它可能与本篇同源或同批实验,引用前应当核对 DOI 是否一致。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
评估 PHDSM 时最常见的一个误判,是拿「样本量」当唯一标尺,看到「约一百三十只小鼠」就直接判为「规模过小、不可用」。这个判断在监督学习语境下成立,在本数据集的真实用途下不成立。
PHDSM 的用途是提供组织电学参数的规范值与对照基线,衡量它的尺子应当是「条件是否透明、频段是否覆盖、对照是否同批、方向是否区分」。若按样本量评分,它与任何影像或信号大数据集相比都不可能及格;若按参数表评分,它在频段覆盖与对照设置上反而优于多数零散文献。因此下文 §7.1 的五维评分里,规模一维的分数会偏低,这不代表数据集质量差,而代表它本就不该被放在规模的赛道上比。真正需要注意的缺陷集中在文档一致性,见 §7.3。
7.1 五维评分
| 维度 | 分数 | 依据 | 扣分原因 |
|---|---|---|---|
| 规模 | 2 / 5 | 约 130 只动物、六类模型、18 个文件 | 每类仅十余只,聚合后个体数只剩年龄组数 |
| 结构 | 3 / 5 | 宽表、行列语义清晰、有校验和 | 表头三层嵌套、编码不统一、年龄组不齐 |
| 文档 | 3 / 5 | 方法段详尽,流程可复现 | 频率上限、ALS 时点数、组织学信息三处与文件不一致 |
| 可获取性 | 5 / 5 | 公开、无注册、含压缩包与云桶、97.4 KB | 无 |
| 边界清晰度 | 4 / 5 | 明确是小鼠离体、明确各模型动物数与来源 | WT 前缀二义、性别仅部分标注 |
总评约 3.4 / 5。这个分数偏高不是因为它样本多,而是因为它的边界写得比多数同类资源清楚——对一个参数表来说,边界清楚比规模大更重要。
7.2 它在什么情况下最好用
用一句话概括:当你需要「一个能写进论文方法段的肌肉介电谱基线」时,它在库内几乎没有替代品。具体到三类任务,它的好用程度不同。
对生物电磁仿真,它是直接可用的输入。有限元模型里的肌肉区域需要介电常数与电导率,PHDSM 给的正是这两个量在 27 个频点上的值,还带方向。唯一要做的换算,是把「相对介电常数」与「电导率」按你的求解器习惯组合成复介电常数。
对 EIM 方法研究,它是有价值的对照参照。你的设备测的是阻抗,PHDSM 给的是介电谱,两者可以通过几何因子相互换算;更重要的是,它提供了六种病变状态下曲线的偏移方向,可作为你解释设备读数的先验。
对机器学习,它的价值有限但非零。可用的做法是把聚合曲线当作「物理先验」注入模型,或者用其参数生成合成样本再在真实数据上微调。若直接把它当训练集,前面 §1.2 与 §1.6 已说明为什么不行。
7.3 已知的、可枚举的偏差
第一处,频率上端。官方方法段写「9 至 862 kHz」,配套论文标题写「10 kHz 至 1 MHz」,文件的实际栅格从 9000 Hz 起、到 862000 Hz 止,共 27 个频点,没有 1 MHz 那一行。三处口径并存,差额构成的区间官方未说明。使用规则很简单:以文件为准,任何声称「PHDSM 覆盖到 1 MHz」的说法都需要作者自行补证。
第二处,ALS 的年龄组。官方方法段写「8、10、12、14、16、18 周,每两周约六至七只」,合计 37 只;文件的实际表头只有 8、16、18 三个年龄组,25 列。中间三个时点未在文件中出现。同样地,MDX 疾病组有四个年龄组而对照组只有三个,10 周这一组没有健康对照。
第三处,WT 前缀的二义。九个以 WT 开头的文件里,七个是基因型对照,另两个(WT---PBS.csv 与 WT---ActRIIB.csv)是肌纤维肥大实验的溶媒组与用药组。按前缀做健康/患病二分类,会把用药组错划为健康。
第四处,性别只在 PolG 的八个文件里标出,其余模型的性别未在文件名体现,需回到官方方法段(多为雄性,ALS 与 PolG 为雌雄各半)。
第五处,组织学信息。配套论文摘要明确提到「另外获取了定量组织学信息」,官方页面也建议参考 Nagy 等与 Clark-Matott 等的两篇论文,但这些数据不在公开包内,需要从论文补充材料另行获取。
第六处,编码与表头层级。PolG 的八个文件带 UTF-8 BOM,其余文件不带;SMA 与 ActRIIB/PBS 的文件是四行表头,MDX 与 DBDB 是三行。批量读取时必须逐文件判断,不能一刀切。
7.4 外部验证矩阵
| 验证对象 | 验证来源 | 结论 | 残差或差异 |
|---|---|---|---|
| 频段上限 | 官方方法段、论文标题、文件栅格 | 三处不一致 | 方法段与文件一致于 862 kHz,论文标题为 1 MHz |
| 动物数 | 官方方法段逐模型叙述 | 可逐项复算 | 六个模型含对照合计约 130 只 |
| 模型构成 | 官方方法段与论文摘要 | 论文列五类,数据集六类 | 数据集多出线粒体突变模型 |
| 年龄组 | 官方方法段与文件表头 | ALS 与 MDX 对照不齐 | 文本时点多于文件时点 |
| 测量温度 | 官方方法段 | 恒温 37 摄氏度 | 文件无温度列,无法独立核验 |
| 许可 | 许可栏与 LICENSE.txt | 一致,ODC-By 1.0 | 无 |
| 体积 | 文件列表与压缩包 | 97.4 KB 未压缩、49.3 KB 压缩 | 无 |
7.5 它为何能持续:一份只有百来 KB 的规范底本
这个库能长期存在,靠的不是被大量下载,而是它在方法论文里的引证位置。任何做电阻抗肌电、做骨骼肌电磁建模、做肌肉电学参数仿真的工作,都需要一个可引用的参数来源;一个公开、带对照、带方向、许可宽松且体积极小的来源,几乎是唯一解。它不需要维护,不需要增量更新,也不会因为数据过期而失效——组织电学性质的参考值一旦确立,有效期以十年计。这是它能在 PhysioNet 上以 97 KB 的体积长期留存的原因。
7.6 DAIMS 二十四项逐条核验
按 DAIMS(Data and AI Model Scorecard)的二十四项检查表逐条走一遍,把「文档说了什么」与「文件里实际是什么」分开记。
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ⚠️ | 全部文件为宽表,年龄与方向藏在跨列表头,需显式解析 |
| 2 | 唯一标识 | ⚠️ | 无个体或测量编号,主键只能由文件、频点、年龄、方向合成 |
| 3 | 特殊字符 | ⚠️ | 文件名含三重连字符,表头含换行符,多年龄组文件列名重复 |
| 4 | 重复行 | ✅ | 27 个频点无重复,频率严格递增 |
| 5 | 缺失编码 | ⚠️ | 无显式缺失码;年龄组缺失表现为整段列不存在,而非空值 |
| 6 | 标签标识 | ✅ | 病态由文件名前缀标识,模型由文件名中段标识,可程序化提取 |
| 7 | 罕见类分组 | ⚠️ | 每个模型十余只,聚合后只剩年龄组数,无法再做类内分组 |
| 8 | 偏倚评估 | ⚠️ | 无批次、无批次随机化说明,动物多数来自单一供应商 |
| 9 | 数据字典 | ❌ | 包内无数据字典,字段语义只能从表头与官方正文反推 |
| 10 | 信息性缺失解释 | ❌ | ALS 缺三个时点、MDX 对照缺一个时点,均未在文件内解释 |
| 11 | 设备记录 | ⚠️ | 正文写「商用阻抗分析仪」,未给型号与校准周期 |
| 12 | 共线性 | ✅ | 两物理量同源但换算关系明确,不构成隐蔽共线 |
| 13 | 编码映射 | ⚠️ | 主要 ASCII,PolG 八个文件带 BOM,需按文件判断编码 |
| 14 | 时间戳处理 | ⚠️ | 文件修改时间可追溯版本差异,但无采集时间字段 |
| 15 | 划分建议 | ❌ | 无个体标识,无法做训练/验证划分,只能按年龄组或模型划分 |
| 16 | 泄漏讨论 | ⚠️ | 同一年龄组的均值来自同一批动物,跨频点强相关,切分易泄漏 |
| 17 | 标签分布 | ✅ | 六类模型的动物数在方法段给全,可复算 |
| 18 | 测量偏倚 | ⚠️ | 离体、缺血时间、修剪位置均可能引入系统偏移,未量化 |
| 19 | 外部验证建议 | ⚠️ | 正文给出两篇论文可供比对,但无独立复测集 |
| 20 | 版本记录 | ✅ | 1.0 与 1.1 两版,发布日期与变更内容(补入 PolG)写明 |
| 21 | 预处理脚本 | ❌ | 包内无解析脚本,列结构需使用者自行重建 |
| 22 | 合规要求 | ✅ | ODC-By 1.0 全文随包发布,署名要求明确 |
| 23 | 多模态对齐 | ✅ | 单一模态,不涉及对齐问题 |
| 24 | 去标识化 | ✅ | 小鼠数据,不含个人信息 |
DAIMS 评分:11.0 / 24(✅ 九项、⚠️ 十一项、❌ 四项,⚠️ 各计半分)。
这个分数不高,但它与 §7.1 的五维评分并不矛盾:五维评分衡量的是「这份数据能不能用」,DAIMS 衡量的是「这份数据能不能直接被流水线吞下」。PHDSM 在后者上弱,是因为它诞生于 2019 年,那时的公开数据惯例是把「数据」与「使用说明」分开,让论文承担说明职责,而不是把说明塞进包里。
评分解读:四项 ❌ 里,三项(数据字典、预处理脚本、划分建议)都源于同一个事实——包内没有元数据层,一切语义靠文件名与表头承载。剩下的一项(信息性缺失解释)是文档一致性问题,与 §7.3 的三处口径差同源。
对你意味着什么:接入这套数据时,第一件要做的事不是写模型,而是写解析器与数据字典。把 §2.2 的字段表落成一份随项目走的 schema.json,把 §2.4 的年龄组对照落成一份 manifest.csv,之后所有下游代码都从这两份文件读,不要在代码里硬编码列偏移。这样做的直接收益是:当官方发布 1.2 版、文件结构再次变动时,你只需要改 manifest,不必改模型代码。
§8 生态位与历史
8.1 从「参数表」看它的历史位置
生物组织的介电参数测量史超过一百年。早期工作集中在确定各主要组织在射频频段的量级,为雷达与微波安全标准服务;中期转向剂量学与成像,频率范围扩展到兆赫兹;近十余年,随着电阻抗肌电与可穿戴阻抗传感的兴起,需求转向「带病理状态与方向信息的高密度频域表」。
PHDSM 处在第三阶段的开端。它的贡献不在于把频率推到多高,而在于把「同一流程、同一温度、带对照、分方向」这四件事同时做齐,并且公开。这在 2019 年是个不小的动作——当时多数动物电生理数据的公开停留在「论文里有一张图」的水平。
8.2 两个版本之间的变化
1.0 版于 2019 年 3 月 15 日发布,内容是五个模型:脊肌萎缩、肌营养不良、肥胖糖尿病、ALS、肌纤维肥大。1.1 版于同年 11 月 12 日发布,新增线粒体突变模型的介电数据,对应的是 Clark-Matott 等关于早老症小鼠模型的论文。
两个版本的差异可以直接从文件日期看出来:五个模型对应的十二个 CSV 保留了 2019 年 3 月 15 日的时间戳,PolG 的八个文件是 2019 年 10 月 4 日。这也解释了为什么 PolG 的文件表头比其余文件多一行空行、且带 BOM——它们是在另一次整理中并入的。
8.3 它在 PhysioNet 里的位置
PhysioNet 上的数据库大致分三类:波形库(心电、脑电、肌电)、临床数据库(重症、影像、电子病历)、以及参数与示例库(本次介绍的这一类)。第三类体量最小,但往往承担着前两类的「基准」职能——波形库告诉你信号长什么样,参数库告诉你信号背后的物理量是多少。
PHDSM 属于第三类中的极小样本。它的目录浏览数据显示,当前版本的项目浏览量在两百次上下,这个量级在 PhysioNet 上属于长尾,与大规模波形库动辄数万次的浏览不可同日而语。但这恰恰符合它的定位:它服务的是少数需要组织电学参数的研究者,而不是广泛的数据科学人群。
8.4 谁在用它,用来做什么
从方法与内容推断,它的主要使用面有三块。一是电阻抗肌电的设备与方法研究,这类工作需要一个「正常肌肉在这个频段是什么样」的参照。二是生物电磁学仿真,有限元与时域有限差分模型都需要肌肉的介电常数与电导率,PHDSM 提供了带方向的一组。三是动物模型的电生理表型描述,研究者可以把自测结果与公开的六个模型对照,判断自己的模型是否落在已知范围内。
这三块需求有一个共同点:都不需要大数据。它们需要的是「条件写清楚的一小组数」,而这正是 PHDSM 的形态。
§9 使用指引
9.1 三种角色的路径
第一类角色是做仿真的工程师。你的路径最短:取 WT---SMA.csv 或任一 WT 文件的纵向与横向列,按频率插值到你的求解器栅格,把相对介电常数与电导率组合成复介电常数即可。注意 37 摄氏度是文件所对应的温度,若你的模型工作在别的温度,需要另行做温度校正。
第二类角色是做 EIM 的方法研究者。你的路径要先做换算:设备给的是阻抗幅值与相位,PHDSM 给的是介电常数与电导率,两者通过几何因子联系。建议先用 §4.3 的案例文件熟悉结构,再用同一频段的疾病组与对照组做差值曲线,看差异集中在哪个频段。
第三类角色是做动物实验的研究者。你的路径是「对照 + 引用」:把自己的测量结果与对应的 WT 文件比较,判断是否落在预期范围;写作时同时引用数据集 DOI 与配套论文。
9.2 一条最短的可用流程
从零到能画出一条可对外引用的曲线,最短路径如下。
#-- 取数并校验
mkdir -p phdsm && cd phdsm
curl -L -o p.zip https://physionet.org/static/published-projects/phdsm/phdsm-1.1.zip
unzip -q p.zip && cd phdsm-1.1
sha256sum -c --quiet SHA256SUMS.txt && echo VERIFIED
#-- 看有哪些文件
ls -1 *.csv | sort
#-- 读一个文件,取出纵向相对介电常数曲线并检查单调性
import pandas as pd
import numpy as np
df = pd.read_csv("WT---SMA.csv", header=None, skiprows=3, encoding="utf-8-sig")
df.columns = ["freq", "cl", "cl_se", "pl", "pl_se", "ct", "ct_se", "pt", "pt_se"]
df = df.apply(pd.to_numeric, errors="coerce").dropna(subset=["freq"])
#-- 频散应当单调:值随频率上升而降
assert df["pl"].is_monotonic_decreasing, "纵向介电常数非单调,需检查是否读错列"
print(f"频点 {len(df)} 个,{df['freq'].min():.0f}–{df['freq'].max():.0f} Hz")
print(f"低频端 {df['pl'].iloc[0]:.0f},高频端 {df['pl'].iloc[-1]:.0f}")
print(f"各向异性比 {df['pl'].iloc[0] / df['pt'].iloc[0]:.2f}")
最后那个断言很关键。健康组织的介电常数应当随频率单调下降,若读出来的曲线不是单调的,多半是列错位——这是 §5.3 提到的偏移问题的第一道自动防线。
9.3 引用方式
数据集本身的引用格式,官方给出的是:
Sanchez, B. (2019). Permittivity of Healthy and Diseased Skeletal Muscle
(version 1.1). PhysioNet. RRID:SCR_007345.
https://doi.org/10.130264/c23h3b
若使用 PolG 部分,还应当同时引用对应的论文;若使用其余五个模型,应当同时引用 Scientific Data 上的那篇原始数据论文。PhysioNet 本身也要求在使用任何资源时附带平台的标准引用,这一条在官方页面的引用区可以查到完整格式。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 数据来源 | 全部内容取自 PhysioNet 项目页、文件列表、实际 CSV 表头与 Europe PMC 收录的配套论文摘要 |
| 是否使用生成式模型 | 本篇由 AI 辅助撰写,事实逐条对照官方页面与本篇列出的一手文件 |
| 是否做分布统计 | 未做。全文不含频次、分位、空值率等分布类统计 |
| 数字层级 | 官方页面/官方文件/论文摘要,三级标注见附录 B |
| 未经核实的内容 | 文件示例行中的数值只作量级示意,均已注明「以文件为准」 |
| 未覆盖的范围 | 组织学数据、个体层面记录、原始阻抗波形,均不在公开包内,本篇未推测补全 |
| 适用限制 | 不得依据本篇做临床决策;不得把六个模型当作六种临床诊断 |
| 复用建议 | 引用时同时给出数据集 DOI 与配套论文,注明所用版本为 1.1 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| PHDSM 是公共卫生精神健康调查 | 全名是健康与患病骨骼肌介电常数,对象是小鼠离体肌肉 | 官方页标题与摘要段 |
| 含 DSM 诊断量表 | 无任何量表、问卷或诊断条目字段 | 18 个 CSV 的列结构全部是频率与物理量 |
| 是人体数据 | 全部为小鼠,伦理批件为 BIDMC 动物方案 #087-2016 | 官方方法段 |
| 覆盖到 1 MHz | 文件止于 862 kHz,共 27 个频点 | 实际 CSV 频率列 |
| 每类模型都有五个年龄组 | ALS 文件只有三个年龄组,SMA 只有一组 | 各文件首行 |
| WT 前缀即健康 | WT---ActRIIB.csv 是药物诱导的肌纤维肥大组 |
官方方法段对肥大实验的描述 |
| 有原始阻抗波形 | 只发布换算后的介电常数与电导率均值与标准误 | 官方数据说明段 |
| 可以当分类训练集 | 样本已聚合为均值,个体值不公开 | 文件每格为单值加标准误 |
| 有组织学数据 | 论文提到有,但不在公开包内 | 官方方法段与文件列表比对 |
| 六个模型都是疾病模型 | PolG 是早衰模型,ActRIIB 是药物诱导肥大 | 官方方法段 |
| 每个年龄组测的是同一批动物 | 各组是不同批动物,无个体纵向随访 | 官方对各组动物数的叙述 |
FAQ
Q1:PHDSM 这个名字到底怎么来的?
官方页面没有把缩写展开写,但从全名 Permittivity of Healthy and Diseased Skeletal Muscle 取首字母可以完全对上。Disease 指的是小鼠的疾病模型,与精神障碍诊断手册无关。
Q2:为什么只有 18 个文件却要 27 个频点?
频点是行,文件是模型与状态的组合。每个文件内部都是 27 行,覆盖 9 kHz 到 862 kHz 的对数间隔栅格,所以文件数与频点数不是一回事。
Q3:相对介电常数为什么是这么多数万到十万的量级?
低频段组织的相对介电常数本就很大,因为细胞膜电容在低频下贡献显著。这不是单位错误,无量纲列的原表头就写着 dimensionless。
Q4:纵向和横向哪个值更高?
在该库的低频段,纵向普遍高于横向,这是肌纤维定向排列的结果。具体到每个模型每个频点,应当直接读文件,不要用记忆中的比值。
Q5:标准误为什么这么小?
因为它是均值标准误,已经除以样本数的平方根,且每组只有五只动物。它不代表个体间差异小,而代表均值估计相对稳定。
Q6:缺的年龄组怎么办?
ALS 与 MDX 对照组的缺组,建议在方法上显式声明,或只用两边都有的时点做配对比较,不要用插值假装有数据。
Q7:能把它和人的 EIM 数据直接比吗?
不能直接比数值,只能比形状。小鼠与人在纤维尺寸、含水量、脂肪比例上有系统差异,跨物种比较应限定在频散趋势与各向异性比这类无量纲量上。
Q8:可以用它做数据增强吗?
可以,但只能作为物理先验注入,也就是用它的参数生成仿真样本,或者用它约束模型的物理一致性。把它的均值当真实样本复制扩增,会引入不可控的伪相关。
Q9:版本 1.0 和 1.1 该用哪个?
用 1.1。1.1 在 1.0 基础上补入了 PolG 数据,其余文件未变,引用时注明版本号即可。
Q10:许可需要署名到什么程度?
ODC-By 1.0 要求在使用该数据库的作品中给出署名,通常按官方给出的引用格式写即可;若制作衍生数据库,需在衍生库中同样标注来源。
Q11:官方提到的两篇论文必须都读吗?
若只用五个主模型,读 Scientific Data 那篇即可;若用到 PolG,需再读 Clark-Matott 等的那篇肌肉神经杂志论文,两篇分别对应不同的数据子集。
Q12:如果发现文件与文档不一致,以哪个为准?
以文件为准,并在方法段写明「以数据集文件实际内容为准,官方文本另有表述」。不要据此判定官方错误,只陈述两个口径及差额。
术语表
| 术语 | 含义 |
|---|---|
| 介电常数(permittivity) | 材料在外电场中极化、削弱内部电场的程度,绝对值常用相对介电常数表示 |
| 相对介电常数 | 介电常数与真空介电常数之比,无量纲 |
| 电导率 | 材料传导电流的能力,单位 S/m |
| 各向异性 | 性质随方向变化,此处指沿肌纤维与垂直纤维两个方向不同 |
| 纵向 | 肌纤维方向与电流电极方向平行 |
| 横向 | 肌纤维方向与电流电极方向垂直 |
| 四电极法 | 用一对电极注入电流、另一对测量电压,以消除接触阻抗影响 |
| 几何因子 K | 把测得的阻抗换算为电阻率或介电常数的几何修正系数,用盐溶液标定 |
| 频散 | 介电常数与电导率随频率变化的现象 |
| 均值标准误(SEM) | 样本均值的标准差,等于样本标准差除以样本数的平方根 |
| 腓肠肌 | 小腿后侧主要肌肉,小鼠实验常用取材部位 |
| 离体 | 组织从活体取出后测量 |
| EIM | 电阻抗肌电,用多频电流测量肌肉阻抗以评估神经肌肉状态 |
| SMA | 脊肌萎缩症,本库用 Smn 2B/2B-Neo 模型 |
| MDX | 杜氏肌营养不良的经典小鼠模型,本库用 D2.B10-Dmd mdx |
| DB/DB | 瘦素受体突变导致的肥胖糖尿病模型 |
| ALS | 肌萎缩侧索硬化,本库用 SOD1 G93A 转基因模型 |
| PolG | 线粒体 DNA 聚合酶突变模型,用于研究早衰 |
| ActRIIB-mFc | 肌抑制素配体陷阱,用于诱导肌纤维肥大 |
| NMN | 烟酰胺单核苷酸,PolG 实验中的饮水添加物 |
| ODC-By 1.0 | 开放数据署名许可,允许使用与再分发,需署名 |
| 宽表 | 用列分组表达多个维度、而非用行堆叠的表结构 |
| 年龄组 | 文件表头标注的取样周龄,各模型取值不同、需先对齐 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 文件总数 | 18 个 CSV | 官方文件列表 | 官方页面 |
| 体积 | 97.4 KB 未压缩,49.3 KB 压缩 | 官方文件列表 | 官方页面 |
| 频点 | 27 个 | 实际 CSV 频率列 | 官方文件 |
| 频率下限 | 9000 Hz | 实际 CSV | 官方文件 |
| 频率上限 | 862000 Hz | 实际 CSV | 官方文件 |
| 官方方法段频段 | 9 至 862 kHz | 方法段 | 官方页面 |
| 论文标题频段 | 10 kHz 至 1 MHz | Europe PMC 题录 | 论文摘要 |
| 模型数 | 6 | 方法段与文件名 | 官方页面 |
| 动物总数 | 约 130 只 | 方法段逐模型相加 | 官方页面 |
| SMA 动物 | 5 只模型 + 5 只对照 | 方法段 | 官方页面 |
| MDX 动物 | 15 只模型 + 15 只对照 | 方法段 | 官方页面 |
| DBDB 动物 | 10 只模型 + 10 只对照 | 方法段 | 官方页面 |
| ALS 动物 | 37 只 | 方法段 | 官方页面 |
| 肥大实验动物 | 20 只,分两组各 10 | 方法段 | 官方页面 |
| PolG 动物 | 30 只野生型 + 24 只突变 | 方法段 | 官方页面 |
| 介电盒尺寸 | 5 毫米 × 5 毫米 | 方法段 | 官方页面 |
| 极间距 | 4 毫米 | 方法段 | 官方页面 |
| 测量温度 | 37 摄氏度 | 方法段 | 官方页面 |
| 伦理批件 | BIDMC #087-2016 | 方法段 | 官方页面 |
| 首版日期 | 2019-03-15 | 版本列表 | 官方页面 |
| 1.1 版日期 | 2019-11-12 | 版本列表 | 官方页面 |
| 许可 | ODC-By 1.0 | 许可栏与 LICENSE.txt | 官方页面 |
| DOI v1.1 | 10.130264/c23h3b | 引用区 | 官方页面 |
| DOI latest | 10.13026/5889-jj86 | 引用区 | 官方页面 |
附录 B:数字的来源分层
第一层,官方页面。 包括:六个模型的方法叙述与动物数、取材与修剪尺寸、介电盒几何与温度、伦理批件编号、两个版本的日期、许可与 DOI、体积与文件数。这一层可以直接引用。
第二层,官方文件。 包括:27 个频点的具体值、每个文件的实际年龄组数、列数、BOM 与表头层级、校验和清单。这一层与第一层冲突时以本层为准,并在方法段注明。
第三层,论文摘要。 包括:配套论文的标题、期刊、年份、DOI、以及「10 kHz 至 1 MHz」这一频段表述与「另外获取定量组织学信息」这一说明。这一层用于交叉核对,不用于替代前两层。
未核实。 包括:原始阻抗波形是否另有存档、组织学数据的存放位置、各年龄组内的具体动物分配、ALS 中间三个时点的数据是否曾存在。这些未经核实的内容,本篇一律不作推测。
附录 C:完整参考文献
- Sanchez B. Permittivity of Healthy and Diseased Skeletal Muscle (version 1.1). PhysioNet. 2019. RRID:SCR_007345. doi:10.130264/c23h3b
- Nagy JA, DiDonato CJ, Rutkove SB, Sanchez B. Permittivity of ex vivo healthy and diseased murine skeletal muscle from 10 kHz to 1 MHz. Scientific Data. 2019;6:37. doi:10.1038/s41597-019-0045-2
- Clark-Matott J, Nagy JA, Sanchez B, Taylor R, Riveros D, Abraham NA, Simon DK, Rutkove SB. Altered muscle electrical tissue properties in a mouse model of premature aging. Muscle & Nerve. 2019. doi:10.1002/mus.26714
- Pollard T, Moody BE, Lehman L, Gow B, Fernandes C, Xie C, Johnson A, Mark RG, Heldt T. PhysioNet as a global platform for biomedical research. Nature Health. 2026:792-795. doi:10.1038/s44360-026-00096-z
- Open Data Commons. ODC Attribution License (ODC-By) v1.0. https://opendatacommons.org/licenses/by/1-0/
附录 D:批量核对脚本
下面这段脚本把「文件与官方描述是否对得上」变成可执行检查,交稿前可复跑。
#-- 核对每个文件的实际年龄组数与列数是否落在预期范围
import csv
import glob
EXPECT_AGES = {
"WT---SMA.csv": 1, "Disease---SMA.csv": 1,
"WT---MDX.csv": 3, "Disease---MDX.csv": 4,
"WT---DBDB.csv": 2, "Disease---DBDB.csv": 2,
"Disease---ALS.csv": 3,
"WT---PBS.csv": 1, "WT---ActRIIB.csv": 1,
}
def inspect(path):
with open(path, encoding="utf-8-sig", newline="") as fh:
rows = list(csv.reader(fh))
head = rows[0]
ages = [c for c in head if c.strip().lower().startswith("age")]
width = max(len(r) for r in rows)
body = [r for r in rows if r and r[0].strip().isdigit()]
return len(ages), width, len(body)
for p in sorted(glob.glob("*.csv")):
n_age, width, n_row = inspect(p)
name = p.rsplit("/", 1)[-1]
flag = ""
if name in EXPECT_AGES and n_age != EXPECT_AGES[name]:
flag = f" <-- 年龄组数 {n_age} 与预期 {EXPECT_AGES[name]} 不符"
print(f"{name:36s} ages={n_age} cols={width:3d} rows={n_row}{flag}")
跑通之后应当看到:PolG 的八个文件年龄组均为 1、列数均为 9、行数均为 27;MDX 疾病组列数 33、对照 25;DBDB 两个文件列数均为 17。任何偏离都说明读取方式或文件本身出了问题。
附录 E:如果只记五件事
- PHDSM 是「健康与患病骨骼肌的介电常数」,对象是小鼠离体腓肠肌,不是人群调查,也不含诊断量表。
- 全部内容 18 个 CSV、97.4 KB,27 个频点,只给均值与标准误,没有原始波形与个体记录。
- 六个模型六类动物,含对照合计约 130 只,年龄组不齐,缺组是常态,必须显式处理。
- 三处文档与文件的口径差要记住:1 MHz 对 862 kHz、ALS 六个时点对三个、组织学信息不在包内。
- 它最适合当仿真参数与 EIM 对照基线,不适合当监督学习的训练集;许可为 ODC-By 1.0,署名即可用。
编辑说明
本篇的事实骨架取自 PhysioNet 项目页正文与文件列表、1.1 版全部 18 个 CSV 的表头与频率列、许可文件与校验和清单,以及 Europe PMC 收录的两篇配套论文题录与摘要,核验时间为 2026 年 10 月 28 日。文中出现的示例数值仅用于说明列结构与量级,均在正文注明以文件为准;未做任何频次、分位或空值统计。官方文本与文件之间的三处口径差,按「存在两个口径、差额构成官方未说明」的方式处理,未做对错判定。原始阻抗波形是否另有存档、组织学数据的存放位置、ALS 中间三个时点是否有过数据,均未核实,正文一律标注为未核实,未做推测补全。封面提示词为文本描述,未生成图像。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- emgdb — 共享标签:生理信号 / 神经科学 / 罕见病
- sgamp — 共享标签:生理信号 / 神经科学
- cardioresp-response-orthostat — 共享标签:生理信号 / 神经科学
- earh — 共享标签:生理信号 / 神经科学
- earndb — 共享标签:生理信号 / 神经科学
- mouse-stroke-cylinder-rearing — 共享标签:生理信号 / 神经科学
- tremordb — 共享标签:生理信号 / 神经科学
- music-motion-2015 — 共享标签:生理信号 / 神经科学
- c-elegans-wholebrain-calcium — 共享标签:生理信号 / 神经科学
- drosophila-wholebrain-2p — 共享标签:生理信号 / 神经科学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

