太极新手与老手的十分钟 — taichidb 步态库

87 人 / 步态 + 肌电 / 1500 Hz

来源 https://physionet.org/content/taichidb/1.0.2/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 11
太极新手与老手的十分钟 — taichidb 步态库

信息速览

数据集名称太极新手与老手的十分钟 — taichidb 步态库
数据类型时序信号,波形,元数据,文献引用
规模87 人(60 名太极新手 + 27 名太极老手)
接入方式https://physionet.org/content/taichidb/1.0.2/
AI 就绪度

太极拳对老年人平衡与步态的好处,已经被几十项试验反复报告过。麻烦在于「好处」怎么量:跌倒次数、量表分、步速,这些终点都把一个人压缩成一个数,丢掉了步态在时间上的结构。复杂性科学给的是另一条路——把连续几百拍的步幅时间看成一条序列,用去趋势波动分析看它的长程相关,用多尺度熵看它的规则度,健康与衰老的差别就藏在这些统计结构里。

2011 年前后,哈佛医学院与贝斯以色列女执事医疗中心的一批研究者启动了这样一项研究。设计是两层的:一层是 60 人的随机对照试验,把从未练过太极、50 至 79 岁的居民分到六个月太极课或常规照护;另一层是 27 名练拳五年以上的老手,只做一次横断面测量,用来标定「长期练习者长什么样」。

2021 年 12 月,这项研究里的步态与肌电两部分以 taichidb 之名在 PhysioNet 上线,当前版本 1.0.2。它给的是 1500 Hz 的足底开关信号与两块下肢肌电,加一张十二列的受试者表;它不给的是心率、站立摆动、太极课的课程表,以及任何已经算好的复杂度指标。一屏速览见下表。

维度 内容
全名 Tai Chi, Physiological Complexity, and Healthy Aging - Gait
项目名 taichidb(PhysioNet 数据集短名)
发布方 PhysioNet(MIT 计算生理学实验室维护)
署名作者 八人:Wayne、Gow、Hausdorff、Peng、Lipsitz、Ahn、Novak、Manor
牵头机构 Brigham and Women’s Hospital 的 Osher 整合医学中心;Beth Israel Deaconess 参与
首次发布 2021 年 12 月 14 日,当前版本 1.0.2
研究设计 两臂随机对照试验 + 一层横断面专家对照
受试者 87 名:60 名太极新手,27 名太极老手
年龄范围 两组均为 50 至 79 岁
随访 新手在基线、三个月、六个月各测一次;老手仅基线
任务 单任务:自选步速行走十分钟;双任务:边走边连减三,九十秒
传感器 足底趾下与跟下力敏开关;胫前肌与腓肠肌外侧表面电极
采样率 两路均为 1500 Hz,肌电前置 500 Hz 低通
文件格式 WFDB 标准格式,按 Single-task 与 Dual-task 两个目录分开
附随表格 TCPCHA_Subjects.csv(十二列)、EMG_Subset.csv(分析子集)
许可 开放数据公署署名 1.0(ODC-BY 1.0),开放获取
DOI 10.13026/gq9q-rr81

§1 它要解决的具体麻烦

1.1 太极的好处,最后要落到一条时间序列上

老年医学里有一句常被引用的判断:衰老不是某个器官坏了,而是系统失去了适应波动的能力。心率太规则、摇摆变僵硬、步态节律变可预测,都是「复杂度下降」。要把它变成可测量的东西,就得找一条足够长、足够干净的序列,在上面算熵或算分形标度。

可用于这个目的的窗口至少有三个:逐拍心率、站立时的重心位移、逐拍的步幅时间。三者成本差别很大:心率要戴记录仪,站立要压力垫,步态只要一双装了开关的鞋和一条走廊。这项研究把重心放在步态上,理由不是它最能代表衰老,而是它最容易被反复测量。

复杂度窗口 采集方式 单次时长需求 场地要求 在本包中的状态
逐拍心率 心电 Holter 五分钟以上 无 未发布
站立摆动 测力台或压力垫 数十秒至数分钟 需固定平台 未发布
步幅时间 鞋内开关 + 走廊 十分钟 一条安静走廊 已发布

三个窗口只有第三个进了这个包。这不是遗漏,而是分层发布:试验同时测了三样,这一份只收步态与同步肌电。

步态这条路还有技术硬约束。去趋势波动分析要看到长程相关,序列得覆盖几百拍;按每拍一秒上下粗算,十分钟约六百拍。低于这个量级,标度指数会随窗口选择大幅摆动。十分钟不是随便定的,它是分析方法倒推出来的最低要求。

序列长度 可稳定估计的量 不稳定的量
数十拍 均值、标准差、变异系数 标度指数、多尺度熵
二三百拍 变异系数、自相关 长程标度指数
六百拍上下 标度指数、多尺度熵曲线 更长的跨尺度行为

这条约束解释了最反直觉的一处设计:让七八十岁的老人连续走十分钟,而不是走六米。临床评估习惯用短距离换可行性,这里反过来。代价直接落在采集现场。

代价 具体表现 官方应对
疲劳 后段步速可能下降 未说明是否校正
中断 走廊有人经过、设备松脱 允许拆成两段记录
场地 需要一条能连续走十分钟的走廊 记录走廊长度与往返圈数
分析 首尾瞬态影响标度指数 未给截取规则

1.2 三条常见的错误期待

第一条,把它当成 Taichi 编程语言的数据集。Taichi 是嵌入 Python 的图形与物理仿真语言,在图形学圈子里知名度不低,两个词根撞在一起很容易点错方向。这里没有任何图形内容,taichidb 是 Tai Chi Database 的缩写。

写法 指什么 出现在哪里
Tai Chi 太极拳 数据集全名
taichidb 数据集短名 PhysioNet 路径
Taichi 图形与物理仿真语言 计算机图形学

第二条,把它当成完整的「太极临床试验数据库」。全名里的 Physiological Complexity 会让人以为心率、血压、摆动都在里面。实际上主要终点有三个复杂度指标,本包只承载步态这一个窗口,另外两个窗口与全部量表都不在文件里。

第三条,把 27 名老手当成干净的病例对照。他们是横断面样本,只测一次,招募路径与 60 名新手不同,拳种与强度也未记录。拿他们与新手比,比出来的是「长期练拳者与不练者在这一时点的差别」,不是「练拳带来的变化」。后者要靠随机臂的三个随访点。

常见期待 实际是什么 依据
与 Taichi 编程语言相关 与图形学无关,Tai Chi 指太极拳 数据集全名
一份完整的临床试验库 只有步态与肌电两部分信号 页面摘要与发布说明
专家与新手可做因果对照 专家为横断面、单次、招募路径不同 页面方法段
打开就有算好的复杂度指标 只给原始信号,指标需自己算 发布说明未列派生文件

1.3 它能给到的与给不到的

你的需求 它给的 够不够
研究长期练拳者的步态节律 27 名老手,每人十分钟单任务 + 九十秒双任务 够,这是公开库里少见的「专家级」样本
研究太极训练六个月对步态的影响 60 人随机分组,基线、三个月、六个月 够做组内纵向,但终点需自算
研究认知负荷对步态的影响 单任务与双任务配对,同一人同一次到访 够,配对结构是这份数据最强的地方
研究下肢共收缩 胫前肌与腓肠肌外侧两路表面肌电 够,但只有两块肌肉、单侧
做步态事件检测算法 1500 Hz 足底开关原始信号 够,时间分辨率比常见鞋垫库高一个量级
做跌倒风险预测 无跌倒记录、无随访跌倒 不够,结果变量不在包里
做太极疗效的系统评价 无量表、无主要终点结果 不够,需回原论文
做多中心外部验证 单一中心、单一地区 不够,结构上不支持

这张表里最容易被高估的是第三行。配对只在同一名受试者的同一次到访内成立,跨到访、跨人的配对就要自己承担时间与状态的混淆。

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

你的处境 它能帮你什么 下一步该做什么
你在做步态节律的非线性分析,缺长序列 每人十分钟、1500 Hz,够算标度指数 先按 §4.1 的口径确认序列长度,再选窗口
你想验证双任务范式在老年人中的可行性 同一批人有单任务与双任务两套记录 用配对差值做分析,不要跨人合并
你在设计运动干预试验,需要选终点 有复杂度指标与传统步态指标的原始信号 先读 §4.5,判断肌电共收缩值不值得加进方案
你在做肌电去噪或活动段检测 1500 Hz 原始肌电,含静息与行走两态 用 §5.3 的读法先看一段波形再定阈值
你要给团队找一个「小而真」的教学样本 87 人、结构清晰、有配套论文 用 §4.3 的案例讲清命名规则
你想复现 2017 年那篇分形步态论文 该论文用的正是本包的单任务数据 按 §7.2 的子集口径对齐受试者

