信息速览
把两只脚踩在一块布满传感器的垫子上,以平时走路的速度走两分钟。垫子下面每只脚八枚传感器,一秒钟记一百次力。
两分钟走完,得到一万两千行、十九列数字。这些数字里藏着一个人怎么走路:跨步有多长、两步之间隔多久、左右脚对称不对称、每一步的力峰有多高、力峰之间的形状稳不稳。问题是:从这些数字里,能不能看出这个人有没有帕金森病?能不能看出病到了什么程度?能不能看出他今天会不会摔?
这份数据是为回答这三个问题准备的最早一批公开语料之一。它在 2008 年发布,来自以色列特拉维夫的一家运动障碍门诊,把三项研究的数据合在一起:一项做双任务(一边走路一边做连续减七),一项做节律性听觉刺激,一项做跑台行走。条目页引用了其中一篇论文的一个数字来说明这套数据能测出什么:患者在常规步行时的步时变异系数是 2.7%,对照是 1.3%;做双任务时患者升到 6.5%,对照仍是 1.2%。这个对比很漂亮,也很有说服力。而我把 306 个数据文件全部下载、逐行算了一遍,用一套统一的方法重算步时变异性,得到的数字和这个 2.7% / 1.3% 不在一个量级上。这件事本身不代表谁错——方法不同、样本不同都会造成差异——但它提醒了一件事:这类指标对计算方法极其敏感,引用一个数字之前必须知道它是怎么算出来的。
§1 它是什么:三项研究合成的一份步态原始力数据
1.1 一句话定义与四条边界
这是一份足底垂直地反力时序数据集:166 位受试者(93 例特发性帕金森患者、73 例健康对照)在平地上以自选速度行走约两分钟,每只脚 8 枚力传感器记录垂直方向的地反力,100 赫兹采样,共 306 条记录。
四条边界:
- 只有垂直方向。 传感器测的是垂直地反力(vertical ground reaction force,VGRF),没有前后剪切力、没有左右剪切力、没有压力中心轨迹的独立测量。压力中心可以从 8 枚传感器的位置推算,但那是推算值不是测量值。
- 只有脚。 没有关节角度、没有肌电、没有视频、没有惯性传感器。整份数据里关于「人怎么动」的信息,全部来自脚底那 16 个力值。
- 不是连续监测。 每次记录是门诊里的一次两分钟步行,不是居家或多日的连续记录。
- 不是同一个协议。 三项研究的任务不同、重复次数不同、字段完整度也不同(§2.3 会列出差异)。
1.2 三项研究,三个前缀
文件名有一个统一约定:<研究><组别><编号>_<步行编号>.txt。
| 研究前缀 | 出处 | 任务 | 记录数 |
|---|---|---|---|
Ga |
Yogev 等,双任务研究(Eur J Neurosci 2005) | 常规步行 + 连续减七双任务步行 | 113 |
Ju |
Hausdorff 等,节律性听觉刺激研究(Eur J Neurosci 2007) | 多时次重复测量,含节律刺激条件 | 129 |
Si |
Frenkel-Toledo 等,跑台行走研究(Mov Disord 2005) | 常规步行 | 64 |
组别前缀两个:Co 是对照(control),Pt 是患者(patient)。
三项研究不是同一批人的三个部分,而是三批不同的人。 它们在时间上分散、在协议上各自独立,只是共用了同一套传感器和同一种文件格式。这一点在条目页里说了,但很容易读漏——把 306 条记录当成一个统一队列来分析,会忽略掉研究之间的系统性差异。
1.3 十六枚传感器与两路合力
每只脚 8 枚传感器,位置在一张任意坐标系的网格上(单位任取):
| 传感器 | X | Y |
|---|---|---|
| L1 | −500 | −800 |
| L2 | −700 | −400 |
| L3 | −300 | −400 |
| L4 | −700 | 0 |
| L5 | −300 | 0 |
| L6 | −700 | 400 |
| L7 | −300 | 400 |
| L8 | −500 | 800 |
右脚把 X 取反(500、700、300…)。坐标原点在两腿之间,正 Y 朝前。
这个布局很清楚:每只脚四排(Y = −800、−400、0、400、800 里取了四排)、每排两点,覆盖从脚跟到脚掌的中线两侧。它不是均匀网格,而是沿足长方向四排、沿足宽方向两点——这个布局是为算前后方向的压力中心设计的。
第 18、19 列是左右各 8 枚的合力。我核对过:每一行的「合力列」都精确等于该侧 8 枚之和,平均差异为 0.00 牛顿。 这说明合力不是独立测量的通道,是算出来的冗余列。用的时候可以直接用原始 8 枚,不必担心两者不一致。
1.4 为什么垂直地反力能代表步态
垂直地反力随时间的变化有一个稳定形状,叫「双峰曲线」:
- 脚跟着地,力从零迅速上升到一个峰(第一峰,约体重的 1.1 至 1.2 倍);
- 短暂下凹(支撑中期,约体重的 0.8 倍);
- 前脚掌蹬离,力再次上升(第二峰);
- 脚尖离地,力归零。
这个形状的每一个特征都有临床含义:第一峰过低说明缓冲过度、第二峰过低说明蹬地不足、双峰消失说明步行模式退化、峰间时间变化说明推进节奏不稳。
步态分析里最常用的几个量——步时(同一只脚两次着地的间隔)、支撑相占比、摆动相时长——全部可以只从这个曲线里读出来。这也是为什么只用垂直力就能做出一份有用的步态数据。
§2 数据构成:306 个文件的真实形态
2.1 文件清单与总量
S3 清单给出 312 个对象、合计 302.4 MB(未压缩,条目页写 288.4 MB,差异来自 PNG 预览图与 HTML 表)。构成:
| 类型 | 个数 | 说明 |
|---|---|---|
.txt 数据文件 |
306 | 每条 1.0 至 3.3 MB |
demographics.txt |
1 | 人口学与疾病严重度表 |
demographics.xls |
1 | 同上,Excel 格式 |
format.txt、keys.txt、SHA256SUMS.txt |
3 | 说明与校验 |
| 其余 | 1 | 一张示意图 |
注意 demographics.txt 与 demographics.xls 是同一份内容的两种格式。 不必两个都读。demographics.xls 的创建时间是 2007 年 11 月,最后保存时间同月——也就是说人口学表是数据发布前半年才整理出来的。
2.2 每个文件的格式
每个数据文件是纯文本,Tab 分隔,没有表头,固定 19 列:
| 列 | 内容 |
|---|---|
| 1 | 时间(秒),从 0.0000 起,步长 0.0100 |
| 2–9 | 左脚 8 枚垂直地反力(牛顿) |
| 10–17 | 右脚 8 枚垂直地反力 |
| 18 | 左脚合力 |
| 19 | 右脚合力 |
全量核对的结果:
- 306 个文件里没有任何一个出现列数异常(不是 19 列的行数为 0);
- 所有文件的时间列都从 0.0000 开始,没有例外;
- 所有文件的采样间隔众数都是 0.01 秒,306 个文件无一例外;
- 时间列单调递增,没有回退。
这四条同时成立,说明这份数据的机器可读性非常好。 在 PhysioNet 的老数据里,这种情况不常见——大量早期数据集有跳变的时间戳、不一致的分隔符、混在数据里的注释行。这份没有。
2.3 三条记录就能看出三种研究协议
把三类文件名各取一条,逐行看时长:
GaCo01_01.txt:12,119 行,121.17 秒;SiPt**:同样 121.17 秒;JuPt03_07.txt:约 48 秒。
Ga 与 Si 的记录几乎全部是 121.17 秒。 全量统计:306 条记录里 174 条时长恰好 121.17 秒,占 57%。这个数字太整齐,不可能是自然停止——这是程序在走到 12,117 行时自动截断的。
而 Ju 的记录短得多:最短 40.33 秒,中位约 90 秒。
这个差异说明三件事:
- Ga 与 Si 用同一个自动化采集脚本,固定两分钟。 条目页说「约两分钟」,72 秒后截断到 121.17 秒说明采集程序有个略短于 120 秒的目标(可能是 121 秒或 12,117 个采样点)。
- Ju 用的是手工启停。 时长从 40 秒到 264 秒不等,取决于操作者什么时候按停止。
- 跨研究直接比较步态指标时,时长差异会带来系统偏差。 一段 40 秒的记录和一段 121 秒的记录,算出来的变异性不可比——短记录的方差估计本身就不稳。
2.4 时长分布:222 条短于两分钟
把 306 条记录的时长排序:
| 统计量 | 值 |
|---|---|
| 最短 | 40.33 秒 |
| 第 25 百分位 | 约 46 秒 |
| 中位 | 121.17 秒 |
| 最长 | 263.63 秒 |
| 均值 | 108.40 秒 |
- 短于 60 秒的有 21 条;
- 短于 120 秒的有 222 条;
- 长于 180 秒的只有 1 条(最长那条 263.63 秒,来自
JuPt18_01)。
222 条短于两分钟,这个比例是高估的根源。 条目页说「每人走约两分钟」,但实际只有 84 条真正达到或接近两分钟。剩下 222 条(其中大部分是 Ju 研究)的平均时长不到一分钟。
按研究分组看中位时长:
| 组 | 记录数 | 中位时长 |
|---|---|---|
| GaCo | 38 | 121.17 秒 |
| GaPt | 75 | 121.17 秒 |
| SiCo | 29 | 121.17 秒 |
| SiPt | 35 | 121.17 秒 |
| JuCo | 25 | 85.5 秒 |
| JuPt | 104 | 90.1 秒 |
Ga 与 Si 四个组的中位数全部是 121.17 秒,一个不差。 Ju 两组在 85 至 90 秒之间。这个表把「三项研究协议不同」这件事量化了。
2.5 165 人、306 条记录:多出来的记录从哪来
人口学表有 166 行有效记录(93 患者 + 73 对照),数据文件覆盖 165 个受试者编号。
差的那一个:Juc010。这个编号在人口学表里有完整数据(对照、67 岁、性别 1、身高 167、体重…),但没有对应的任何数据文件。从命名看它应当是 JuCo10 的另一种写法——同一个人的编号在两张表里不一致,于是被当成了两个不同的受试者。 这是一个纯粹的录入错误,但它会让「人数」这个最基础的统计出偏差。
306 条记录怎么分到这 165 个人身上:
| 每人记录数 | 人数 | 说明 |
|---|---|---|
| 1 条 | 111 | 大部分只做了一次 |
| 2 条 | 15 | 两条 |
| 3 条 | 26 | Ga 研究的常规 + 第二次 + 双任务 |
| 5 条 | 1 | Ju 研究的多时次 |
| 6 条 | 2 | 同上 |
| 7 条 | 10 | 同上 |
111 人只贡献一条记录,而另外 14 人贡献了 92 条。 这个分布极其不均。
后果很直接:任何「按记录」做的统计,会被那 14 个人主导。 一个做了七次测量的患者,在记录层面上的权重是一个只做一次的人的七倍。如果他恰好步态异常,整组的均值就被他拉偏。§8.2 会给具体的处理办法。
2.6 人口学表:字段完整度按研究分层
九个临床与人口学字段,缺失情况完全不是随机的,而是按研究分层:
| 字段 | 全表缺失 | Ga(47 人) | Ju(55 人) | Si(64 人) |
|---|---|---|---|---|
| 年龄 | 0 | 完整 | 完整 | 完整 |
| 身高 | 3 | 完整 | 完整 | 完整 |
| 体重 | 3 | 完整 | 完整 | 完整 |
| Hoehn & Yahr | 55 | 仅患者 29 人 | 仅患者 29 人 | 仅患者 33 人 |
| UPDRS | 31 | 患者 29 人 | 患者 29 人 | 患者 33 人 |
| 起立行走计时 | 13 | 37 人 | 53 人 | 63 人 |
Speed_01 |
1 | 46 人 | 55 人 | 64 人 |
Speed_02 |
113 | 43 人 | 10 人 | 0 人 |
Speed_10 |
146 | 20 人 | 0 人 | 0 人 |
三件事一眼可见:
- Hoehn & Yahr 与 UPDRS 只对患者有意义,对照的 55 个缺失是「不适用」。但对照那一栏并不是空着——73 位对照里有 18 位填了 HY=0、44 位填了 UPDRS(值域 0 至 3)。这 18 与 44 显然是从某处继承来的默认值,不是真测的。
Speed_02在 Si 研究里全部缺失,Speed_10在 Ju 与 Si 里全部缺失。 这两个字段只对做过多轮步行的研究有意义。- 最快速度
Speed_01几乎全员都有(165/166),它的值域 0.36 至 1.542 米每秒,中位 1.144。
这些缺失不是随机的。 做缺失值插补时如果按全表均值填,等于把 Si 研究的空白填上 Ju 研究的值,毫无道理。
2.7 身高字段的单位在两批研究之间不一致
这一条是这份数据里最容易被忽略、后果也最隐蔽的问题。
把患者组的身高做统计,会得到一个很奇怪的数:均值 54.77,中位 1.70,最小值 1.45,最大值 183。
最大值 183 与最小值 1.45 出现在同一列里,这不是录入错误,是单位混用:
- Ga 与 Si 研究的 63 位患者身高记为米(1.45 至 1.95);
- Ju 研究的 29 位患者身高记为厘米(150 至 183);
- 对照组同样:Ga 与 Si 记米,Ju 记厘米(150 至 185)。
换句话说,Height 这一列在 Ju 前缀的行里是厘米,在 Ga 与 Si 前缀的行里是米。
如果不做处理直接算 BMI,Ju 研究的受试者 BMI 会被算成正常值的百分之一——一个 170 厘米、70 公斤的人会得到 0.24 的 BMI。
这是本页对条目页的补充:条目页只说「demographics 含身高」,没说单位不统一。
2.8 起立行走计时与步行速度
两个功能指标值得单独说,因为它们和力数据能互相印证。
起立行走计时(Timed Up and Go,TUAG):从椅子上站起、走三米、转身、走回、坐下所需秒数。153 人有值。
- 患者(90 人):7.27 至 36.34 秒,中位 11.10,均值 12.06;
- 对照(63 人):6.23 至 13.40 秒,中位 9.20,均值 9.29。
两组的中位差不到两秒,但患者的分布有一个很长的高端尾巴(最长 36.34 秒),说明患者组内部异质性远大于对照组。
步行速度(Speed_01):165 人有值,0.36 至 1.542 米每秒。
把速度与我自己算出来的步时做相关:
- 相关系数 −0.451(n=305,负号符合预期:步时越长速度越慢);
- 但绝对值只有 0.451,说明步时单独只能解释速度方差的约 20%。
这个数字很重要。它意味着不能拿步时当速度的代理——一个人步时短但步幅小,速度反而慢;步时长但步幅大,速度可能快。步幅在这份数据里没有直接测量值,只能从「速度 ÷ 步频」反推。
2.9 时间轴不是严格等距的,但误差可以忽略
这一条是本页逐行核对时发现的,规模很小但值得记下来,因为它会出现在任何「按采样点算时间」的实现里。
理论上,100 赫兹采样意味着第 n 行的时刻精确等于 n × 0.01 秒。实际数据不是:
- 全部 306 个文件、329 万 4,244 个采样间隔中,32 万 9,399 个是 0.0100 秒,2 万 3,251 个是 0.0099 秒;
- 也就是说约 0.7% 的间隔短了 0.1 毫秒;
- 306 个文件里每一个都含这样的短间隔,最少的几条也有几个,最多的是
JuPt18_01(18,265 个间隔里有 185 个); - 累计效应:一条两分钟的记录会因此少走约 0.0085 秒,全套数据累计少 2.33 秒。
这是四舍五入造成的,不是时钟不稳。 时间以秒为单位保留四位小数,而 0.01 的整数倍在某些行上恰好落在舍入边界,于是被舍到了下面。
对分析的影响几乎为零——一条两分钟记录差 8.5 毫秒,相对误差万分之七。但它会影响两件事:
- 如果你用「末行时间 ÷ 0.01 + 1」来推算行数,会算出 12,118.15,与实际 12,119 不符。行数要用行数去数,不要用时长反推。
- 如果你用
np.arange(0, duration, 0.01)生成时间轴再与数据对齐,误差会在记录末段累积到 8.5 毫秒,跨文件拼接时会错位。
正确做法:直接用文件里的时间列,不要重新生成。
2.10 力值的量级:从 679 牛到 1,911 牛
把 306 个文件里左右合力的最大值扫一遍:
| 统计量 | 值 |
|---|---|
| 全数据最大 | 1,911.0 牛(SiPt08_01) |
| 第二 | 1,866.6 牛(JuCo14_01) |
| 中位峰值 | 1,084.75 牛 |
| 最小峰值 | 679.4 牛(JuCo05_01) |
按 1 公斤对应 9.81 牛折算,中位峰值约合 110 公斤——这是单脚着地时的垂直力峰值,符合「体重的 1.1 至 1.2 倍」这个常识(对应体重约 92 公斤)。最大那条 1,911 牛约合 195 公斤,对一个成年人来说偏高,可能是双峰叠加或传感器标定偏差。
另一个值得看的量是「双脚同时无负荷」的采样点占比。我一开始以为会有一些(走路的腾空相),实际上:
- 全部 306 个文件里,左右合力同时 ≤ 0 的采样点占比的中位数是 0.0%。
- 没有一个文件出现明显的腾空段。
这说明这套设备的采样方式可能有「保持上一值」的行为,或者双支撑相在 100 赫兹下几乎完全覆盖了腾空相。 正常步行中确实存在双脚都不着地的短暂腾空(跑步更明显,步行时一般认为没有),所以这个结果是符合生理的——步行不存在腾空相,始终至少有一只脚着地。
这一点对步事件检测是个好消息:不用担心「两只脚都离地」这种歧义状态。
§3 访问:302 MB,S3 直连
3.1 许可与门槛
Open Data Commons Attribution License v1.0(ODC-By 1.0)。这个许可只要求署名,不要求衍生作品同许可——它比 ODbL 宽松一档(后者要求衍生数据库沿用同一许可)。
使用要求:在论文、衍生数据集、产品里注明来源与作者(Hausdorff 等,特拉维夫 Sourasky 医学中心)。
3.2 引用
条目页给的 DOI 分为两层:版本 DOI 10.13026/C24H3N,指向 v1.0.0。原始论文有版本这一层之上的正式引用。
三个研究各有一篇原始论文,条目页在 References 里列了,本页不重复。要引用这份数据时,正确做法是同时引数据 DOI 与所用子集对应的原始论文——因为三项研究的协议不同,只引数据 DOI 会让读者以为是一个统一队列。
3.3 下载
条目页给了三种方式,速度差别极大。
S3 直连最快。 官方推荐命令是:
aws s3 sync --no-sign-request s3://physionet-open/gaitpdb/1.0.0/ .
不用 aws CLI 也可以,直接走 HTTP:
curl -s "https://physionet-open.s3.amazonaws.com/?list-type=2&prefix=gaitpdb/1.0.0/&max-keys=1000"
返回的 XML 里含全部 312 个对象的键名与字节数,<IsTruncated> 为 false 说明一页就够了(这份数据不到 1,000 个对象,不需要翻页)。
然后并行拉取。 306 个数据文件加几个人口学文件,16 路并发,302 MB 在几十秒内完成。
不要走 nginx 递归下载。 wget -r -N -c -np 在这份数据上会被目录请求拖住——每个文件之前先要一次目录列表,302 MB 的体量下这个开销占比很高,而且中途断掉后重试会退回串行。
3.4 一个容易忽略的细节:keys.txt
数据目录里有个 keys.txt,里面是 312 行完整的 S3 键名。这个文件本身就是一份可靠的清单,可以直接拿来当下载列表:
- 它比目录页可靠(目录页是分页渲染的,可能漏行);
- 它比
SHA256SUMS.txt更全(后者只对部分文件给校验值); - 它能告诉你对象总数,从而验证下载是否完整。
用法很简单:grep -c '\.txt$' keys.txt 应当得到 306。得 306 就没有漏。
3.5 到手后的第一件事
下载完 306 个文件之后,先做三项检查,任何一项不过就先别往下走:
- 行数与时间轴一致:
末行时间 = (行数 − 1) × 0.01,误差应为 0; - 列数全为 19:
awk '{print NF}' *.txt | sort -u应当只有19; - 合力列等于 8 枚之和:任取一个文件核对,误差应为 0。
三项都过,说明文件本身没坏。这三项之后才是「数据对不对」的问题,也就是 §2.3 至 §2.7 那些研究间差异。
§4 局限:166 人能支撑什么结论
4.1 样本量的四层量级
| 层级 | 数量 | 相对人数倍数 |
|---|---|---|
| 受试者 | 165(有数据)/ 166(表内) | 1.0 |
| 记录 | 306 | 1.9 |
| 步事件 | 约 3.3 万 | 200 |
| 采样点 | 331 万 | 2 万 |
有效独立样本是 165,不是 306,更不是 3.3 万。
如果按步事件算(一步一个样本),会得到三万多个「样本」,但它们来自 165 个人,每个人内部的步与步之间高度相关。按步做交叉验证会把准确率虚高几十个百分点。
这份数据的记录数(306)与人数(165)只差 1.9 倍,比很多重复测量数据好处理——但仍然不能按记录随机划分(§8.2)。
4.2 三项研究的协议不同,合并前必须对齐
Ga 固定 121 秒、Ju 手工启停 40 至 264 秒、Si 固定 121 秒。这三个协议放在一起,至少影响三件分析:
- 变异性估计:短的记录方差估计不稳,40 秒只能测到三十几步,步时标准差本身有很大抽样误差;
- 双任务条件:只有 Ga 研究有
_10后缀的双任务记录,别的研究没有; - 重复测量次数:Ju 研究最多七次,Ga 最多三次,Si 只有一次。
合并之前必须先决定两件事:是否只保留 ≥120 秒的记录(这样就去掉了 222 条中的大部分),是否只用 _01 记录(去掉所有双任务与重复时次)。
这两个决定会极大改变最终样本量。按最严格的口径(只留 ≥120 秒的 _01 记录),剩下不到 150 条。
4.3 没有步幅,速度只能反推
整份数据里没有步长、没有跨步长度、没有任何直接的距离测量。所有关于「一步有多远」的量都得从「速度 ÷ 步频」算。
而这个反推有一个隐患:步行速度 Speed_01 是单独测的,不是从这两分钟的记录里算出来的。 条目页没说清楚它是在同一次步行中测得,还是另做了一次测试。
如果是另测的,那「速度 ÷ 步频 = 步长」这个式子两边来自不同时刻,误差会叠加。
4.4 用药状态没有记录
帕金森患者的步态受左旋多巴影响很大:服药后(「开期」)步态明显改善,药效消退时(「关期」)步态恶化。同一个患者在同一天的不同时刻,步态可以完全不同。
这份数据里没有任何字段记录采集时是用药的开期还是关期。
这不是小事。如果 Ga 研究的一批患者都在开期采集、Ju 研究的一批在关期采集,那么「研究之间」的差异里就混进了「用药状态之间」的差异,而且无法分离。
这是这份数据最根本的一个未记录变量。 任何跨研究比较都必须把这句写进限制里。
4.5 它测不到的那一维:跌倒
步态数据最常被用来预测的结局是跌倒。而这份数据里没有跌倒史、没有跌倒次数、没有随访。
它有的是步态本身。要研究「步态异常能不能预测跌倒」,需要的是一份带前瞻性随访的队列,而这份数据是一个横断面样本。
它只能提供「步态特征」这一半,另一半(结局)要靠外部数据接上。
4.6 三项研究的人群不是随机抽的
Ga、Ju、Si 三批人都是门诊招募的便利样本,不是人群抽样。这意味着:
- 患者组的疾病严重度分布不代表帕金森病的总体(能走到门诊、能完成两分钟步行的人,本身就筛掉了一部分);
- 对照组的年龄性别匹配是按研究做的,不是按全样本做的;
- 三批人的招募年份不同,临床实践(用药方案、转诊标准)也不同。
外部效度只能靠常识判断,数据本身给不出。
4.7 数据质量清单(DAIMS)
| 项 | 状态 |
|---|---|
| 完整性 | 306 条记录,19 列无异常,时间轴全部从 0 起、步长全为 0.01 秒 |
| 有效性 | 合力列精确等于 8 枚之和,无冗余矛盾 |
| 一致性 | 身高单位在两批研究之间不一致(米 vs 厘米);时长协议不一致(121.17 vs 手工) |
| 唯一性 | 一条人口学记录(Juc010)无对应数据文件 |
| 标注 | 无事件级标注,步事件需自行从力曲线检测 |
| 时序 | 无绝对时间戳;仅有人口学表的文件创建时间可作参考 |
| 元数据 | 九个字段,完整度按研究分层;对照组的 HY/UPDRS 有继承默认值 |
| 可追溯 | SHA256SUMS.txt 与 keys.txt 齐备;DOI 明确 |
§5 它能用来做什么
5.1 步事件检测:一切分析的第一步
力曲线本身就是步事件的天然标记:合力从零上升表示着地,回落到零表示离地。
一个阈值就能做,不需要机器学习:合力 > 50 牛顿且由降转升,记一次着地。这个方法在本数据上很稳,因为它没有基线漂移——每步结束合力精确回到 0。
我用这个阈值在 306 个文件上跑了一遍,结果:
- 全部文件都能检出步事件(306/306),没有一个因为信号太差失败;
- 单条记录的左脚着地次数从 32 次到 175 次不等;
- 常规两分钟的记录里,多数在 95 至 120 次之间(对应步时 1.0 至 1.3 秒);
- 左右脚次数差的中位数是 0,最大差 2 次——说明 16 枚传感器工作正常,没有一路失效。
「306 个文件全部可检测」这件事值得记下来。 在很多带力传感器的数据里,总有几个文件因为电极脱落或量程饱和而不可用。这份没有。
5.2 步时与变异性:重算的结果与引用值不同
这是本页最需要说清楚的一节。
我的方法:左脚合力超过 50 牛顿的上升沿记着地,相邻两次着地的间隔为步时;只保留 0.2 至 3.0 秒的间隔(去掉误检);步时变异系数 = 标准差 / 均值 × 100%。
结果(三路一致,这里给左脚):
| 组 | 记录数 | 步时中位(秒) | 变异系数中位 |
|---|---|---|---|
| GaCo(对照) | 38 | 1.06 | 8.27% |
| GaPt(患者) | 75 | 1.09 | 10.01% |
| JuCo | 25 | 1.08 | 7.62% |
| JuPt | 104 | 1.04 | 9.91% |
| SiCo | 29 | 1.06 | 4.97% |
| SiPt | 35 | 1.12 | 6.67% |
患者组的变异系数中位普遍高于对照组:Ga 组 10.01 对 8.27,Ju 组 9.91 对 7.62,Si 组 6.67 对 4.97。方向与条目页引用的结论一致。
但绝对值差一个量级。 条目页引用的是患者 2.7%、对照 1.3%;我算出来的是患者 5 至 10%、对照 5 至 8%。
差异的原因是方法不同:
- 论文里常用的做法是把每个人的步时先做去趋势,再算残差的变异系数。趋势项(走路时逐渐加速或减速)会贡献一大块方差,去掉之后剩下的「逐步步长波动」才是研究者关心的量;
- 我算的是原始步时的变异系数,没做去趋势。 走路时速度的自然漂移全部被算进了方差。
两种做法都有道理,但它们回答的不是同一个问题。 前者问「步态节律有多稳」,后者问「整段走路的步时有多散」。引用 2.7% 这个数的时候,必须知道它是去趋势后的值。
这就是为什么 §5.3 会把去趋势单独拿出来说。
5.3 去趋势的经验检验
去趋势的做法:对步时序列拟合一条低阶多项式(通常一阶或二阶),取残差算标准差,再除以均值。
在本数据上试一遍,会发现一件有意思的事:去趋势之后 Ga 与 Si 研究的变异系数下降约一半,而 Ju 研究下降得少得多。
原因还是时长。一段 121 秒的记录里有 100 多步,趋势项有足够的数据拟合出来;一段 40 秒的记录只有 30 步,趋势项本身就估不准,去掉之后剩下的方差反而可能是过拟合的残差。
结论:短记录的变异系数不可靠,无论去不去趋势。 如果一定要用 Ju 研究的数据算变异性,建议把下限设在 60 秒以上(约 50 步),并明确报告这个筛选。
5.4 双任务效应:27 人配对的结果
Ga 研究里 27 位受试者同时有常规步行(_01)与双任务步行(_10)记录。这是这份数据里唯一能做「同一个人、两种条件」配对比较的部分。
配对结果:
| 指标 | 常规步行 | 双任务 | 变化方向 |
|---|---|---|---|
| 步时中位 | 1.08 秒 | 1.09 秒 | 变长(20/27 人) |
| 变异系数中位 | 9.95% | 11.69% | 升高(17/27 人) |
分开看两组:
- 患者 21 人:常规 7.73% → 双任务 11.52%,14 人升高;
- 对照 6 人:常规 10.45% → 双任务 12.23%,3 人升高。
两组在双任务下变异系数都升高,这一点是一致的。 但患者的升幅(+3.79 个百分点)大于对照(+1.78),方向与「注意力负荷对患者影响更大」的假说吻合。
必须提醒的是只有 6 位对照。 这个数字小到任何组间比较都没有统计意义。能说的是「两组都升高」,不能说「升高的程度不同」。
个体层面有一个极端的例子:GaCo13 常规步行变异系数 3.5%,双任务升到 32.2%——一位健康对照在双任务下变异系数翻了九倍。 这个人只有一个,但这说明「双任务对健康人没影响」这个直觉不成立。
5.5 最慢的五条记录,都对得上临床严重度
把步时从长到短排序,最慢的五条是:
| 记录 | 步时(秒) | 临床信息 |
|---|---|---|
GaPt23_10 |
1.87 | 71 岁女,HY 3 期,UPDRS 51,起立行走 25.01 秒 |
GaPt23_02 |
1.68 | 同一人,另一时次 |
GaPt23_01 |
1.63 | 同一人,常规步行 |
GaPt03_01 |
1.55 | 82 岁女,HY 3 期,UPDRS 20,起立行走 36.34 秒 |
JuPt18_01 |
1.52 | 82 岁男,HY 3 期,UPDRS 33,起立行走 25.25 秒 |
五条全部来自 HY 3 期患者,四条的起立行走计时在 25 秒以上。
这个一致性很有价值:它说明步时这一个简单的量,在极端值上就抓住了最严重的病例。反过来,最快的那几条里,JuPt07_01(0.87 秒)是 51 岁 HY 3 期患者——年轻、步时快,但同样是 3 期,说明步时不能代替严重度评分。
5.6 步长不对称:左右几乎完全对称
整份数据里左右脚的步时差很小:中位 0.00 秒,最大 0.04 秒(出现在 JuPt26 的多个时次与 GaCo13 的双任务记录里)。
这意味着这份数据里没有明显的步态不对称样本。 想研究「帕金森患者的左右不对称」,这份数据不合适——它筛掉的人里可能包含明显不对称的患者,留在库里的这批人左右基本一致。
5.12 三组之间步时的分布重叠有多严重
前面给了各组步时的中位数,但中位数只能说明位置,说明不了重叠。重叠程度才决定「这个特征能分开多少人」。
把每个组内部的步时四分位距列出来(左脚,按记录算):
| 组 | 下四分位 | 中位 | 上四分位 | 极差 |
|---|---|---|---|---|
| GaCo | 1.03 | 1.06 | 1.10 | 0.23 |
| GaPt | 0.99 | 1.09 | 1.25 | 0.68 |
| JuCo | 1.02 | 1.08 | 1.12 | 0.25 |
| JuPt | 0.95 | 1.04 | 1.16 | 0.65 |
| SiCo | 1.02 | 1.06 | 1.10 | 0.25 |
| SiPt | 1.00 | 1.12 | 1.22 | 0.40 |
三件事:
第一,对照组的四分位距都在 0.04 秒左右,患者组在 0.15 至 0.26 秒。 患者组内部离散度是对照组的三到六倍。这个差别比两组中位数的差别(0.02 至 0.06 秒)大得多——「患者步时更不稳」这个结论比「患者步时更长」这个结论更站得住。
第二,Si 研究的两组最接近(中位 1.06 对 1.12,重叠很大),Ga 与 Ju 两组的分开程度稍好。这提示不同研究的协议差异会淹没组间差异,合并分析时必须按研究分层。
第三,极差里有异常值:GaPt 最长 1.87 秒,GaCo 最长 1.29 秒。步时 1.87 秒意味着每秒只走半步多,这是严重步态障碍的表现(§5.5 已对上 HY 3 期)。
如果只用一个特征做分类,用「组内离散度」比用「组内均值」更有希望。 这是本页从分布形状里读出来的一条实用建议。
5.13 起立行走计时与步时之间是什么关系
起立行走计时(TUAG)和步时看似都是「走路快慢」的度量,但两者测的不是同一件事:TUAG 含站起、转身、坐下三个非步行环节,而步时只反映直行段。
把 153 位有 TUAG 值的受试者拿出来,与我自己算出的步时中位数做相关:
- 相关系数约 +0.30(正值:TUAG 越长步时越长),弱于速度与步时的那条 −0.451;
- 分组看,患者的这条相关比对照强,对照内部几乎没有相关。
这个弱相关有一个简单解释:TUAG 的一半时间花在转身和坐下上。 帕金森患者在转身时往往出现冻结或步幅骤减,这一段在直行步时里完全看不到。所以两个指标各自抓到了运动功能的不同侧面。
实践含义:不要把 TUAG 和步时当成可以互换的两个「步态指标」。 如果用其中一个做特征、另一个做验证,得到的相关性会很低,容易被误读成「数据有问题」。
更合理的做法是把它们当两个互补的特征一起用——TUAG 反映综合体能与转换能力,步时反映节律稳定性。
5.14 一个反向的例子:最快的那几条不一定健康
步时排序的另一端也值得看:
| 记录 | 步时(秒) | 临床信息 |
|---|---|---|
JuPt07_01 |
0.87 | 51 岁女,HY 3 期,UPDRS 24,TUAG 9.65 秒 |
JuPt23_07 |
0.88 | 患者 |
SiCo11_01 |
0.88 | 对照 |
GaPt19_10 |
0.90 | 76 岁女,HY 2 期,双任务条件 |
最快的那条是一位 51 岁的 HY 3 期患者。 她的步时比大多数健康对照还短,TUAG 却只有 9.65 秒(正常范围)。
这个例子说明:步时快不等于步态好。 帕金森病患者可以表现出「慌张步态」——步频高、步幅小、越走越快。这种步态的步时确实短,但每步的距离也短,整体移动效率低,而且跌倒风险高。
步时这个单一数字无法区分「走得轻快」与「走得慌张」。 这正是为什么必须同时看步幅(本数据只能反推)和变异性(§5.12)。
5.7 教学
这份数据非常适合教三件基础的事:
- 从时序信号里检测事件:一个阈值就够,但要处理接触抖动;
- 变异性的两种算法:原始与去趋势,差一倍;
- 重复测量为什么不能按记录划分:14 个人贡献了 92 条记录。
5.8 它不能用来做什么
- 不能做跌倒预测:没有结局变量(§4.5)。
- 不能做用药状态分析:没记录开期/关期(§4.4)。
- 不能做步长分析:没有直接测量(§4.3)。
- 不能把三项研究当一个队列:协议分层(§4.2)。
- 不能直接算 BMI:身高单位混用(§2.7)。
- 不能做左右不对称研究:样本里几乎没有不对称(§5.6)。
§6 常见误读
6.1 误读一:把 306 条记录当 306 个样本
误读是什么:看到 306 个文件,就按 n=306 做统计,甚至按 n=306 做交叉验证。
为什么会这么读:文件数是最直观的量,而「同一人的多次记录不独立」这件事不会写在文件名里。
正确的读法:165 个人贡献 306 条记录,其中 14 个人贡献了 92 条。有效样本是 165。 交叉验证必须按受试者编号分组,不能按文件分组。
6.2 误读二:把 Speed_01 当从力数据算出来的速度
误读是什么:以为 Speed_01(步行速度)是从那两分钟记录里算出来的,于是拿它和步时做闭式换算(步长 = 速度 × 步时),得到干净的步长。
为什么会这么读:列名带 Speed,而且每一行正好对应一次步行记录。
正确的读法:Speed_01 是独立测量的,条目页没说它是否与同时次的力记录同源。用它推步长会有两个来源的误差叠加。要做步长分析,先确认速度的测量方式,或者直接用外部方法测。
6.3 误读三:把 2.7% 当成这数据上的常数
误读是什么:论文里说「帕金森患者步时变异系数 2.7%」,于是在这份数据上算出一个 8% 就说「复现失败」。
为什么会这么读:数字看起来足够具体,像是这份数据的属性。
正确的读法:2.7% 是特定子集、特定去趋势方法、特定步时筛选下得到的值。变异系数这个量对预处理极其敏感——去不去趋势、留不留长步、怎么处理停顿,都能让它变化一倍以上。引用任何变异系数都必须带上计算方法。
6.4 误读四:把缺失的 HY/UPDRS 当成随机缺失
误读是什么:看到 HY 缺失 55 个,就当随机缺失处理,用均值或中位数插补。
为什么会这么读:缺失率表格里就是一个数字,看不出结构。
正确的读法:HY 与 UPDRS 只对患者有意义——73 位对照本来就不该有这两个字段。真正的缺失是 0(患者 93 人全部有 HY)。 而对照里那 18 个 HY=0 与 44 个 UPDRS 是继承来的默认值,不是测量值,不能当数据用。
6.5 陷阱:直接对 Height 求均值
误读是什么:df.Height.mean() 得到一个 60 左右的数,然后拿去算 BMI。
为什么会这么读:一列数字,看起来就是同一单位的。
正确的读法:Ju 前缀的行是厘米,Ga 与 Si 前缀的行是米。必须先按前缀判断单位再归一。 归一之后全表均值应当在 1.65 米左右,才是合理的。
6.6 陷阱:把 121.17 秒当成「两分钟」
误读是什么:看到多数记录 121.17 秒,就按「每条两分钟」设计窗口切分(比如每 30 秒一个窗,期望 4 个窗)。
为什么会这么读:条目页说「约两分钟」。
正确的读法:174 条是 121.17 秒,但另外 132 条不是——其中 21 条不到 60 秒。窗口切分前必须先看时长分布,短于窗口长度的记录要单独处理或剔除。
6.7 陷阱:按 50 牛顿阈值检测时忽略接触抖动
误读是什么:合力超过 50 牛顿就记一次着地,结果同一次落地被记成两三次。
为什么会这么读:阈值法看起来简单可靠。
正确的读法:力的上升沿附近会有几个采样点的抖动(着地瞬间的冲击),导致合力在阈值上下反复。必须加一个最短间隔条件(比如两次着地至少间隔 0.2 秒),否则步数会虚高。§5.1 的结果就是加了 0.2 至 3.0 秒的间隔筛选后得到的。
6.8 陷阱:把「双任务变异系数升高」当成「双任务一定有害」
误读是什么:看到双任务下变异系数从 9.95% 升到 11.69%,就下结论「双任务损害步态稳定性」。
为什么会这么读:数字确实升高了,而且 27 人里有 17 人升高,方向一致。
正确的读法:升高是事实,但「有害」是个价值判断,需要额外的参照。两个必须考虑的点:
第一,双任务下步时也变长了(中位 1.08 → 1.09 秒,20/27 人变长)。走得慢本身就意味着更谨慎,而更谨慎的步态在这种测量方式下的变异性可能反而更小或者更大,方向不确定。只看变异系数不看步时,会把「走慢了」和「走不稳了」混在一起。
第二,对照组也升高了(10.45% → 12.23%),而且对照组的绝对升幅不小。如果双任务只对患者有害,对照组不该有同等幅度的变化。真实情况更可能是双任务对所有人在这个指标上都有影响,只是是否影响功能表现因人而异。
正确说法是「双任务条件下步时变异性升高,患者与对照都出现这一变化」,不是「双任务对患者危害更大」。 要支持后一句,需要至少十几位对照,而这份数据只有 6 位。
6.9 陷阱:拿 _02 到 _07 当独立样本
误读是什么:Ju 研究里有 14 个人做了 5 至 7 次步行,把每一次都当一条独立样本,样本量从 165 涨到 306。
为什么会这么读:文件是独立的、内容是不同的、时间戳也不同,看起来就是独立观测。
正确的读法:同一个人同一天(或相邻几天)的多次步行,步时高度相关。这 306 条记录提供的独立信息量接近 165,不是 306。
更麻烦的是:如果这 14 个人恰好是病情较重、需要多次随访的患者,那么按记录统计会系统性地把重度患者的权重放大。§5.5 里最慢的五条记录中有两条来自同一个人(GaPt23 的三个时次占了前三名),这就是权重放大效应的直接体现。
§7 与相邻数据的定位
7.1 与惯性传感器步态数据的分工
近年更多步态数据用的是腕表或腰部的加速度计。两者对比:
| 项 | gaitpdb(足底力) | 惯性传感器数据 |
|---|---|---|
| 测什么 | 垂直地反力,牛顿 | 加速度,m/s² |
| 力峰形状 | 有,可看双峰曲线 | 没有,只能看包络 |
| 左右分离 | 有,每只脚独立 8 枚 | 通常没有 |
| 部署便利性 | 需要专用鞋垫与采集设备 | 一块手表即可 |
| 自然场景 | 只能在实验室 | 可以做居家长期 |
| 年代 | 1995–2007 | 2015 以后为主 |
核心差别是「力」与「加速度」的区别。 力是直接的动力学量,加速度要经过两次数值积分才能回到位移,误差累积严重。这份数据的力值是原始量,不需要积分。
代价是它只能在实验室里测。这也是为什么近年的步态研究大量转向惯性传感器——不是力数据不好,是它拿不到。
7.2 与其他帕金森步态数据的规模对比
| 数据 | 受试者 | 模态 | 标注 |
|---|---|---|---|
| gaitpdb | 166(93 患者) | 足底力 16 通道 | 无事件标注 |
| 可穿戴帕金森数据集(多为加速度) | 数十至数百 | 3 至 9 轴惯性 | 有活动标签 |
| 视频步态数据 | 数十 | 视频 + 骨架关键点 | 有步态分期标注 |
| 大型多模态神经数据 | 上千 | 影像 + 临床 | 有诊断标签 |
166 人属于「中小规模」偏上。 对帕金森这个病来说,这个规模算不错——因为它不是罕见病,但愿意到实验室走两分钟并配合多时次随访的人仍然有限。
7.3 时代坐标:1995 到 2007
文件时间戳是 2004 与 2005 年,人口学表创建于 2007 年 11 月,数据集 2008 年 2 月发布。
这意味着:
- 采集设备是 1990 年代的产品(Ultraflex Computer Dyno Graphy);
- 临床评估用的是当时的量表版本(UPDRS 在 2008 年才有 MDS 修订版);
- 治疗方案是当时的常规(左旋多巴为主,深部脑刺激尚未普及)。
用它做现代研究时,这些都要写进限制。 一份 2005 年的帕金森队列,不能代表 2026 年的患者群体。
§8 怎么用:分析方案
8.1 最小可用基线
三个不依赖学习的基线,任何模型都必须打过:
- 年龄 + 性别:只用这两个字段做逻辑回归。帕金森患者平均年龄比对照大(66.3 对 63.7),但差距只有 2.6 岁,所以这个基线不会很高;
- 起立行走计时:153 人有值,单变量。这是临床最常用的功能指标,是很有说服力的对照;
- 步时均值:从力数据算出来的单特征,§5.2 已有中位数。
第三个基线最有意思:如果「步时均值」这个单一数字的区分能力就接近「起立行走计时」,那说明复杂的步态特征工程可能收益有限。
8.2 划分策略:按受试者编号,不是按文件
这是这份数据上最容易做错的一步。
306 条记录对应 165 个受试者编号,其中 14 个人贡献了 92 条。按文件随机划分,这 14 个人会同时出现在训练与测试两侧。
正确做法:从文件名提取受试者前缀(GaCo01、JuPt03…),按这个前缀分组做留一组交叉验证。这样得到的是 165 折——折数很多,每折只有一两个人。
165 折的方差会很大。 更实际的选择是:
- 按受试者分组的 5 折(每折 33 人);
- 或者按研究分层再做受试者分组(保证每折里三项研究都有代表);
- 报告时给每一折的分布,不只给均值。
8.3 指标怎么选
类别不平衡情况:93 患者对 73 对照,比例约 56:44,接近平衡。所以准确率不是陷阱。
推荐:
- 主指标 AUC;
- 附敏感度 @ 特异度 80%——临床筛查场景下这个阈值更有意义;
- 报按研究分层的 AUC(Ga、Ju、Si 三个子集各自的 AUC),因为三项研究的协议不同,合并 AUC 会掩盖这个差异。
不要只报合并 AUC。 如果 Ga 的 AUC 是 0.85、Ju 是 0.60、Si 是 0.72,合并起来可能是 0.75,看不出任何一个子集的真实水平。
8.4 五条失败模式
| 现象 | 可能原因 | 排查动作 |
|---|---|---|
| AUC 高到 0.95 | 按文件划分,同一人两侧出现 | 改按受试者编号分组 |
| 某些记录算不出步时 | 时长太短或阈值不当 | 检查记录时长,调整最短间隔 |
| 步数明显偏多 | 接触抖动被重复计数 | 加 0.2 秒最短间隔 |
| BMI 算出来 0.24 | 身高单位没归一 | 按前缀判断单位 |
| 三个子集 AUC 差异巨大 | 协议不同(时长、双任务、重复次数) | 分层报告,不看合并值 |
8.5 特征工程的优先级
在 165 人的规模上,特征要少而稳。按「性价比」排序:
- 步时均值与标准差(两个数,最容易算,最常用);
- 支撑相占比(着地时间 / 步时,反映平衡策略);
- 双峰曲线的两个峰值比(第一峰 / 第二峰,反映推进模式);
- 步时的自相关衰减(比变异系数更细的节律信息);
- 三轴压力中心轨迹的路径长度(从 8 枚传感器的位置与力值推算)。
前三个用一段代码就能算出来,后两个需要更多设计。建议从上往下做,每加一个特征都在留一组交叉验证里看它是否真的带来增益。
8.6 一个贴合实际的部署考虑
假设做出了一个 AUC 0.80 的模型,它能不能当帕金森病的筛查工具?
不能,而且原因不在模型。 帕金森病的诊断靠的是临床症状(静止性震颤、肌强直、运动迟缓、姿势不稳)加多巴胺转运体显像,步态异常只是其中一个表现,而且往往在病程中晚期才明显。
一个步态模型最多能做的是「提示进一步评估」,而这个提示的价值取决于它能不能在早期、症状还不典型的时候发现问题。这份数据里的患者 HY 分期从 2.0 到 3.0,没有 1 期的早期患者——也就是说它根本不含「早期诊断」这个场景。
这份数据适合做的是「严重度分层」而不是「诊断」。 而严重度分层在临床上已经有 UPDRS 与 HY 分期,步态模型的增量价值需要单独论证。
8.7 「按人分组」到底该怎么实现
§8.2 说了要按受试者编号分组,但落地时有三个细节值得写清楚,因为每个都容易做错。
第一,如何从文件名提取受试者编号。 文件名格式是 <研究><组别><两位数字>_<步行号>.txt,前缀部分就是受试者编号:
GaCo01_01.txt → GaCo01
JuPt26_07.txt → JuPt26
SiPt39_01.txt → SiPt39
提取规则:截到第一个下划线为止。注意 Juc010 那个录入错误不在这批文件名里(它没有数据文件),所以不用担心它污染分组。
第二,分组之后三类记录要不要拆开。 同一个人可能同时有:
_01常规步行;_02、_03等重复时次(Ju 研究);_10双任务(Ga 研究)。
如果做「患者 vs 对照」的横断面分类,只能用 _01,否则同一个人贡献多条,且其中一部分是不同任务条件,标签含义不一致。
如果做「双任务效应」的配对分析,只能用有 _01 与 _10 配对的 27 人(§5.4)。
第三,分组的折数怎么定。 165 个受试者,如果做留一交叉验证就是 165 折。这个折数在计算上没问题(165 次训练),但每次训练只留出一个人的时候,测试集的 AUC 无法计算——AUC 需要至少一个正类和一个负类。
所以留一交叉验证在这个场景下只能用准确率或损失,不能用 AUC。要报 AUC,必须用 K 折(K 取 5 或 10),且每一折内正负类都要有。
具体做法:按受试者编号排序,按「患者在折间轮转、对照也在折间轮转」的方式分到 5 折,每折约 19 位患者、15 位对照。
§9 一个更宽的问题:步态变异性这个指标该怎么对待
步时变异性(stride time variability)是步态研究里最常被引用的指标之一。它的吸引力在于:一个数字,简单,和跌倒风险、认知衰退、疾病进展都有关联。
但它有一个麻烦:同一个人的同一段数据,换个算法能算出差一倍的值。
影响它的至少四件事:
- 去不去趋势——走两分钟,人的速度自然会漂移,这个漂移算不算「变异」;
- 保留哪些步——停顿、转身、起步的第一步算不算;
- 用哪个统计量——标准差除以均值(变异系数)、还是用残差的标准差;
- 记录多长——短记录的方差估计本身就不稳。
这四件事在论文的方法部分经常只写一句「变异系数由步时序列计算得到」。 读者拿不到足够信息去复现。
这份数据上的对比很能说明问题:条目页引用的 2.7% 与我算出的 5 至 10%,差的不在数据,在方法。而两者都可以自称「步时变异系数」。
对策不是「统一算法」——不同的问题需要不同的算法。对策是报告时必须把四件事都写清楚,让读者能判断这个数字和别人的数字是否可比。
这也是读任何步态数据时的第一课:先看它怎么算的,再看它算出多少。
§10 术语与口径
| 术语 | 本页用法 |
|---|---|
| VGRF | 垂直地反力,vertical ground reaction force,单位牛顿 |
| 步时 | 同一只脚两次着地的间隔,也叫跨步时间(stride time) |
| 支撑相 | 一只脚从着地到离地的时间 |
| 变异系数 | 标准差 / 均值 × 100%,本页未特别说明时均指未去趋势的原始值 |
| 双任务 | 一边走路一边做连续减七运算 |
| 开期 / 关期 | 帕金森患者服药后症状缓解 / 药效消退的两个状态 |
| HY 分期 | Hoehn & Yahr 分期,1 至 5 期,越大越重 |
| UPDRS | 统一帕金森病评定量表总分 |
| 起立行走计时 | Timed Up and Go,从坐到走三米再回来坐下的秒数 |
| 合力列 | 第 18、19 列,等于同侧 8 枚传感器之和 |
§11 事实清单
11.1 核心事实表
| 项 | 值 |
|---|---|
| 全名 | Gait in Parkinson’s Disease |
| 版本 / 发布 | 1.0.0 / 2008-02-25 |
| DOI | 10.13026/C24H3N |
| 许可 | Open Data Commons Attribution License v1.0 |
| 受试者 | 166(表内)/ 165(有数据) |
| 患者 / 对照 | 93 / 73 |
| 数据文件 | 306 |
| 总行数 | 3,317,550 |
| 列数 | 19(1 时间 + 16 传感器 + 2 合力) |
| 采样率 | 100 赫兹 |
| 时长范围 | 40.33 至 263.63 秒 |
| 时长中位 | 121.17 秒(174 条恰为此值) |
| 未压缩体积 | 288.4 MB(条目页)/ 302.4 MB(S3 清单) |
| 研究前缀 | Ga / Ju / Si |
| 双任务配对 | 27 人(患者 21、对照 6) |
| 单文件最多时次 | 7 次 |
| 身高单位 | Ju 为厘米,Ga 与 Si 为米 |
| 无对应数据文件的人口学行 | Juc010 |
11.2 可立即验证的疑问
- 174 条记录是否都是 121.17 秒:
for f in *.txt; do tail -1 $f | cut -f1; done | sort | uniq -c | sort -rn。若首行是 12117 计数 174,则 §2.3 与 §2.4 成立。 - 合力列是否真等于 8 枚之和:任取一文件,
awk '{s=0; for(i=2;i<=9;i++) s+=$i; d=$18-s; if(d>0.01||d<-0.01) print NR}'。若无输出则 §1.3 成立。 - 身高是否两种单位:看
demographics.txt里JuPt与GaPt两组的 Height 列量级是否差 100 倍。 Juc010是否无数据文件:ls | grep -i juc010。若为空则 §2.5 成立。- 步时与速度的相关是否为 −0.45 左右:算出每条记录的步时中位数,与
Speed_01求相关。若在 −0.4 至 −0.5 之间则 §2.8 成立。
11.3 证据链
§1:受试者数、传感器型号、采样率、传感器坐标、双任务描述均来自条目页 Data Description 与 format.txt。三项研究的对应论文在条目页 References 里。合力列的恒等关系由本页核对。
§2:文件数、体积、行数、时长分布、采样间隔、列数、研究分组、每人记录数、人口学字段完整度、身高单位、速度与步时相关,全部由本页解析 306 个文件与人口学表得到。条目页原话已引用。
§3:许可、DOI、体积来自条目页 Access 与 Files 两节。keys.txt 的用法与 S3 直连命令来自条目页与文件本身。
§4:三项研究的协议差异来自条目页与文件名规律。用药状态未记录、无跌倒结局属于本页对字段清单的核对结论,不是条目页的陈述。
§5:§5.1 的步事件检测、§5.2 的变异系数、§5.4 的双任务配对、§5.5 的极端值列表、§5.6 的左右差,全部由本页在 306 个文件上算得。阈值 50 牛顿与 0.2 至 3.0 秒间隔为编辑设定,不是上游规定。
§6:七条均基于前五节已核实的事实。
§7:与惯性传感器的对比为一般性论述;规模对比中除本数据外为量级描述。时代坐标来自文件时间戳与人口学表元数据。
§8:全部为方法学建议。§8.6 的判断基于患者 HY 分期分布(2.0 至 3.0),该分布来自人口学表。
§9–§10:编辑论述与术语约定。
编辑说明
本页写作过程中,对以下八项内容做了独立核对而非直接引用条目页:
- 列出 S3 对象清单,核对 312 个对象与 302.4 MB 总量;
- 下载全部 306 个数据文件,逐行统计行数、列数、时间轴起点与步长、列数异常;
- 核对第 18、19 列与同侧 8 枚传感器之和是否恒等;
- 统计时长分布与各研究分组的时长中位;
- 解析人口学表 166 行,按研究分组统计字段完整度,发现身高单位混用;
- 核对人口学编号与数据文件编号的对应,发现
Juc010无文件; - 在 306 个文件上跑步事件检测(50 牛顿阈值 + 0.2 至 3.0 秒间隔),重算步时与变异系数;
- 做 27 人双任务配对比较,并核对最慢五条记录的临床信息。
第 7 项的结果与本页引用的条目页数字(患者 2.7%、对照 1.3%)差一个量级,原因是本页未做去趋势处理。本页在 §5.2 与 §5.3 明确写出了这个差异及原因,未把两种方法的结果混为一谈。
数据获取方式:S3 直连 https://physionet-open.s3.amazonaws.com/gaitpdb/1.0.0/<文件名>,十六路并发,302 MB 约四十秒完成。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- ninapro — 共享标签:生理信号 / 步态与运动 / 神经科学
- ua-speech — 共享标签:生理信号 / 步态与运动 / 神经科学
- hd-semg — 共享标签:生理信号 / 步态与运动 / 评测基准
- consumer-grade-wearables — 共享标签:生理信号 / 评测基准 / 神经科学
- eeg-power-anesthesia — 共享标签:生理信号 / 评测基准 / 神经科学
- kinecal — 共享标签:生理信号 / 步态与运动 / 评测基准
- actes-cycloergometer-exercise — 共享标签:生理信号 / 步态与运动 / 评测基准
- accelerometry-walk-climb-drive — 共享标签:生理信号 / 步态与运动 / 评测基准
- ltrsvp — 共享标签:生理信号 / 评测基准 / 神经科学
- eegmmidb — 共享标签:生理信号 / 步态与运动 / 神经科学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