1.5 一句话判断

它是把一个横断面问题和一个纵向问题焊在同一份文件命名规则里的样本:练了多年的人和刚开始练的人走同一条走廊,只是前者只来一次。

1.6 不适合谁:四条边界

不适合把太极疗效当结论直接引用的人。 包里没有主要终点、量表与不良事件。要引「太极改善步态」,引原论文的结论,这份数据只是让结论可被重算的原料。

不适合做机器学习分类基准的人。 同一个人的多条记录高度相关:按记录随机切分,同一人的不同时点会分居两侧,指标虚高;按人切分,测试集只剩十几人,方差大到无法比较模型。

不适合研究跌倒的人。 全名里有 Healthy Aging,容易联想跌倒预防,但包里没有跌倒记录、没有前瞻随访、没有平衡量表。风险只能用步态变异间接推断,那是假设。

不适合需要双侧肌电或多肌群的人。 只有胫前肌与腓肠肌外侧,官方未说明哪条腿、是否双侧。拮抗肌对之外的分析,通道数不够。

边界 缺的东西 替代路径
疗效结论 终点计算、量表、不良事件 引原论文结论
分类基准 独立样本量、官方划分 只做留一人交叉验证
跌倒研究 跌倒记录、前瞻随访、平衡量表 改用步态变异性做间接指标
多肌群分析 三块以上肌肉、双侧通道 换用专门的肌电库

§2 数据构成与规格

2.1 三层切分:任务、人群、随访

整份数据的目录只做了一次切分——按任务。第一层是 Single-task,装十分钟正常行走;第二层是 Dual-task,装九十秒边走边连减三。人群与随访不体现在目录上,而是编码在文件名里。这个选择有明确后果:想按人群取数,必须先解析文件名;想按任务取数,直接进目录就行。

目录 内容 单条时长 说明
Single-task 自选步速平地行走 十分钟 复杂度分析的主数据
Dual-task 边走边口头连减三 九十秒 后续版本加入
根目录 受试者表与分析子集清单 不适用 两张 csv

人群分两层,是这项研究设计上最值得说的一点。随机臂的 60 人互为对照,组间差别来自随机分配;横断面的 27 人不参与随机,作用是给「练了多年」这个状态提供一个参照点。两层的统计地位完全不同,混在一起做检验是常见错误。

人群 人数 来源 测量次数 统计角色
太极新手(随机臂) 60 大波士顿社区招募 最多三次 组间比较与组内纵向
太极老手(横断面) 27 社区中的长期练习者 一次 参照点,不做纵向

随访是三个时点:基线、三个月、六个月,对应干预的中点与终点。老手没有随访,合并数据时若不显式处理,「六个月」这一层会凭空多出一批没有前序记录的人。

时点 新手 老手 含义
基线 有 有 干预前,两层人群在此可直接比较
三个月 有 无 干预中点
六个月 有 无 干预终点

2.2 文件与字段的完整字典

官方给出的命名规则是一行正则式的描述:新手写作 SXXX_KT_VY(_PZ),老手写作 SXXX_KT_master(_PZ)。五个位置里三个是变量、两个是固定字母。

片段 正则 说明
受试者 S(\d{3}) 三位数字
任务 (S 或 D)T 单任务或双任务
时点 V(\d+) 或 master 随访号或老手标记
分段 _P(\d+) 可选
位置 取值 含义 官方是否解释
SXXX 三位数字 受试者编号 是
K S 或 D 单任务或双任务 是
T 固定字母 官方未说明,按上下文推测与 task 有关 否
V 固定字母 官方未说明,位于随访号之前 否
Y 数字 随访号 是
master 固定词 替代随访号,标记老手 页面以命名式体现,未单独解释
_PZ 可选,P 加数字 分段记录的段序号 是

受试者表 TCPCHA_Subjects.csv 是唯一的表格型元数据,十二列。官方用一句话罗列了列的含义,没给列名清单、单位与取值编码。

列序 官方描述 推测含义 单位是否给出
1 受试者编号 与文件名前三位对应 不适用
2 组别归属 随机臂、对照臂或老手 未给编码表
3 年龄 入组时年龄 岁,未明写
4 性别 男或女 未给编码表
5 受教育年限 教育程度 年,未明写
6 体质指数 身高体重比 未明写
7 随访时点 基线、三个月或六个月 未给编码表
8 连线测验时间 执行功能测验耗时 未明写
9 类别流畅性 言语流畅性得分 未明写
10 走廊长度 单程距离 未明写
11 往返圈数 本次行走完成的圈数 圈
12 行走距离 总路程 未明写

第十到十二列构成一条可自校验的算术链:走廊长度乘往返圈数应接近行走距离,随手挑几行乘一下就能验。

EMG_Subset.csv 是第二张表,列的不是全部受试者,而是某篇已发表分析实际纳入的人。官方写明这篇分析排除三类人:五人失访、四人肌电缺失、两人开关损坏。

表 行数含义 用途 用错的后果
TCPCHA_Subjects.csv 一名受试者的一次到访 取人口学、认知、行走几何量 按人计数会重复
EMG_Subset.csv 一名被纳入肌电分析的受试者 复现已发表分析 用全表会多出十一人

2.3 一条记录的完整解剖

取一条名为 S001_DT_V3_P2 的记录做解剖。它是命名语法的直接实例,不含推测成分;对应的人物与测量值不在页面里,此处只用它讲结构。

S001_DT_V3_P2
 |   |  |  |
 |   |  |  +-- P2:这次采集被拆成两段,这是第二段
 |   |  +----- V3:第三个随访时点(六个月)
 |   +-------- DT:双任务(Dual-task),边走边连减三
 +------------ S001:受试者编号 001

四个字段各决定一件事,按顺序读一遍就够。

片段 取值 决定什么
S001 三位数字 属于哪名受试者
DT ST 或 DT 进哪个目录、单条多长
V3 或 master 时点或身份 在时间轴上的位置
P2 可选 这次采集是否完整

P2 最容易被忽略,也最容易被误处理。官方只说「存在因故需要分成两段记录的情况」,没说什么算「因故」,也没给两段之间的间隔。首尾相接会在序列里插进一段长度未知的空白;分段各自分析,九十秒又被切成两截,短到做不了节律统计。

情形 记录形态 可用分析 风险
单段完成 S001_DT_V3 全部 无
两段完成 S001_DT_V3_P1 与 _P2 分段描述、事件检测 拼接引入未知空白
老手 S001_ST_master 横断面比较 无随访上下文

同一名受试者的完整记录可以拼出一张时间表:新手最多六条,老手两条。它是后续分层分析的基础。

受试者类型 基线 三个月 六个月 合计上界
新手·单任务 SXXX_ST_V1 SXXX_ST_V3 SXXX_ST_V6 三条
新手·双任务 SXXX_DT_V1 SXXX_DT_V3 SXXX_DT_V6 三条
老手·单任务 SXXX_ST_master 无 无 一条
老手·双任务 SXXX_DT_master 无 无 一条

官方页面没有给出通道数,这是实际的接口缺口:读 WFDB 时通道数由头文件声明,写代码不能预设。按设计应含足底开关与两路肌电,但足底是两片还是四片、肌电是否双侧,页面均未交代。

#-- 典型 WFDB 头文件的三行结构(字段位置示意,取值为示例)
S001_DT_V3 4 1500 135000
S001_DT_V3.dat 16 1.0(0)/mV 16 0 0 0 footswitch
S001_DT_V3.dat 16 1.0(0)/mV 16 0 0 0 emg_tibialis

上例只说明字段顺序:第一行是记录名、通道数、采样率、每通道点数;后续每行声明一个通道的信号文件、存储格式、增益与单位、位深、初值、校验和、块大小、描述。实际取值以官方文件为准,不宜照抄。

2.4 规模:官方给的人数与未给的条数

这份数据的规模有两套口径:人数明确,条数空白。落差直接决定取数前必须先列目录。

项 官方是否给出 值
受试者总数 是 87
新手人数 是 60
老手人数 是 27
单任务时长 是 十分钟
双任务时长 是 九十秒
采样率 是 1500 Hz
记录总条数 否 未知
整包体积 否 未知
通道数 否 未知

没有总条数不妨碍把上界算出来。按设计,新手每人最多三个时点、每个时点两个任务;老手每人一个时点、两个任务。乘加之后是一个整齐的上界,实际条数只会更少——失访、拒测、设备故障都会减。

分层 人数 每人时点数 每时点任务数 上界条数
新手 60 3 2 360
老手 27 1 2 54
合计 87 不适用 不适用 414

四百一十四是上界,不是实际值。官方提到某篇肌电分析排除了十一人,说明这十一人至少到访过基线;但官方没说被排除者的记录是否仍留在包里,下界因此无法精确给出。

时长可以换算成点数,这是估算体积唯一可靠的路径:十分钟乘 1500 Hz 是九十万点,九十秒是十三万五千点。每点占几个字节取决于存储格式,官方未明写。

任务 时长 采样点数 单通道字节数(按两字节估算)
单任务 600 秒 900000 约 1.8 MB
双任务 90 秒 135000 约 0.27 MB

2.5 与同类资源的字段差异

放进公开步态资源的谱系,它的位置很清楚:采样率高、时长大、人群特殊、通道少。四件事同时成立,这种组合不多。

资源类型 典型采样率 典型时长 典型通道 与本包的差异
惯性传感器步态库 50 至 200 Hz 数十秒至数分钟 三轴加速度、角速度 本包无运动学,只有开关量
压力鞋垫步态库 50 至 100 Hz 六米至数十米 多分区压力 本包无压力幅值,只有着地时刻
测力台步态库 500 至 1000 Hz 数个步态周期 三维力与力矩 本包无动力学量
表面肌电库 1000 至 2000 Hz 数秒至数十秒 多肌群 本包时长更长,肌群更少
taichidb 1500 Hz 十分钟 足底开关 + 两块肌电 时长与采样率均为高位,维度最低

采样率的解释值得单独说。足底开关理论上不需要 1500 Hz,一毫秒的分辨率已远超步态事件尺度。需要它的是肌电:表面肌电能量集中在二十到五百赫兹,奈奎斯特下限就是一千赫兹。两路共用 1500 Hz,是为肌电定的。

指标 本包能不能算 需要什么额外信息
步幅时间及其变异性 能 无
摆动相、支撑相、双支撑 能 需自定着地判定阈值
步速 能,且可校验 走廊长度与圈数来自受试者表
步长、步宽 不能 无空间坐标
关节角度 不能 无运动学
肌电幅值 能 需自定归一化方式
共收缩指数 能 需选一种公式,官方未指定

最后一行最容易被忽视:官方只写「用肌电测共收缩」,没指定公式,而常用算法至少三种。

算法 口径 产出
比值型 拮抗肌幅值除以主动肌幅值 一个无量纲比值
重叠型 两块肌肉同时激活的时间占支撑相比例 一个时间占比
包络面积型 两条包络线的重叠面积除以外包面积 一个面积比

三种算法数值差别很大,却都能自称符合官方描述。写方法时把公式写清楚,比引一句官方描述更重要。

§3 它是谁的数据:八个人与两家医院

3.1 页面署名与论文署名不是同一份名单

页面列了八位作者,各附一个单位标签,指向三家机构:Brigham and Women’s Hospital 的 Osher 整合医学中心、Beth Israel Deaconess Medical Center,以及 Rush 大学与特拉维夫的两处。

署名 页面标注的单位 备注
Peter Wayne Osher 整合医学中心,Brigham and Women’s Hospital,哈佛医学院 第一作者
Brian Gow Beth Israel Deaconess Medical Center,哈佛医学院 同时是 PhysioNet 团队成员
Jeffrey Hausdorff Rush 大学;特拉维夫大学;特拉维夫 Sourasky 医学中心 唯一不在波士顿的署名
Chung-Kang Peng Beth Israel Deaconess Medical Center,哈佛医学院
Lewis Lipsitz Beth Israel Deaconess 老年医学部;Hebrew SeniorLife Marcus 老龄研究所
Andrew Ahn Beth Israel Deaconess Medical Center,哈佛医学院
Vera Novak Beth Israel Deaconess Medical Center,哈佛医学院
Brad Manor 哈佛医学院;Beth Israel Deaconess;Marcus 老龄研究所

把这份名单与页面指定的原始论文对照,会发现一个直接的差异。2013 年那篇设计论文署了十三人:Wayne、Manor、Novak、Costa、Hausdorff、Goldberger、Ahn、Yeh、Peng、Lough、Davis、Quilty、Lipsitz。数据页面只保留了其中八人,Costa、Goldberger、Yeh、Lough、Davis、Quilty 六人不在。

名单 人数 出处 差异
数据页面署名 8 PhysioNet 元数据 只保留部分作者
2013 年设计论文 13 Contemporary Clinical Trials 含统计与方法学作者
数据引用格式 8 页面的 BibTeX 与页面署名一致

两个口径并存,官方没有解释为什么只署八人。影响落在引用环节:按页面给的 BibTeX 会漏掉六位作者。引数据用页面格式,引研究设计用论文的完整列表。

八个署名背后是三种能力的拼接,分工可以从各自长期发表的方向看出来。

能力 相关署名 在这份数据里留下什么
步态与非线性分析 Hausdorff、Peng 十分钟时长、标度指数口径
运动干预与老年医学 Wayne、Lipsitz、Manor 两臂随机、三个随访点
信号工程与平台发布 Gow WFDB 格式、平台托管

三样凑齐,才有这份既有一千五百赫兹原始信号、又有六个月随访设计的数据。

3.2 从方案论文到数据上线,中间隔了八年

出版节奏不算快:2013 年方案论文发表时试验还在测量;2015 年出现双任务步态变异性的分析;2017 年出现分形标度分析;数据本体到 2021 年底才上传。

时间 事件 与本包的关系
2013 试验设计与原理论文发表 说明 60 人、两臂、三个时点的框架
2015 双任务步态变异性论文发表 双任务范式的分析先例
2017 步幅时间分形标度论文发表 单任务十分钟数据的首个完整分析
2021-12-14 数据集 1.0.2 版上线 含双任务与两路肌电
此后 无新版本 页面版本号停在 1.0.2

发布说明说这一版新增了九十秒双任务,并把两个任务的肌电一并纳入。更早的版本只有单任务步态,肌电与双任务都是后补的——这解释了为什么页面写双任务比单任务简略。

版本特征 早期版本 当前 1.0.2
单任务步态 有 有
双任务步态 无 有
单任务肌电 无 有
双任务肌电 无 有

3.3 伦理、注册与包里没有的东西

研究经两家医院各自的伦理审查委员会批准,随机对照试验在 ClinicalTrials.gov 注册,编号 NCT01340365。这两条是判断合规性的基础信息,页面写得很清楚。

项 内容 位置
伦理审查 两家医院各自的机构审查委员会批准 方法段
试验注册 ClinicalTrials.gov,NCT01340365 方法段
知情同意 页面未提供同意书文本 缺失
数据使用协议 无,按 ODC-BY 1.0 直接使用 许可段

缺失的那一栏值得注意:许可宽松不等于伦理信息完整。包里是去标识的信号与一张十二列的表,没有姓名、出生日期与住址;但也没有文件说明去标识的做法——编号与真实身份的映射由谁保管、保存多久,页面未提。对二次分析不构成障碍,对需要回访或 linkage 的研究则是硬约束。

项 是否在包里 后果
受试者编号 有 可跨文件对齐,不可回溯到人
出生日期 无 只能取年龄段
住址 无 只能取地区
知情同意文本 无 授权范围无法核验

3.4 一处必须读的利益声明

页面末尾的利益冲突声明写明:第一作者 Peter Wayne 是 Tree of Life Tai Chi Center 的创办人与唯一所有者,这一关系由 Brigham and Women’s Hospital 与 Partners HealthCare 按政策审查管理,其余作者无冲突。

项 内容
涉及人 第一作者 Peter Wayne
关系 一家太极教学机构的创办人与唯一所有者
处理方式 由所在医院按政策审查与管理
其余作者 声明无冲突

这条声明本身是透明的表现,不需要额外解读。它对使用者的意义在于读原论文结论时的分寸:一项由太极教学机构创办人主持、结论支持太极有益的研究,数据值得复用,结论值得复核,而复核的起点正是这份可以自己重算的原始信号。

§4 它为什么值得单独发布:四个设计选择

4.1 十分钟:为一个指数付的代价

多数临床步态研究走六米到三十米就停,十分钟在公开资源里属于长尾。官方把理由写在背景段:十分钟的单任务数据足够做去趋势波动分析,能看到跨几百拍的长程记忆效应。

因果关系很直白:不是先定十分钟再想能算什么,而是先要标度指数,再倒推时长。代价也直白——受试者要在走廊里来回走十分钟,中途可能遇到行人、因疲劳改变步速、或被叫停。官方用「分段记录」处理中断,而不是重测。

时长 大致拍数 能支撑的分析 主要风险
三十秒 约三十拍 均值、单步变异 无标度信息
两分钟 约一百二十拍 短期变异、自相关 标度指数不稳
十分钟 约六百拍 标度指数、多尺度熵 疲劳与中断

拍数是按每拍一秒上下粗估的量级,实际随人而异,具体数要自己从信号里数。

十分钟还带来一个附带好处:步速可以被独立校验。受试者表里有走廊长度、往返圈数、行走距离三列,三者构成一条闭合的算术链。走廊长度乘以圈数应当接近行走距离,两者之比除以时长就是步速。

列 作用 校验方式
走廊长度 单程距离 与圈数相乘得总路程
往返圈数 完成圈数 与走廊长度相乘
行走距离 总路程 应约等于前两列之积

这条链在短距离方案里没有意义:六米一趟,圈数恒为一。十分钟方案里它变成有信息量的字段。它也给了一个判断记录是否完整的旁证——信号明显偏短而圈数也偏少,更可能是提前终止。

步速本身也因此有三种算法,只有前两种在本包内可算。

算法 需要的列 本包可用
距离除以时长 行走距离、时长 可
走廊长度乘圈数再除以时长 走廊长度、圈数、时长 可,且能交叉验证
步幅时间与步长相乘的倒数 步幅时间、步长 不可,无步长

4.2 九十秒:把认知负荷压在步态上

双任务让受试者边走边口头连减三。九十秒比单任务短一个数量级,原因不在分析需求而在可行性:连减三对七八十岁的人是实打实的负荷,时间一长要么算错到接不下去,要么停下来站着算。

维度 单任务 双任务
指令 以平时步速行走 边走边口头连减三
时长 十分钟 九十秒
主要用途 节律与长程相关 认知负荷下的步态稳定性
分析单元 单条记录内部 同一人的两次记录配对

两个条件在同一次到访内完成,这是配对结构成立的前提。同一个人、同一天、同一双鞋、同一条走廊,唯一变化的是有没有做算术。这种配对比「两组人各做一种条件」强得多,因为它自动消掉了年龄、身高、习惯步速这些个体差异。

但配对也带来一个陷阱:两个条件的序列长度差一个数量级。想在两个条件之间比标度指数,会发现九十秒根本不够算。文献里常见的解法是比较变异系数,或者只在单任务上算标度、在双任务上算变异。

失败模式 现场表现 对分析的影响
停下专心算 步态信号出现长停顿 序列被切断
算错后重来 语速与步速同时波动 认知负荷不恒定
指标 单任务可用 双任务可用
平均步幅时间 是 是
步幅时间变异系数 是 是,但拍数少
去趋势波动标度指数 是 否,序列太短
多尺度熵 是 否
双任务代价(配对差) 需两个条件同时可用 需两个条件同时可用

4.3 案例:一条记录名里的四个字段

回到 §2.3 解剖过的那条 S001_DT_V3_P2。§2.3 讲的是它怎么拼出来,这里讲它能撑起多少种分层——这两件事不同,后者决定分析单元怎么定。

一条记录名编码了四个维度:人、任务、时点、分段。只有「人」是天然的独立单元,「任务」与「时点」是人内重复测量,「分段」是任务内再切。统计模型必须按这个层级写,否则会把重复测量当成独立样本。

维度 取值 层级 误当作独立样本的后果
受试者 001 至若干 最高层,独立单元 无
任务 单任务 / 双任务 人内重复 方差被低估
时点 基线 / 三个月 / 六个月 人内重复 时间效应被稀释
分段 无 / P1 / P2 任务内切分 序列被截断

S001_DT_V3_P2 这条记录在四个维度上都取了非默认值:它是双任务、第三个时点、第二段。这意味着它的分析价值最低——短、晚、还不完整。反过来,S001_ST_V1 是全套里信息最完整的一条:十分钟、基线、单段。

§4.3 的案例还说明了一件容易被忽略的事:文件名的排序不等于时间顺序。按字符串排序,S001_DT_V1、S001_DT_V3、S001_DT_V6 是顺序的,但 S001_ST_master 会排到 S001_ST_V1 之后,因为字母 m 排在数字之后。批量处理时若依赖目录返回顺序,会得到一张错位的时间表。正确做法是按解析出的数字字段排序,见 §5.5 的代码。

4.4 二十七名老手:一个不给随访的参照点

老手组回答的是「练得久的人长什么样」。这个问题不依赖随机化,只要一个横断面样本;但它回答不了「练了会不会变这样」,因为中间过程没被观察。

维度 新手 老手
人数 60 27
年龄 50 至 79 岁 50 至 79 岁
太极经历 过去五年无规律练习 至少五年,且当前在练
测量次数 最多三次 一次
随机化 有 无

两组年龄区间相同,是设计上的刻意对齐。它保证横断面比较不会被年龄差主导——若老手全是六十岁以下、新手全是七十岁以上,任何差异都可以用年龄解释,样本就白收了。

但年龄对齐不等于全部对齐。招募路径不同是最大的隐患:新手从社区来,老手从太极圈子里来。练太极的人在体质、健康意识、社会经济地位上可能与普通社区老人不同,而这些差异无法从十二列的表里完全看出来。教育年限与体质指数能校正一部分,校不干净的部分只能写进局限。

项 是否可比 理由
年龄区间 可比 两组同为 50 至 79 岁
招募路径 不可比 社区招募与太极圈招募
测量次数 不可比 最多三次与一次
太极强度 不可比 拳种与周频次未记录

4.5 两块肌肉:为什么是胫前肌与腓肠肌外侧

下肢有几十块肌肉,这里只取两块:胫前肌与腓肠肌外侧。这个选择对应一个明确的生理学问题——踝关节的背屈与跖屈是一对拮抗动作,胫前肌负责背屈,腓肠肌负责跖屈,两者同时激活就是「共收缩」。

肌肉 位置 主要作用 在步态中的角色
胫前肌 小腿前侧 踝背屈 摆动相抬足、着地前减速
腓肠肌外侧 小腿后侧外侧 踝跖屈、屈膝 支撑相推进

共收缩是关节刚度的代理指标:水平高则更稳但更耗能,低则效率高但控制要求高。老年人常用提高共收缩来补偿平衡下降,长期训练可能改变这个策略。这正是这项研究想看的机制。

指标 需要的信号 本包是否具备
单块肌肉激活起点 单路肌电 有
共收缩指数(比值型) 两路拮抗肌肌电 有
共收缩指数(重叠型) 两路肌电 + 包络 有
左右对称性 双侧同名肌 页面未说明
多肌群协同 三块以上肌肉 无

最后两行是边界。官方只说采集了胫前肌与腓肠肌外侧,没有说是哪条腿、是否两条腿都采。想算左右对称性的人先要确认通道数——这件事得打开头文件才知道。

前置假设 包内可否验证 说明
电极贴附位置一致 否 页面未给贴附位置与间距
单侧可代表双侧 否 通道数未知
静息基线可比 部分 需自行截取站定段

§5 怎么把数据取下来、读进来

5.1 页面的三块区域

数据集页面分成三块:上方是元数据(标题、版本、作者、许可、引用格式),中间是长文说明(摘要、背景、方法、数据描述、用法说明、发布说明、致谢、利益声明、参考文献),下方是文件区。文件区由脚本渲染,直接抓 HTML 只能拿到空壳。

区域 内容 抓取难度
元数据区 标题、版本、DOI、许可、引用 直接可读
说明区 摘要、方法、数据描述、用法 直接可读
文件区 目录树与下载按钮 需脚本渲染

这个结构解释了为什么「记录条数」在二手整理里常被写成未知:说明区确实没有这个数,只能在浏览器里打开文件区才知道。

5.2 先看清目录,再动手

目录只有两层,任务在上、记录在下。批量下载时建议保留层级,因为任务类型是关键变量,压平后要靠文件名反推。

层级 内容 数量
第一层 Single-task 与 Dual-task 两个
第二层 各条记录 未公布
根层 两张 csv 两个
#-- 逐文件抓取目录(目录列表需在浏览器中先接受条款)
mkdir -p taichidb && cd taichidb
wget -r -np -nH --cut-dirs=2 -R "index.html*" \
  "https://physionet.org/files/taichidb/1.0.2/"
#-- 先数一数拿到多少条
find . -name "*.hea" | wc -l

*.hea 是 WFDB 的头文件扩展名,一条记录一个。数头文件的个数是最省事的计条方式,比数信号文件可靠——信号文件的扩展名可能因存储格式而不同。

5.3 用 wfdb 读一条记录

Python 生态里读 WFDB 的标准工具是 wfdb 包。读取时不要预设通道数,先读头文件拿元信息,再决定是否加载全部信号。

#-- 只读头文件:先看清通道、采样率、点数,再决定要不要载入
import wfdb

rec_name = "taichidb/1.0.2/Single-task/S001_ST_V1"
hdr = wfdb.rdheader(rec_name)
print("采样率", hdr.fs)
print("采样点数", hdr.sig_len)
print("通道数", hdr.n_sig)
print("通道名", hdr.sig_name)
print("时长(秒)", hdr.sig_len / hdr.fs)

十分钟约九十万点,四个通道全载入约三百六十万个浮点。批量处理宜逐条读、只存派生量。

载入方式 内存量级 适用
全部通道全时长 数百万浮点 单条精读
单通道全时长 数十万浮点 事件检测
只读头文件 可忽略 批量盘点
函数 作用 何时用
rdheader 只读头文件 先探结构
rdrecord 读头文件加信号 需要波形时
rdrecord(..., sampto=n) 只读前 n 点 调试时
rdrecord(..., channels=[0]) 只读指定通道 省内存

5.4 读受试者表

受试者表是唯一的结构化元数据,读进来第一件事是看列名与形状,而不是直接按位置取列。官方描述用的是自然语言,实际列名可能与描述不同。

#-- 先看原样子,再按官方描述的顺序改名
import pandas as pd

subj = pd.read_csv("taichidb/1.0.2/TCPCHA_Subjects.csv")
print(subj.shape)
print(list(subj.columns))

#-- 官方按顺序描述了十二列;实际列名以文件为准,此处仅示意顺序
cols = ["subject_id", "group", "age", "sex", "education", "bmi",
        "visit", "trail_making", "category_fluency",
        "hallway_length", "laps", "distance"]
if len(subj.columns) == len(cols):
    subj.columns = cols
print(subj.head())

if 这层判断不是多余的:列数不符时直接改名会把列义错位,而错位不报错,只在下游悄悄污染结果。

列 类型 常见误用
组别 类别 当成数值做回归
随访时点 类别 当成连续时间
性别 类别 未确认编码就筛
受教育年限 数值 未确认单位就标准化

5.5 批量把文件名解析成表

文件名是唯一把三条信息(人、任务、时点)绑在一起的地方,解析它是所有分层分析的第一步。用正则按命名语法写,能把非法文件名挡在外面。

#-- 按官方命名语法解析,无法匹配的进 bad 列表而不是静默丢弃
import re
from pathlib import Path
import pandas as pd

pat = re.compile(r"^S(\d{3})_(S|D)T_(V(\d+)|master)(?:_P(\d+))?$")
rows, bad = [], []

for p in Path("taichidb/1.0.2").rglob("*.hea"):
    m = pat.match(p.stem)
    if not m:
        bad.append(p.name)
        continue
    rows.append({
        "subject": int(m.group(1)),
        "task": "single" if m.group(2) == "S" else "dual",
        "visit": m.group(4) if m.group(4) else "master",
        "part": int(m.group(5)) if m.group(5) else 1,
        "path": str(p),
    })

idx = pd.DataFrame(rows).sort_values(["subject", "visit", "task", "part"])
print(idx.shape, "无法解析", len(bad))
print(idx.head())

三个排序键的顺序不能换:先按人聚合同一人的记录,再按时点让基线在前,最后按任务与分段。若按路径字符串排序,master 会插到 V1 与 V3 之间。

排序键 作用 排错的后果
受试者 聚合同一人的记录 跨人混排
时点 恢复时间顺序 基线与随访倒置
任务 区分条件 单双任务混算
分段 段内有序 拼接顺序错

5.6 校验与降采样

先校验再做分析。WFDB 头文件带校验和,wfdb 读取时会顺带核对,失败即抛错,比看文件大小可靠。

#-- 校验全库:逐条读头文件,失败的记录下来而不是中断
import wfdb
from pathlib import Path

ok, bad = 0, []
for p in Path("taichidb/1.0.2").rglob("*.hea"):
    try:
        wfdb.rdheader(str(p.with_suffix("")))
        ok += 1
    except Exception as e:
        bad.append((p.name, str(e)[:60]))
print("可读", ok, "异常", len(bad))

官方写明记录是原始 1500 Hz,可按需降低。降到多少取决于算什么:步态事件一百赫兹足够,肌电中频段能量至少要留到五百赫兹以上。

校验手段 能查出什么 查不出什么
头文件校验和 传输损坏 语义错误
通道数与点数 截断 采样质量
三列几何量互乘 表列错位 记录归属
目标分析 建议采样率 理由
着地事件时刻 100 Hz 事件尺度在毫秒以上
步幅时间序列 100 Hz 由事件推导,与采样率无关
肌电包络 500 Hz 保留到低通截止附近
肌电频谱 1500 Hz 原样 降采样会折叠高频

§6 与同库其他数据资源的关系

6.1 关系图谱

这份数据的位置由三个坐标定出:人群(健康老年人)、信号(足底开关加肌电)、设计(干预试验加横断面)。同库其他步态资源大多落在前两个坐标上,很少有第三个。

关联类型 典型资源 与本包的关系
同门步态节律库 神经退行性疾病步态库 同为长时程步幅序列,人群换成患者
同门步态变异库 老年步态与跌倒研究库 同样关注变异性,无干预设计
帕金森病步态库 分区压力步态库 人群不同,信号更细
肌电资源 各类表面肌电库 本包肌群少,但带步态同步
运动干预资源 各类运动训练数据集 本包有随机化,样本偏小

用一句话概括这个位置:它是「步态节律库」这条线上唯一带随机干预设计的一条,也是「运动干预库」这条线上唯一提供毫秒级原始信号的一条。

坐标 本包取值 同类常见取值
人群 健康老年人,含长期运动者 患者或青年健康人
信号 开关量 + 两路肌电 惯性传感器或多分区压力
设计 随机对照 + 横断面 单次横断面
时长 十分钟 数十秒

6.2 检索路径

找它有三条路:按人群(老年、运动干预)、按信号(肌电、足底开关)、按设计(随机对照)。三条路都指向同一条记录,说明标签覆盖比较完整。

检索词 命中强度 原因
步态、肌电 强 直接对应信号类型
太极、运动干预 强 对应设计
跌倒、平衡 弱 无对应字段
检索意图 关键词 命中理由
找老年人步态长序列 老年、步态、长时程 十分钟记录
找带肌电的步态数据 肌电、表面肌电、同步采集 两路肌电与步态同步
找运动干预的客观终点 运动干预、随机对照、太极 两臂设计与三个月、六个月随访
找双任务范式 双任务、认知负荷、连减 单双任务配对
找非线性步态分析素材 分形、标度指数、熵 序列长度满足要求

反过来,若检索词是「跌倒」「平衡」「量表」,命中率会很低——这三个词在这份数据里都没有对应的字段。这不是收录问题,是内容边界。

§7 质量评估与局限性

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

评价这份数据之前,先要把一件事摆正:它不是一份为机器学习准备的数据集,而是一项临床试验的原始信号存档。用「标注是否齐全」「类别是否均衡」「是否有官方划分」这套尺子去量它,会得出全面不及格的结论,而这个结论是错位的——它本来就不打算被那样用。

真正对应它设计意图的问题是另外几个:信号是否足以重算原论文的结论?分层信息是否足以还原分析单元?许可是否允许二次发布派生结果?三个答案都比较正面。误判来自拿错尺子,不是数据有缺陷。

评价尺子 适用对象 用在本包上的结论
标注完整性 监督学习数据集 不适用,本包无标注任务
类别均衡 分类基准 不适用,两层人群非分类标签
官方划分 竞赛数据集 不适用,无训练测试划分
信号可重算性 原始信号存档 合格
分层可还原性 观察性研究数据 合格,需解析文件名
许可清晰度 任何公开数据 合格,ODC-BY 1.0

7.1 DAIMS 五维评分

按 DAIMS 五维框架打分,每维二十分,满分一百。框架把可发现、可获取、可互操作、可复用、可引用分开评,避免用一句「好不好用」带过。分数是相对同类资源的水平,不是绝对结论。

维度 得分 依据 扣分点
可发现 15 有 DOI、有平台页、被两篇论文指名 名称与编程语言撞词,检索易跑偏
可获取 13 开放获取、免注册、许可宽松 文件目录对匿名客户端返回 403,需浏览器会话
可互操作 17 信号走 WFDB 标准格式,工具链成熟 受试者表无列名规范、无单位
可复用 14 原始信号完整、分层信息可还原 通道数与总条数未公开,分段规则缺失
可引用 18 DOI 稳定、试验有注册号、论文可引 数据页面无独立数据论文
合计 77 — —

七十七分里,扣得最重的是可获取与可复用。可获取的问题不在许可,而在取数路径:页面标注开放获取,但脚本直接请求文件目录会拿到 403,得先在浏览器里接受条款。对一次性下载无所谓,对自动化流水线则要提前处理。

可复用的问题更实质:信号完整,描述信号的那一层却空着,动手前做不了容量规划。

缺失项 影响 补救
通道数 无法预估内存 读头文件
通道名 不知哪路是肌电 看描述字段
记录总条数 无法预估下载量 列目录计数
表列名 无法按名取列 按官方顺序对照
分段规则 无法还原连续信号 分段单独分析

7.2 三个可以并排放着的口径

第一处是版本与内容。版本号 1.0.2、发布日期 2021 年 12 月 14 日,发布说明却说这一版「新增双任务与肌电」。两者不冲突:一个指当前文件集,一个指增量。

口径 说法 含义
版本号 1.0.2 当前文件集的标识
发布日期 2021-12-14 该版本上线时间
发布说明 本版新增双任务与肌电 相对上一版的增量
试验方案 2013 年发表 设计定型时间

第二处是人群的单位。摘要写「60 名太极新手」与「27 名太极专家」,方法段重复同一组数。但页面从未说 60 人里有多少完成了六个月随访;失访只在用法说明里以另一个语境出现——某篇分析排除了五名失访者。60 是入组数,不是完成数。

第三处是肌电子集的边界。用法说明写明某篇分析排除三类人共十一人,并以 EMG_Subset.csv 给出纳入名单。这份名单是那篇论文的分析集,不是本包全部受试者:当全集用会高估规模,当子集用会复现不出论文数字。

口径 覆盖范围 适用场景
全库 全部受试者的全部记录 自行设计分析
EMG_Subset.csv 某篇论文的纳入者 复现该论文
摘要中的 60 与 27 入组人数 描述研究规模

7.3 已知的、可枚举的偏差

这里的偏差指结构性、来源可查的偏移,不是缺陷清单。每条都能在方法部分写一句限定,不必推翻整个分析。

偏差 来源 影响方向
单中心 波士顿两家医院 设备、走廊、人员一致,外推受限
健康志愿者 入组要求能连续行走 重症与体弱者缺席
年龄上限 79 岁 入组标准 八十岁以上无覆盖
老手来自太极圈 招募路径 健康意识可能系统性偏高
失访 六个月随访 完成者可能比退出者更健康
无合并症记录 未采集 无法校正多病共存
无用药记录 未采集 无法校正影响步态的药物
种族构成未入表 未采集 偏差大小不可评估

最后一行值得单独说。表里有年龄、性别、教育、体质指数,没有种族、收入与居住环境。社区样本在族裔上不会均匀,具体构成却无法从包里得知,跨人群外推因此缺一个分母。

性别也有技术细节:只有一列,编码方式页面未给。若是文字尚可直接用,若是 0 与 1,哪个指男需要回查原论文。这类小事的代价是把一整列做反。

可校正 不可校正
年龄、性别、体质指数 招募路径
教育年限 太极年限与拳种
随访时点 用药与合并症
字段 已知 未知
性别 有该列 编码方式
教育 有该列 单位与分级
体质指数 有该列 计算口径
认知测验 有连线与流畅性两列 常模与记分范围

7.4 外部验证矩阵

判断可信度,除了看它自己,还要看有没有别人用出过一致结论。下表按指标列出包内自洽检查与包外证据类型。

指标 包内自洽检查 包外独立证据 状态
步速 走廊长度乘圈数对上距离 与同类老年样本量级一致 可交叉
步幅时间均值 与步速倒数关系合理 多个老年队列有报告 可交叉
步幅时间变异系数 单双任务方向一致 双任务通常升高 可交叉
标度指数 与序列长度敏感性可查 有专门方法学文献 需谨慎
共收缩指数 无内部参照 公式不统一,难直接比 不可交叉

「需谨慎」的那行是标度指数。它是整份数据最想支撑的指标,也最依赖预处理:去趋势阶数、窗口范围、是否去除首尾瞬态,每一项都改数值。原论文给过口径,但口径在论文里不在数据里。

「不可交叉」的那行是共收缩。同一份肌电按不同公式能算出差别很大的指数,而每种都能自称符合官方描述。

检查类型 能做到什么 做不到什么
三列几何量互乘 验证记录完整性 验证受试者身份
同名受试者跨时点比对 验证纵向一致性 验证干预依从性
单双任务配对差 验证任务效应方向 验证效应大小

7.5 它为何能持续:靠一个 DOI 与一层不再变动的存档

它不需要作者维护:一项已结束试验的原始信号被固定下来,挂在有长期托管承诺的平台上,给一个稳定 DOI。信号不更新、版本停在 1.0.2,这既是局限,也是它一直被引用的原因。

第二个原因是它占的位置没有替代品。公开库里带随机干预设计的步态数据本来就少,带毫秒级原始信号与双任务配对的更少。

持续因素 机制 脆弱点
稳定标识 DOI 加平台托管 平台迁移会改 URL
内容冻结 版本停更 错误无法被修正
位置稀缺 少见的设计组合 出现同类新库即分流
论文锚定 两篇分析论文指名 论文影响力衰减

§8 生态位与历史

8.1 一条从复杂性科学通向临床的路径

放回学科脉络看,路径是清晰的:先有描述复杂系统的数学工具(熵、分形标度),再有能被这套工具描述的生理信号(步幅时间序列),最后有一个能改变它的干预(太极训练)。三者凑齐才有这项研究。

阶段 年代 关键进展 与本包的关系
工具成型 1990 年代 生理信号的非线性分析普及 提供标度指数与熵
对象确定 2000 年前后 步幅时间的分形结构被反复报告 确立十分钟量级需求
干预设计 2013 两臂随机对照加横断面 定型 60 人与 27 人
分析发表 2015、2017 双任务与分形两篇分析 给出用法示例
数据上线 2021 版本 1.0.2 发布 原始信号公开

这条路径有个副作用:工具先于对象,数据设计在很大程度上被工具牵着走。十分钟是为了标度指数,九十秒是因为分析上只需要短序列,肌电同步是因为共收缩要时间对齐。换一套范式来看,它对某些问题并不友好——比如想研究步态对称性,就没有双侧通道。

8.2 与同门几个步态库的分工

同一批资源里,步态类数据集已有若干。分工不按人群分,而按「留什么、扔什么」分。

库 采样率 单条时长 人群 主要取舍
神经退行性疾病步态库 300 Hz 五分钟 三种患者加对照 留长序列,扔空间信息
分区压力步态库 100 Hz 约两分钟 帕金森病加对照 留压力分区,扔连续时长
本包 1500 Hz 十分钟 健康老年人与长期运动者 留时长与肌电,扔空间与压力

三个库放在一起是一条取舍曲线:采样率越高、时长越长,能留的维度越少。

想回答的问题 该选哪个库 理由
长程相关是否随疾病改变 神经退行性疾病步态库 患者组齐全,序列够长
足底压力分布是否异常 分区压力步态库 有分区压力
运动干预是否改变共收缩 本包 唯一带肌电与干预
老年人双任务代价 本包 唯一带配对双任务

8.3 太极研究缺的那一类终点

太极拳研究长期依赖三类终点:跌倒次数、量表分、计时起立行走。各有短板——事件计数要大样本与长随访,量表带主观性,功能测试只给一个数。

终点类型 典型工具 短板 本包是否提供
事件计数 跌倒日记 需大样本、长随访 否
量表 平衡信心量表等 主观、天花板效应 否
功能测试 计时起立行走 只给单一数值 否
节律指标 步幅时间序列 需长记录、需专用分析 是

第四类终点正是这份数据补上的位置。它不替代前三类,而是提供一类客观、连续、可重算的量:把「练了太极之后走路更稳」这句临床印象,翻译成「标度指数从多少变到多少」的可检验命题。

8.4 谁在用它,以及用法的两种典型

官方用法说明点了两篇分析。第一篇用去趋势波动看步幅时间的长程标度,按意向性分析纳入全部单任务数据;第二篇看共收缩与步幅变异、步速,在两种条件下比较,排除了十一人。

分析 用到的子集 方法 排除规则
分形标度分析 全部单任务数据 去趋势波动分析 无,按意向性分析
共收缩分析 EMG_Subset.csv 肌电共收缩加变异性 失访、肌电缺失、开关损坏

两篇的差别不在方法,而在排除规则:第一篇一人不排,第二篇排了十一人。对复现者这是最实际的一道坎——同一份数据,按两个口径能得到两个样本量。官方把两个口径都写出来,等于承认它们服务不同目的,而不是其中一个错了。

官方没有提供下游使用统计,页面不显示引用计数,也不维护案例列表。想估计用量,只能去文献库按数据集名或 DOI 检索。

§9 使用指引

9.1 三种角色的路径

同一份数据,三类人打开它的方式完全不同。临床研究者关心分组与终点,工程师关心信号与格式,教学者关心结构是否讲得清。

角色 先看什么 最短路径 最容易踩的坑
临床与康复研究者 摘要与方法段 读受试者表,按组分层 把横断面老手当干预结果
信号处理工程师 文件区与头文件 读一条记录,量通道与采样 预设通道数导致解包错位
教学者 命名规则 用一条记录讲四层结构 讲成「太极治病」的结论

第三类角色的坑最值得提醒。名字里带太极,课堂上很容易被讲成「运动有效的证据」;它其实是「怎么把运动效果变成可测量信号」的案例。

角色 前置知识 上手成本
临床研究者 分层与随访 读一次表
工程师 WFDB 与信号处理 读一条记录
教学者 命名规则 一节课

9.2 一条最短的可用流程

从零到能算出一个变异系数,最短的路径是六步:下载、列目录、读一条头文件、读受试者表、解析文件名、算指标。

#-- 第一步:取数(目录列表需先在浏览器中打开)
mkdir -p taichidb && cd taichidb
wget -r -np -nH --cut-dirs=2 -R "index.html*" \
  "https://physionet.org/files/taichidb/1.0.2/"
find . -name "*.hea" | wc -l
#-- 第二到第六步:读一条、定位人、算指标
import wfdb
import numpy as np
from pathlib import Path

rec = wfdb.rdrecord("taichidb/1.0.2/Single-task/S001_ST_V1")
print(rec.fs, rec.sig_len, rec.n_sig)

#-- 取开关通道,找着地沿:先看幅值范围再定阈值
sw = rec.p_signal[:, 0]
thr = (np.nanmax(sw) + np.nanmin(sw)) / 2
edges = np.where((sw[:-1] < thr) & (sw[1:] >= thr))[0]
strides = np.diff(edges) / rec.fs

print("着地次数", len(edges))
print("平均步幅时间", round(float(np.mean(strides)), 3))
print("变异系数", round(float(np.std(strides) / np.mean(strides)), 3))

代码有两处依赖实际文件:通道序号 0 假设第一通道是开关,阈值取幅值中位。两者都要先看波形再定。这也是 §4.3 的案例要强调的——文件名说这是哪条记录,头文件才说里面装了什么。

步骤 产出 依赖
下载 目录树 浏览器接受条款
列目录 记录条数 头文件扩展名
读头文件 通道、采样率、点数 无
读受试者表 分组与随访 列顺序
解析文件名 分层索引表 命名语法
算指标 每人每任务一个值 阈值设定

9.3 引用方式

页面给了标准引用格式,并明确要求同时引用 2013 年的原始论文。这是数据引用与研究引用分开的典型做法,两者缺一不可。

#-- 数据引用(页面给出的 BibTeX)
@article{PhysioNet-taichidb-1.0.2,
  author = {Wayne, Peter and Gow, Brian and Hausdorff, Jeffrey and
            Peng, Chung-Kang and Lipsitz, Lewis and Ahn, Andrew and
            Novak, Vera and Manor, Brad},
  title = {{Tai Chi, Physiological Complexity, and Healthy Aging - Gait}},
  journal = {{PhysioNet}},
  year = {2021},
  month = dec,
  note = {Version 1.0.2},
  doi = {10.13026/gq9q-rr81}
}
#-- 研究设计引用(页面指定的原始论文)
Wayne PM, Manor B, Novak V, Costa MD, Hausdorff JM, Goldberger AL,
Ahn AC, Yeh GY, Peng CK, Lough M, Davis RB, Quilty MT, Lipsitz LA.
A systems biology approach to studying Tai Chi, physiological
complexity and healthy aging: design and rationale of a pragmatic
randomized controlled trial. Contemporary Clinical Trials.
2013;34(1):21-34. doi:10.1016/j.cct.2012.09.006
引用场景 引什么 是否需加注册号
只用了数据 数据 DOI 否
用了数据并复现设计 数据 DOI 加 2013 论文 建议
讨论干预效果 2013 论文加分析论文 建议
方法学比较 数据 DOI 加方法学原文 否

§10 AI 使用声明

项 说明
文本生成 本篇由 AI 辅助撰写,结构与措辞经人工校订
事实来源 全部事实取自 PhysioNet 数据集页面与页面指定的论文摘要
数字核对 人数、时长、采样率、许可、DOI 逐项对照官方页面原文
未核实项 通道数、记录总条数、整包体积官方未公布,文中标注为未知
推断标注 上界条数、拍数、体积均为按结构的推算,文中已注明推算而非官方
代码 示例代码按公开 API 编写,未在真实文件上逐行执行
图像 封面为按提示词生成的示意图,不含真实照片与人物
责任 最终解释与使用判断由使用者承担,本篇不构成医学建议

常见误读

说法 实际 证据
这是 Taichi 编程语言的数据 与图形学无关,Tai Chi 指太极拳 数据集全名与摘要
里面有心电与平衡数据 只有步态与肌电 摘要与发布说明
60 人是完成随访的人数 60 是入组人数,完成数未公布 摘要写 60 名入组,用法说明另提失访
27 名老手可以当干预后结果 老手只测一次,且未接受干预 方法段写明仅基线测量
双任务也是十分钟 双任务只有九十秒 数据描述段
采样率是 300 Hz 或 100 Hz 两路信号均为 1500 Hz 方法段
肌电采了下肢多块肌肉 只有胫前肌与腓肠肌外侧 方法段
有训练前后的对照录像或课程表 只有信号与一张表 发布说明未列其他文件
可以直接拿来做分类基准 无标注任务、无官方划分 页面无划分说明
分段记录可以首尾拼接 段间间隔未知 命名规则只说分两段,未给间隔

FAQ

Q1:taichidb 到底是不是太极拳的数据?
是。全名里的 Tai Chi 就是太极拳,taichidb 是平台短名。研究者把长期练拳者与从未练拳者放进同一套采集方案,看步态与肌电有什么不同。

Q2:为什么只有步态和肌电,心率去哪了?
心率与站立摆动也是试验的主要终点,但这批公开文件只收了步态与同步肌电。发布说明列的就是这两部分。需要心率的分析得另找来源。

Q3:十分钟会不会太长,老人走不下来?
这是拿可行性换统计稳定性。官方用「分段记录」应对中断,文件名里的 P1 与 P2 就是为此准备。代价是分段后序列变短,段间关系不明。

Q4:单任务与双任务能直接比标度指数吗?
不能。十分钟与九十秒的序列长度差一个数量级,标度指数在短序列上不稳。可比的量是均值、变异系数与配对差值。

Q5:老手组的意义是什么?
给出「练了很多年的人长什么样」的横断面参照。它不能回答练拳会不会带来变化,只回答练拳者与不练者在这一时点的差别。

Q6:受试者表里的组别怎么用?
这一列给出随机臂与横断面组的归属。做干预效果分析只用随机臂的 60 人;做横断面比较把老手单独拿出来,不要混进组间比较。

Q7:可以商用吗?
可以。许可为开放数据公署署名 1.0,允许商用与再分发,条件是保留署名、标明是否修改。派生特征另行发布时应写清基于哪个版本。

Q8:怎么知道一共有多少条记录?
官方没写,只能列目录数。一条记录对应一个头文件,数头文件最省事。按设计推算的上界在四百条上下。

Q9:肌电是左腿还是右腿?
页面没有交代。头文件的通道描述字段可能写了,也可能只写肌肉名。做单侧分析前必须先确认。

Q10:为什么共收缩指数不能跨研究比?
因为公式不统一。比值型、重叠型、包络面积型算出的量纲都不同,官方只写了用肌电测共收缩。比较前要先对齐公式。

Q11:这份数据还会更新吗?
版本停在 1.0.2,发布于 2021 年 12 月,此后再无发布说明。试验已结束,信号不会再增加,引用时写明版本号即可。

术语表

术语 英文 解释
太极新手 Tai Chi naïve 过去五年无规律太极练习的入组者
太极老手 Tai Chi expert 练拳五年以上且当前在练的参照组
单任务 single task 只做行走,不附加认知任务
双任务 dual task 边走边做口头连减三
连减三 serial subtraction 从一个数起每次减三并念出结果
力敏电阻 force sensitive resistor 受压后电阻变化的薄膜元件
足底开关 footswitch 装在鞋内、按着地与否输出两态的装置
表面肌电 surface EMG 贴于皮肤表面记录肌肉电活动
胫前肌 tibialis anterior 小腿前侧肌肉,负责踝背屈
腓肠肌外侧 lateral gastrocnemius 小腿后侧肌肉,负责踝跖屈
共收缩 co-contraction 一对拮抗肌同时激活的现象
步幅时间 stride time 同侧足相邻两次着地之间的间隔
变异系数 coefficient of variation 标准差除以均值,无量纲
去趋势波动分析 detrended fluctuation analysis 估计序列长程相关标度的方法
标度指数 scaling exponent 去趋势波动分析输出的指数
多尺度熵 multiscale entropy 在多个时间尺度上度量序列规则度
生理复杂度 physiological complexity 系统输出中不规则性的总量
意向性分析 intention to treat 按随机分组分析,不剔除退出者
随访时点 visit 基线、三个月、六个月三个测量点
分段记录 recording part 一次采集被拆成两段时的段标识
头文件 header file WFDB 中声明通道与采样参数的文本文件
WFDB Waveform Database 生理信号的标准存储与工具链格式
开放获取 open access 无需申请即可下载,与许可宽松是两件事

附录 A:核心数字核对表

项 值 来源 来源层级
受试者总数 87 摘要中两组人数相加 官方页面(加总)
太极新手 60 摘要与方法段 官方页面
太极老手 27 摘要与方法段 官方页面
年龄范围 50 至 79 岁 摘要与方法段 官方页面
老手练拳年限 至少五年 摘要 官方页面
单任务时长 十分钟 方法段 官方页面
双任务时长 九十秒 方法段 官方页面
采样率 1500 Hz 方法段 官方页面
肌电低通 500 Hz 方法段 官方页面
随访时点 基线、三个月、六个月 摘要 官方页面
随机分组 两臂,干预与常规照护 摘要 官方页面
每臂人数 各 30 2013 年设计论文 论文摘要
版本 1.0.2 页面版本号 官方页面
发布日期 2021-12-14 页面 官方页面
许可 ODC-BY 1.0 页面许可栏 官方页面
DOI 10.13026/gq9q-rr81 页面引用区 官方页面
注册号 NCT01340365 方法段 官方页面
记录总条数 未知 页面未公布 未核实
通道数 未知 页面未公布 未核实
整包体积 未知 页面未公布 未核实

附录 B:数字的来源分层

层级 定义 本篇中的例子
一级:官方页面 PhysioNet 页面原文直接给出 60 与 27、十分钟、九十秒、1500 Hz、许可、DOI
二级:论文摘要 页面指定论文的摘要给出 两臂各 30 人、主要终点为三类复杂度指标
三级:按结构推算 由已知结构做算术,未获官方确认 上界四百一十四条、单任务约九十万点、体积量级
未核实 页面与论文均未给出,本篇标注为未知 记录总条数、通道数、整包体积、分段间隔

分层是为可追责:某个数字与官方不符时,可回到对应层级核对——一级错在抄写,二级错在理解,三级错在推算前提。

附录 C:完整参考文献

编号 文献 用途
1 Wayne PM, et al. A systems biology approach to studying Tai Chi, physiological complexity and healthy aging. Contemporary Clinical Trials. 2013;34(1):21-34. doi:10.1016/j.cct.2012.09.006 设计、人数、终点
2 Wayne PM, et al. Tai chi training may reduce dual task gait variability. Frontiers in Human Neuroscience. 2015;9:332 双任务分析先例
3 Gow BJ, et al. Can Tai Chi training impact fractal stride time dynamics. PLoS ONE. 2017;12(10):e0186212 单任务分形分析
4 数据集本体,版本 1.0.2. PhysioNet. doi:10.13026/gq9q-rr81 全部结构信息
5 Hausdorff JM. Gait dynamics, fractals and falls. Human Movement Science. 2007;26(4):555-589 标度指数的方法学背景
6 数据集页面所列去趋势波动分析工具包,PhysioNet 软件区 复算标度指数

前三条是页面要求引用的文献,第四条是数据本身,后两条是方法学背景。顺序建议按数据、设计论文、分析论文、方法学排。

场景 引哪几条
只用数据 4
复现分析 4 加 1
讨论疗效 1 加 2 或 3
方法学比较 4 加 5

附录 D:任务代码

#-- 把十分钟切成不重叠窗口,粗算每窗拍数,判断标度指数是否可算
import numpy as np

def window_strides(strides, fs_note=""):
    """输入逐拍时长数组(秒),返回窗口统计与总拍数"""
    s = np.asarray(strides, dtype=float)
    s = s[np.isfinite(s) & (s > 0.2) & (s < 3.0)]
    total = int(s.size)
    out = {
        "beats": total,
        "mean": round(float(s.mean()), 4) if total else None,
        "cv": round(float(s.std(ddof=1) / s.mean()), 4) if total > 2 else None,
        "ok_for_dfa": total >= 300,
    }
    return out

demo = np.full(600, 1.05) + np.random.default_rng(0).normal(0, 0.03, 600)
print(window_strides(demo))
#-- 生成一份按人、按时点、按任务排序的清单,供后续批量处理
python3.11 - <<'PY'
import re
from pathlib import Path

pat = re.compile(r"^S(\d{3})_(S|D)T_(V(\d+)|master)(?:_P(\d+))?$")
rows = []
for p in sorted(Path("taichidb/1.0.2").rglob("*.hea")):
    m = pat.match(p.stem)
    if m:
        rows.append((int(m.group(1)), m.group(4) or "master", m.group(2), str(p)))
rows.sort(key=lambda r: (r[0], r[1] == "master", r[1], r[2]))
with open("manifest.tsv", "w", encoding="utf-8") as f:
    for r in rows:
        f.write("\t".join(map(str, r)) + "\n")
print("写出", len(rows), "行")
PY

第一段判断记录够不够算,第二段把文件系统整理成可排序的表。r[1] == "master" 这个布尔键保证老手记录排在数字时点之后,而不是插在中间。

附录 E:如果只记五件事

序号 要点 为什么重要
1 Taichi 指太极拳,与编程语言无关 检索时最容易跑偏的一步
2 87 人:60 名新手加 27 名老手 决定所有分层分析的分母
3 十分钟单任务加九十秒双任务 决定能算什么、不能算什么
4 1500 Hz,足底开关加两块肌电 决定预处理与降采样的下限
5 只给原始信号,不给终点与量表 决定它只能当原料,不能当结论

第五条最容易被跳过:前四条能从摘要抄到,第五条要读完发布说明才明白——这是一份没有结论的数据,价值在于让别人自己算出结论。

编辑说明

本篇的事实部分来自 PhysioNet 数据集页面(2026 年 10 月 28 日访问,HTTP 200)与页面指定的 2013 年设计论文摘要,未下载全量信号逐条统计。数值凡属推算均在正文标注为推算;凡官方未给出者列入附录 B 的「未核实」层。封面为生成式示意图,不含真实影像。文中代码按公开 API 编写,通道序号与阈值需按实际文件调整。若官方后续更新版本,以页面版本号为准。


相关数据集导航

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

  • ltmm — 共享标签:生理信号 / 步态与运动 / 可穿戴传感 / 队列研究
  • minute-level-step-count-nhanes — 共享标签:生理信号 / 步态与运动 / 队列研究
  • ppg-dalia — 共享标签:生理信号 / 步态与运动 / 可穿戴传感
  • culm — 共享标签:生理信号 / 步态与运动 / 可穿戴传感
  • nesfdb — 共享标签:生理信号 / 步态与运动 / 可穿戴传感
  • plantar — 共享标签:生理信号 / 步态与运动 / 可穿戴传感
  • wearable-device-dataset — 共享标签:生理信号 / 步态与运动 / 可穿戴传感
  • semg-gait-31subjects — 共享标签:生理信号 / 步态与运动 / 可穿戴传感
  • cgmacros — 共享标签:生理信号 / 可穿戴传感 / 队列研究
  • big-ideas-glycemic-wearable — 共享标签:生理信号 / 可穿戴传感 / 队列研究

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

返回 AI-Ready 数据集