信息速览
跌倒风险这件事,临床上一直用两种办法估:让老人在走廊里走一段、掐个秒表,或者问他过去一年摔过几次。前者只看到十分钟内状态最好的一次行走,后者依赖记忆与定义。两种办法都不看真实的暴露量——一个人一天究竟走了多少步、步态的节律稳不稳、什么时候活动、什么时候静止。
LTMM 把这段空白补上。它让 71 位社区居住的老人把一只惯性传感器别在腰后,连续戴三天,洗澡游泳时取下,取下和戴回的时点自己写进日记。同一批人还在实验室做了一整套跌倒风险量表与一分钟步行测试。三天里的一举一动,配上一份可以对照的临床底稿,这就是它全部的内容。
名字里的 long term 容易被误读。它指的是时间跨度,不是模态:这里没有一秒心电,全部是腰部六个通道的加速度与角速度。把它和 ltdb、ltstdb 放在一起看会更清楚——三者共享的只有 PhysioNet 的命名习惯,研究对象一个在心脏,一个在步态。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Long Term Movement Monitoring Database |
| 常用缩写 | LTMM |
| 建设机构 | 特拉维夫大学 Sackler 医学院与 Sagol 神经科学学院 |
| 提交者 | Jeffrey M. Hausdorff |
| 上线时间 | 2016 年 6 月 20 日,版本 1.0.0 |
| DOI | 10.13026/C2S59C |
| 受试者 | 71 位社区居住老人,65–87 岁 |
| 分组 | 40 位非跌倒者(CO)、31 位跌倒者(FL) |
| 主记录 | 每人一条连续三天记录,共 71 条 |
| 附记录 | LabWalks 子目录 73 条实验室步行记录 |
| 佩戴位置 | 腰后 |
| 通道 | 三轴加速度 + 三轴角速度,共 6 路 |
| 采样率与量化 | 100 Hz、16 位 |
| 文件格式 | WFDB:.hea + .dat;临床与日记为 .xlsx |
| 单条体积 | 约 309 MB(三天满程) |
| 整库体积 | 未压缩 20.8 GB |
| 许可 | ODC-BY 1.0,无需注册 |
| 引用论文 | Weiss 等,Neurorehabil Neural Repair,2013 |
§1 它要解决的具体麻烦
1.1 一次十分钟的测试,测不出三天里的衰落
老年医学评估跌倒风险,标准做法是量表加短距离步行。起立行走计时让受试者从椅子上站起来走三米再回来,Berg 平衡量表让人做十几个静态与动态姿势,动态步态指数看人在变速与转头时还能不能稳住。这些工具经过几十年验证,重复性好,二十分钟能做完。
问题在于它们测的是「今天、此刻、在有人在旁边看着的走廊里」的表现。一个人在诊室里的步态,和他早上起床去厨房、下午下楼买菜、晚上在客厅里踱步的步态,不是同一件事。三天的连续记录把观察窗口从十分钟拉到一个完整的活动周期,暴露量、疲劳累积、昼夜节律这些在短测试里看不见的变量,第一次变得可计算。
更深一层的问题是可重复性。量表分数在同一天内重复施测,误差相对可控;但把它当作一整个月的状态代表,误差就没人估过。一个人这周膝盖疼、下周睡眠差,量表只在他状态好的那天记录了一个数字。连续记录不能消除这种波动,但能把它显出来:同样是 75 岁,有人三天里每天走八千步,有人一天走两千步、另外两天几乎不动,两者的量表分数可能一模一样。
1.2 三条常见的错误期待
第一条,把它当成心电长时程库。PhysioNet 上以 long term 开头的库大多和心电有关,ltdb 与 ltstdb 都是。LTMM 跟它们没有任何数据上的交集,名字接近纯属命名习惯。第一次打开头文件、看到 v-acceleration 而不是 ECG1 时,这个误解会自然消失。
第二条,把它当跌倒检测数据集。库名里有 fall risk,分组也按跌倒史划分,很容易让人以为里面有跌倒瞬间的标注。实际上三天记录期内没有任何事件标注,连「这一刻他摔了」的时点都没有。它测的是风险因素,不是事件。
第三条,把它当高精度步态实验室数据。100 Hz 的采样率对日常活动足够,对步态的精细相位划分不够;腰部单点佩戴能反映整体节律,测不到关节角度;没有光学动作捕捉,也没有足底压力。它的分辨率是「日常生活」这一级的,不是「生物力学」这一级的。
这三条期待有一个共同的根源:把库名里的 movement 读成了它想读的东西。做心电的人读到 long term,做事件检测的人读到 fall,做生物力学的人读到 gait。三类人各自把库名补全成自己领域的名词,然后在打开文件时失望。判断一个库适不适合,最省时间的办法是直接看头文件第一行与目录里有没有注释文件,三秒钟就能排除掉大半误会。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 自由生活条件下的活动量与步数 | 三天连续加速度,可自行切段计数 | 够,且是它最主要的用途 |
| 步态节律的稳定性指标 | 垂直轴功率谱的主频幅宽,论文即用此口径 | 够,需要自己实现 |
| 与临床量表的对照 | 29 列量表与人口学字段,逐人可连 | 够,是最省事的部分 |
| 跌倒风险的前瞻验证 | 论文报告了六个月随访,但数据表未含随访结局 | 不够,需向作者索取 |
| 跌倒事件检测 | 无事件标注、无时间戳 | 不够,换数据集 |
| 步态相位与关节角度 | 腰部单点、100 Hz | 不够,需要多传感器或光学系统 |
| 穿戴依从性与佩戴时长建模 | 日记表逐日记录取下时点与原因 | 够,这类数据很少见 |
| 跨人群泛化 | 单一中心、71 人、全部 65 岁以上 | 不够,只能做域内结论 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在做可穿戴步态算法,只有实验室数据,缺真实生活段 | 71 人×3 天的自由生活信号,含洗澡取下造成的自然断点 | 先用 §9.2 的流程读通一条,再批量提取特征 |
| 你要验证「三天指标优于十分钟测试」这类主张 | 同一批人身上同时有两种测量,变量天然配对 | 复现论文的垂直轴一致性指标,再换自己的特征 |
| 你想研究佩戴依从性,缺真实的摘戴记录 | 日记表按天记录取下时点与原因,含游泳洗澡这类场景 | 把日记的分数时点换算成秒,与信号缺口对齐 |
| 你在给老年队列做数字表型,需要公开底座 | 量表齐全,MMSE、MoCA、TUG、BBS 都在 | 注意分组是自报,别把 CO/FL 当金标准 |
| 你手上有一台新设备,想找公开数据做对照 | 100 Hz、六通道,与多数消费级 IMU 同档 | 先做轴向与单位的对齐,再谈精度 |
| 你要写综述,需要一个人口学清晰的实例 | 单中心、纳排标准明确、时间线干净 | 引用时写清 2016 年版与 71 人 |
1.5 一句话判断
它不是用来训练跌倒预测模型的语料,而是用来回答「三天和十分钟究竟差在哪」的一组对照实验:同一批人、同一套量表、两种观察窗口。
1.6 不适合谁:四条边界
不适合把它当训练集。 71 人、单一中心、二分类标签,任何一个带隐层的模型都能在几百轮内把训练集背下来。它的规模适合做特征验证与假设检验,不适合做端到端学习。
不适合做跌倒检测。 没有事件标注,没有时间戳,也没有跌倒前后的窗口。哪怕只想做「近似跌倒」的检测,也拿不到真值。
不适合做临床诊断结论。 分组靠自报,量表是筛查工具,佩戴只有三天。任何从这份数据推出的「某人跌倒风险高」的判断,都不构成医学意见。
不适合代表一般老年人群。 纳排条件明确排除了卧床、认知障碍(MMSE 低于 24)与既往步态平衡障碍诊断者。能自己出门、能听懂指令、能连续戴三天设备的老人,本身就是人群中的一个子集。
§2 数据构成与规格
2.1 一个库由四种东西组成
主目录下是 71 组同名文件,每组两个:.hea 是纯文本头文件,.dat 是二进制信号本体。这是 WFDB 的经典两件套,与心电库的差别只在于少了 .atr 注释文件——本库没有逐事件标注,所以也没有注释文件。
LabWalks 子目录里是 73 组同样的两件套,命名规则是小写的受试者编号加 _base 后缀。这些是实验室里那段自选速度步行的记录,长度只有几十秒,用来把「实验室表现」和「三天表现」对齐。
根目录另有两个表格。ClinicalDemogData_COFL.xlsx 装临床与人口学,三个工作表:非跌倒组、跌倒组、以及一张指标释义表。ReportHome75h.xlsx 装佩戴日记,一位受试者一行,横向铺开三天,每天四列。最后一个 RECORDS 是纯文本清单,71 行主记录加 73 行 LabWalks 路径。
1.0.0/
├── RECORDS #-- 144 行清单:71 条主记录 + 73 条 LabWalks
├── ClinicalDemogData_COFL.xlsx #-- 29 列量表,两个分组工作表
├── ReportHome75h.xlsx #-- 佩戴日记,逐日四列
├── CO001.hea / CO001.dat #-- 非跌倒者,40 组
├── FL001.hea / FL001.dat #-- 跌倒者,31 组
└── LabWalks/
├── co001_base.hea / .dat #-- 实验室步行,73 组
└── fl001_base.hea / .dat
2.2 字段与记录的完整字典
| 位置 | 字段 | 含义 | 取值示例 |
|---|---|---|---|
| 文件名 | 分组前缀 | CO 为非跌倒者,FL 为跌倒者 | CO / FL |
| 文件名 | 受试者编号 | 三位数字,组内独立编号 | 001 |
.hea 第 1 行 |
记录名 | 与文件名一致 | CO001 |
.hea 第 1 行 |
信号条数 | 固定 6 | 6 |
.hea 第 1 行 |
采样率 | 每秒采样点数 | 100 |
.hea 第 1 行 |
采样点总数 | 每条信号的采样点数 | 17141698 |
.hea 信号行 |
存储格式 | 16 表示 16 位整型 | 16 |
.hea 信号行 |
增益与基线 | 每单位物理量的整数刻度,括号内为基线 | 5594.5611(120)/g |
.hea 信号行 |
单位 | 加速度为 g,角速度为度每秒 | /g /degrees/s |
.hea 信号行 |
初始值 | 第一个采样点的整数 | 10729 |
.hea 信号行 |
校验和 | 全段累加和,可验完整性 | 0 |
.hea 信号行 |
通道名 | 三轴加速度与三轴角速度 | v-acceleration |
.hea 注释行 |
年龄 | 与 # 开头的注释行同排 |
#Age:75.17 |
.hea 注释行 |
性别 | F 或 M | #Sex:F |
| 临床表 A 列 | 受试者编号 | 带连字符,与文件名对应 | CO-001 |
| 临床表 E 列 | 性别编码 | 1 为女,0 为男 | 1 |
| 临床表 F 列 | 年龄 | 带小数的精确年龄 | 75.167 |
| 临床表 G/H 列 | 跌倒次数 | 过去一年与过去六个月的自报次数 | 1 / 0 |
| 临床表 K–M 列 | 量表得分 | 平衡信心、SF-36、活动量表 | 88 |
| 临床表 N–P 列 | 认知筛查 | MMSE、MoCA、额叶评估 | 29 |
| 临床表 S–V 列 | 体能测试 | 起立行走、四格步进、Berg、动态步态指数 | 8 |
| 日记表 | 佩戴时点 | 以一天的小数表示,需乘 86400 换秒 | 0.56319 |
| 日记表 | 摘戴事件 | 文字描述,常写原因 | swimming and shower |
| 日记表 | 设备序列号 | 列名写作 hybrid serial | 2088 |
2.3 一条记录的完整解剖
取 CO001,头文件八行,前六行是信号声明,后两行是人口学注释:
CO001 6 100 17141698
CO001.dat 16 5594.5611(120)/g 0 0 -16 10729 0 v-acceleration
CO001.dat 16 5637.2473(136)/g 0 0 96 18803 0 ml-acceleration
CO001.dat 16 5517.1923(192)/g 0 0 -5603 -28221 0 ap-acceleration
CO001.dat 16 145.8539(-1152)/degrees/s 0 0 -1124 3453 0 yaw-velocity
CO001.dat 16 141.7616(-1261)/degrees/s 0 0 -883 -9724 0 pitch-velocity
CO001.dat 16 141.5523(633)/degrees/s 0 0 634 -26911 0 roll-velocity
#Age:75.17
#Sex:F
首行的四个数是记录名、信号条数、采样率、采样点总数。把末位数除以 100,再除以 3600,得到 47.6 小时——这位受试者的记录明显短于协议要求的三天。日记表里她的备注列写的正是 47h,两处对得上。
六行信号里,前三行是加速度,单位 g,增益在五千多到一万多之间不等;后三行是角速度,单位度每秒,增益只有一百四十上下。增益差异说明每台设备出厂时单独标定过,跨记录直接套用同一个换算系数会算错物理量。
读一条记录只需要三行:
import wfdb
#-- 远程直读,不落盘;pn_dir 指向 PhysioNet 上的库名
rec = wfdb.rdrecord('CO001', pn_dir='ltmm')
print(rec.fs, rec.sig_len, rec.sig_name)
#-- 100 17141698 ['v-acceleration', 'ml-acceleration', 'ap-acceleration',
#-- 'yaw-velocity', 'pitch-velocity', 'roll-velocity']
print(rec.p_signal.shape, rec.units)
p_signal 已经按增益换算成物理量,加速度列的单位是 g,角速度列是度每秒。想拿原始整数要用 d_signal,两者相差数千倍,混用不会报错,只会得到一条平直的线。
2.4 三个记录族的规模与结构
| 记录族 | 条数 | 命名 | 时长 | 单条体积 | 通道 |
|---|---|---|---|---|---|
| 主记录·非跌倒组 | 40 | CO + 三位编号 |
约 41–75 小时 | 约 177–309 MB | 6 |
| 主记录·跌倒组 | 31 | FL + 三位编号 |
约 24–75 小时 | 约 103–309 MB | 6 |
| 实验室步行 | 73 | 小写编号 + _base |
38–56 秒 | 约 1.5–6.7 MB | 6 |
主记录的体积上限卡在 309.0 MB,这个数字对应约 74.8 小时的满程记录:六通道、100 Hz、16 位,每秒 1200 字节,一天 103.7 MB,三天满程正好落在这个量级。体积明显偏小的那些,是佩戴时长不足或中途终止——跌倒组的 FL009 只有 102.8 MB,折合约 24 小时,比协议短了两天。实验室步行的采样点数在三千八到五千六之间,换算成时长是 38 秒到 56 秒,而官方页面写的是「步行一分钟」。两个口径并存,官方未解释差额。
三个记录族之外,主目录里还有三个带后缀的重复文件(CO028_n、CO029_n、CO038_2),体积与对应主记录接近,RECORDS 清单未把它们列为独立记录。它们像是同一受试者的重测或补录,官方页面没有说明用途。
2.5 六个通道与它们的物理意义
| 通道名 | 物理量 | 单位 | 与步态的关系 |
|---|---|---|---|
v-acceleration |
垂直方向加速度 | g | 每步的冲击与推进,节律性最强 |
ml-acceleration |
内外侧加速度 | g | 重心左右摆动,与平衡相关 |
ap-acceleration |
前后方向加速度 | g | 加减速,与步速相关 |
yaw-velocity |
绕垂直轴角速度 | 度每秒 | 转身动作,与转向稳定性相关 |
pitch-velocity |
绕横轴角速度 | 度每秒 | 躯干前后倾 |
roll-velocity |
绕前后轴角速度 | 度每秒 | 躯干侧倾 |
六个通道给的是一个刚体在三维空间里的运动,而不是某一关节的角度。这决定了它的分析范式:能算整体活动量、节律性、姿态变化与转身,算不了步长、支撑相占比、关节屈伸。论文用的四个指标全部落在这个能力范围内——活动总时长、步数、主频幅值、主频宽度。
2.6 三个字段空缺与它们的后果
| 空缺 | 官方是否说明 | 后果 |
|---|---|---|
| 传感器型号与固件 | 未说明 | 无法判断量程与噪声底,跨设备对齐缺参照 |
| 佩戴朝向与轴向定义 | 只给通道名 | 换设备时须先做重力方向校准 |
| 跌倒事件时间戳 | 明确未提供 | 事件检测类任务无法在本库完成 |
这三个空缺不是疏漏,而是设计取向:库的目标是提供「自由生活运动量 + 临床底稿」,不是提供一台可复现的测量仪。要复现论文,六通道足够;要把结论搬到另一台设备上,缺的正是型号与朝向这两条。
2.7 LabWalks 与主记录不是一一对应
两个记录族的编号不是同一套。主记录有 CO001 到 CO044 之间的 40 个编号,实验室步行有 co001 到 fl039 之间的 73 个编号,两者交集并不完整。
| 情形 | 例子 | 对分析的意味 |
|---|---|---|
| 两族都有 | CO001 与 co001_base | 可做实验室与日常的配对 |
| 只有实验室步行 | fl037、co033 | 该人没完成三天佩戴 |
| 只有主记录 | CO012、CO037 | 该人没做实验室步行或文件缺失 |
| 同一人多条 | CO028 与 CO028_n | 疑似重测,用途未说明 |
配对之前先取交集,是最省事的做法。按「71 对 71」写循环,会在遇到缺号时抛异常;按「有主记录就一定有 LabWalks」做假设,会在 CO012 这类编号上静默丢数据。稳妥的做法是先把两边编号各自成集合,取交集后再进入分析,并把丢弃的编号记录下来。
这一节与 §4.3 的案例直接相关:CO001 恰好属于「两族都有」的情形,所以它能同时用来说明时长不一致与步行时长偏短这两个问题,是验证管线时最省事的一条记录。
§3 它是谁的三天:一间步态实验室的野外延伸
3.1 贡献者与机构
库由特拉维夫大学的 Jeffrey M. Hausdorff 提交,所属单位是 Sackler 医学院与 Sagol 神经科学学院。Hausdorff 长期研究步态与跌倒,工作重心是把步态从实验室指标变成可穿戴可计算的数字标志物,帕金森病与老年人群是他反复使用的场景。
这个背景解释了库的形状。它不是工程团队顺手放出的传感器日志,而是一个临床研究组把整套评估流程连同原始信号一起公开:量表、纳排标准、分组规则、佩戴日记,全都齐。对使用者来说,好处是上下文完整;代价是数据的组织方式跟着研究流程走,而不是跟着数据工程的习惯走。
3.2 时间线
| 时间 | 事件 | 依据 |
|---|---|---|
| 2013-06-17 | 引用论文在线发表 | 期刊 DOI 页 |
| 2016-05-19 | 主记录与 LabWalks 文件生成 | 目录文件时间戳 |
| 2016-06-14 | 头文件与 RECORDS 最后修改 |
目录文件时间戳 |
| 2016-06-20 | 1.0.0 版上线 PhysioNet | 官方页面版本信息 |
时间线只有四个点,最后一个是发布。此后十年没有新版本,页面上的版本列表只有 1.0.0 一行。这与很多持续维护的库不同:它是一次性交付,交付之后就不再变动。
3.3 采集场景:腰后的一只盒子,三天
受试者在实验室完成量表与步行测试后,把传感器别在腰后带回家,连续佩戴三天。协议允许在洗澡与游泳时取下,这也是日记表里出现频率最高的一类摘戴原因。三天结束回到实验室交还设备,同时交回手写的日记。
这个流程里有三个值得注意的细节。第一,佩戴位置固定在腰后,靠近重心,测的是全身的平移与转动,不是某一侧肢体。第二,佩戴时长不是硬性锁定的 72 小时,受试者自己决定什么时候取下、什么时候戴回,于是每条记录的实际长度不同,中间还有自然的缺口。第三,日记是纸质的,时点由受试者自己写,精度到分钟级,个别记录只写「傍晚」这类模糊描述。
还有一层不那么显眼的设计选择:实验室评估与三天佩戴发生在同一天。受试者先做完量表与步行测试,再带着设备回家。这个顺序意味着两件事——实验室数据不会被前一天的疲劳污染,但三天记录的第一段一定包含从医院回家的路程。这一段的活动量明显高于日常水平,做日间曲线分析时通常要把它剔掉,或者至少单独标记。
3.4 数据来源的三个层次
| 层次 | 内容 | 完整度 | 可信度 |
|---|---|---|---|
| 信号层 | 六通道 100 Hz 连续记录 | 71 条,缺口位置由日记间接标出 | 高,可校验和验证 |
| 量表层 | 29 列临床与人口学字段 | 71 行,个别单元格写 n/a | 中,筛查工具,非诊断 |
| 日记层 | 逐日摘戴时点与原因 | 71 行,时点精度不一 | 中低,自报且手写 |
三层的完整度依次下降,可信度也依次下降。信号是机器记的,量表是研究者测的,日记是人写的。做分析时把三层混在一起当作同等可靠,是这个库最容易犯的错误之一。
3.5 缺失的临床上下文值多少
库里有量表、有年龄性别、有跌倒次数,缺的是诊断、用药、合并症、随访结局。对做步态算法的人,这些缺的不影响;对想做临床预测模型的人,这些缺的每一条都致命。
具体说,三类工作会卡住。第一类是因果推断,想问「哪种药物影响步态稳定性」,没有用药字段。第二类是预后建模,想预测未来十二个月的跌倒,数据表里没有随访结局列,论文里提到的六个月随访结果没有随数据发布。第三类是共病分析,想控制糖尿病、关节炎、帕金森病的影响,一个诊断字段都没有。
所以它的定位应该说得准确一点:这是一个信号完整、量表齐全、结局缺失的库。信号与量表足够支撑方法学研究,结局的缺失把它挡在了临床预测研究之外。
§4 它最独特的东西:三天与十分钟的差值
4.1 为什么窗口长度本身就是一个变量
步态研究里有一个反复出现的现象:同一个人在不同时间尺度上的表现差异,往往比人与人之间的差异还大。十分钟的测试捕捉的是「能力上限」,三天的记录捕捉的是「日常实际」。两者之间的差值,本身就是一个有临床意义的量——它反映的是储备与使用之间的落差。
LTMM 的设计正好把这个差值做成了可比的形式:同一批人、同一天、同一套传感器,先测实验室的一段步行,再录三天的自由生活。这种配对在同族资源里不常见,多数自由生活数据集没有配套的实验室量表,多数量表数据集没有配套的连续信号。
4.2 自由生活的噪声结构与实验室完全不同
实验室步行的信号是干净的:直线、匀速、地面平整、无干扰。三天记录的信号里混着这些东西——起身坐下的冲击、上下楼的高低差、提东西造成的单侧负载、公交车的颠簸、以及大量根本不是步行的片段。
这带来一个工程上的硬约束:任何在三天数据上做的分析,第一步都是「把步行片段找出来」。这一步没有真值可依,只能靠加速度的周期性做启发式判断。不同的切段规则会给出差异很大的步数与活动时长,而论文里的四个指标全部依赖这一步。换句话说,这个库的性能上限,很大程度取决于使用者自己写的切段器。
4.3 案例:CO001 的四十七小时
CO001 是一位 75 岁女性,非跌倒组。她的记录在 47.6 小时处结束,比协议的三天短了一整天;日记表备注列写的就是 47h,两处一致。她的实验室步行记录只有 38 秒,明显短于官方描述的一分钟。
把这三件事放在一起看,能得到一个具体的方法学教训。如果按「三天」的假设去做切片,她的记录会在第 48 小时处被切成两段,第二段全是空的;如果按「一分钟步行」的假设去对齐实验室与日常生活,她的 38 秒会被截断。两个假设都来自官方页面的措辞,都会在这一个人身上失效。
§4.3 的案例还说明了另一件事:她的临床表里有几格写着 n/a,认知量表却有值。这意味着缺失是按单元格发生的,不是按人行发生的。做批量处理时按行删除会误伤,必须逐列判断。
在 §7.3 的偏差表里,这个案例对应「协议时长与实际时长不一致」这一条;在 §9.2 的最短流程里,它被用作第一条验证记录,因为它的记录短、体积小、问题典型。
4.4 三天能测什么,测不到什么
| 能测 | 依据 | 测不到 | 原因 |
|---|---|---|---|
| 日间活动总量与分布 | 三天连续加速度 | 精确步长 | 腰部单点,无足部信号 |
| 步态的节律一致性 | 垂直轴功率谱 | 支撑相与摆动相 | 采样率与佩戴位置 |
| 转身次数与角速度 | 三轴角速度 | 关节角度 | 无多段惯性链 |
| 昼夜活动节律 | 跨三天的活动曲线 | 睡眠分期 | 无体动以外的生理信号 |
| 佩戴依从性 | 日记与信号缺口 | 跌倒事件 | 无事件标注 |
| 与量表的关联 | 逐人可连 | 因果效应 | 观察性设计、无干预 |
这张表的分界线很清楚:凡是「整体运动」层面的量,它都能给;凡是「局部力学」或「事件」层面的量,它都给不了。判断一个想法能不能落在这个库上,只要问一句「这个量需不需要知道是哪条腿」——需要,就走不通。
§5 怎么把三天搬回本地
5.1 三条获取路径
官方页面给了三种取法:网页逐文件下载、wget 递归镜像、以及 S3 兼容的匿名同步。三者拿到的内容完全一致,差别只在断点续传与并发。
| 路径 | 命令形态 | 适合 | 注意 |
|---|---|---|---|
| 网页逐文件 | 浏览器点击 | 只要一两条记录 | 20.8 GB 整包不建议走这条 |
| wget 镜像 | wget -r -N -c -np |
整库一次拉完 | -c 支持断点续传 |
| S3 同步 | aws s3 sync --no-sign-request |
反复增量更新 | 无需密钥 |
#-- 1. 先只取清单与两个表格,几百 KB,看清结构再决定下多少
BASE=https://physionet.org/files/ltmm/1.0.0
curl -sL "$BASE/RECORDS" -o RECORDS
curl -sL "$BASE/ClinicalDemogData_COFL.xlsx" -o ClinicalDemogData_COFL.xlsx
curl -sL "$BASE/ReportHome75h.xlsx" -o ReportHome75h.xlsx
wc -l RECORDS
#-- 2. 取一条记录验证读取链路,两个文件合计约 309 MB
for ext in hea dat; do
curl -sL "$BASE/CO001.$ext" -O
done
5.2 清单与命名
RECORDS 是一份 144 行的纯文本,前 71 行是主记录,后 73 行是 LabWalks/ 开头的路径。前半段大小写混杂:主记录用大写 CO、FL,实验室步行用小写。按大小写敏感的方式过滤,是最省事的分类办法。
import wfdb
from collections import Counter
names = wfdb.get_record_list('ltmm')
main = [n for n in names if not n.startswith('LabWalks/')]
lab = [n for n in names if n.startswith('LabWalks/')]
print(len(main), len(lab)) #-- 71 73
print(Counter(n[:2] for n in main)) #-- Counter({'CO': 40, 'FL': 31})
清单与目录的关系不是严格一一对应:LabWalks 里有若干编号在主记录中不存在,主记录里也有若干编号没有对应的实验室步行。做严格配对时,两边都要取交集,不能假设 71 对 71。
5.3 读一条记录并核对时长
import wfdb
import numpy as np
rec = wfdb.rdrecord('CO001', pn_dir='ltmm')
hours = rec.sig_len / rec.fs / 3600
print('%.1f h' % hours) #-- 47.6 h
#-- 物理量已按增益换算;加速度列单位 g,角速度列度每秒
x = rec.p_signal
print(x.shape, np.abs(x[:, 0]).max()) #-- (17141698, 6) 约 1.2 g
时长核对这一步值得单独做一次。协议写三天,实际从二十多小时到七十多小时都有,按 72 小时去规划切片会在这批记录上出错。写代码时把 sig_len 当作唯一权威,不要从文件名或页面描述推断。
5.4 读临床表并做列对齐
临床表有两个分组工作表,列结构相同,第三张是释义表。用 pandas 按表名读,再按受试者编号与信号记录连接。
import pandas as pd
f = 'ClinicalDemogData_COFL.xlsx'
co = pd.read_excel(f, sheet_name=0) #-- 非跌倒组
fl = pd.read_excel(f, sheet_name=1) #-- 跌倒组
both = pd.concat([co.assign(group='CO'), fl.assign(group='FL')], ignore_index=True)
both['rid'] = both['#'].str.replace('-', '', regex=False)
print(both.shape) #-- (71, 31),29 列原字段 + 分组 + 记录名
连接键的格式要注意:表里写成 CO-001,文件名是 CO001,去掉连字符才能对上。这张表里还有 n/a 与 N/A 两种大小写混排的空值写法,直接 astype(float) 会抛异常,需要先统一替换。
5.5 从三天里提取四个指标
论文用的是四个量:活动总时长、步数、垂直轴主频幅值、主频宽度。前两个靠切段,后两个靠功率谱。下面是最小实现,只演示口径,不追求与论文数值一致。
import numpy as np
from scipy.signal import welch
fs = 100
v = rec.p_signal[:, 0] - np.mean(rec.p_signal[:, 0])
#-- 用 5 秒窗的均方根做活动判定,阈值需按设备噪声底标定
win = 5 * fs
rms = np.sqrt(np.convolve(v ** 2, np.ones(win) / win, mode='same'))
active = rms > 0.02
print('active hours: %.1f' % (active.sum() / fs / 3600))
#-- 在活动段内做功率谱,取 0.5-3 Hz 步频带的主峰
seg = v[active][:10 * 60 * fs]
fr, px = welch(seg, fs=fs, nperseg=4 * fs)
band = (fr >= 0.5) & (fr <= 3.0)
i = np.argmax(px[band])
print('peak %.2f Hz, width %.2f' % (fr[band][i], np.std(px[band])))
这段代码有两点必须自己改:活动阈值取决于设备的噪声底,不同记录的增益不同,不能用一个常数;切段规则会直接决定步数与活动时长,写论文时要把规则写全,否则别人复现不出同一组数字。
5.6 体积与本地规划
六通道、100 Hz、16 位,每秒 1200 字节,每小时约 4.3 MB,一条满程记录约 309 MB。整库 20.8 GB,解压后占同样空间。
| 场景 | 数据量 | 建议做法 |
|---|---|---|
| 只跑通流程 | 0.3 GB | 只下一条记录 |
| 复现论文四个指标 | 20.8 GB | 整库下完,直接读 .dat 分块处理 |
| 提取特征后建模 | 约 1–2 GB | 逐条算特征存 CSV,原始信号不入模型 |
| 教学演示 | 0.3 GB | 用 CO001,短且问题典型(§4.3 的案例) |
内存是更现实的约束。一条满程记录按 float64 展开是 26.9M×6×8 字节,约 1.3 GB;批量处理时必须分块读,不能一次性 rdrecord 全库。
5.7 日记表的时点怎么换算
日记表的时点用「一天的小数」表示:0.5 就是中午十二点,0.56319 约等于十三点三十一分。要换成秒就乘 86400,要对齐信号就再乘采样率 100。这个格式来自 Excel 的时间序列化方式,不是作者自创,但直接读会得到一串看着像概率的浮点数。
| 列 | 内容 | 换算 |
|---|---|---|
| start | 当天开始的时点 | 小数 × 86400 = 当天第几秒 |
| events | 摘戴的文字说明 | 无结构,需人工归类 |
| took off | 取下的时点 | 同上 |
| put on | 戴回的时点 | 同上 |
| end time | 当天结束的时点 | 同上 |
三个坑要提前知道。第一,同一行里既有时点也有文字,pandas 读进来是 object 列,直接算差值会报错。第二,个别单元格写的是「傍晚」「某一刻」这类模糊描述,无法换算。第三,日期列在不同受试者之间不连续,跨受试者做时间轴对齐没有意义,只能按相对时间处理。
把日记的缺口与信号的缺口对上,是这个库独有的一次校验机会:日记说十三点三十分取下,信号在那一刻应该出现一段低方差段。对不上就说明日记记错了,或者设备没按预期工作。这一步做完,才能放心用信号缺口去估算佩戴依从性。
§6 与库内条目的关系
6.1 关系图谱
| 关系 | 库 | 连接点 | 差异 |
|---|---|---|---|
| 命名同族 | ltdb | 同用 long term 前缀,同在 PhysioNet | 心电、7 条、128 Hz,与本库无数据交集 |
| 命名同族 | ltstdb | 同用 long term 前缀,同属长时程 | 心电、86 条、250 Hz,另标 ST 与节律 |
| 同为可穿戴 | pamap2 | 都是惯性传感器日常活动记录 | 本库为老年自由生活三天,无动作类别标注 |
| 同为日常活动 | uci-har | 都是腰部手机或传感器信号 | 本库时长以天计,uci-har 以秒计 |
| 同为跌倒主题 | sisfall | 都围绕跌倒 | 本库只有风险分组,sisfall 有模拟跌倒事件 |
| 同为步态临床 | gaitndd | 都把步态与疾病分组绑定 | 本库分组是跌倒史,不是神经疾病诊断 |
三者的分工要说得更明确。ltdb 与 ltstdb 是心脏的长时程:一条记录是一次连续的心电监护,标注落在每一次心跳上,问题是「检测器能不能在几十小时里稳定工作」。LTMM 是身体的长时程:一条记录是一个人在家三天的整体运动,没有逐事件标注,问题是「日常活动里的运动特征与跌倒史有没有关系」。前两者的分析单位是心搏,后者的分析单位是人·天。
6.2 检索路径
在站内找同族资源,按名称匹配会漏,因为 long term 有连字符、无连字符、缩写三种写法。按标签与主题词检索更稳。
#-- 站内粗筛:按标签与主题词,而不是按库名
bash scripts/qf_psql.sh "select record_id, url_name, left(title,60)
from ai_ready_dataset
where category_tags && array['可穿戴传感','步态与运动']
order by record_id;"
import wfdb
#-- 确认官方清单的真实内容,避免凭记忆写记录名
names = wfdb.get_record_list('ltmm')
print(names[:3], len(names))
#-- ['CO001', 'CO002', 'CO003'] 144
判断一个库能不能做你的任务,先看它有没有 .atr。有注释文件的库才有逐事件真值;只有 .hea 与 .dat 的库,标签一定在别处——要么在文件名里,要么在附带的表格里。这一条对 PhysioNet 上所有 WFDB 格式的库都成立。
6.3 与其他长时程资源的分工判据
| 你的任务 | 首选 | 次选 | 判据 |
|---|---|---|---|
| 长时程心搏检测 | ltdb | ltstdb | 有逐搏标注,本库完全没有 |
| 心肌缺血事件 | ltstdb | 无 | 只有它标 ST 事件 |
| 老年自由生活步态 | ltmm | 无同规模替代 | 三天 + 量表 + 日记三件套 |
| 日常动作识别 | pamap2 | uci-har | 有动作类别标注,本库没有 |
| 跌倒事件检测 | sisfall | 无 | 有事件级真值 |
| 帕金森步态 | gaitndd | 无 | 分组按疾病,本库按跌倒史 |
6.4 三张库的规模差背后是什么
把 7、86、71 这三个数字并排放,很容易得出「LTMM 是中等规模」的结论。这个结论没有意义,因为三者统计的单位根本不同:ltdb 的 7 是 7 条连续心电,ltstdb 的 86 是 86 条连续心电,LTMM 的 71 是 71 个人各自的 71 条连续运动。
| 库 | 统计单位 | 单条时长 | 标签落点 | 由此决定的规模 |
|---|---|---|---|---|
| ltdb | 记录 | 14–24 小时 | 每次心搏 | 少而完整,够跑通流程 |
| ltstdb | 记录 | 21–24 小时 | 心搏 + 缺血事件 | 多,为了积累稀疏事件 |
| ltmm | 人 | 约 3 天 | 每个人一个分组 | 中等,为了做组间对照 |
第三行的逻辑与前两行不同:前两者靠增加记录数来积累「事件」,LTMM 靠增加人数来积累「人」。一个人只有一条三天记录,所以 71 条记录就是 71 个人,样本量与人数量相等。这一点在统计上很重要——它意味着可以做组间检验,但仍然做不了人群推断。
6.5 什么时候该放弃它
三种情形越早放弃越省时间。任务需要事件级真值,放弃;任务需要精细生物力学量,放弃;任务需要跨人群泛化,放弃。
反过来有三种情形它几乎无可替代:需要一个「三天 vs 十分钟」的配对设计;需要真实摘戴行为的记录;需要一个量表齐全、纳排清晰的老年自由生活样本。这三种都不依赖规模,依赖的是采集设计的完整度。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
先纠正一个容易发生的误判:把「没有事件标注」直接读成「标注质量差」。这个库的标注不在信号里,而在两张表里——分组写在文件名,量表写在 xlsx,佩戴行为写在日记。用「有没有 .atr」去衡量它,相当于用尺子量重量。
第二个需要校正的误判是「71 人太少所以没用」。71 人做不了深度学习的训练集,但做组间对照的样本量是够的:论文正是用这个规模做出了垂直轴节律一致性的组间差异。评价它的时候,尺度应该是「在它能回答的问题上,证据够不够硬」。
第三个误判是「三天就是三天」。协议写三天,实际从二十多小时到七十多小时都有,缺口位置也不一样。把它当作等长的三天序列去批处理,会在第一步就引入错位。
7.1 五维评分
按 DAIMS 的常用维度打分,每项 1 至 5 分,针对「作为自由生活步态与跌倒风险研究数据」这个用途:
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 3 | 71 人 × 约 3 天,做组间对照够,做训练不够 |
| 标注质量 | 3 | 分组与量表齐全,但分组靠自报,无事件标注 |
| 任务适配 | 4 | 自由生活步态与活动量高度适配,事件类完全不适配 |
| 文档完整 | 4 | 页面讲清了流程、纳排与文件结构,字段释义略显简略 |
| 可获取性 | 4 | 免注册、ODC-BY,但 20.8 GB 对带宽有要求 |
五项合计 18 分(满分 25)。分布比较均衡:没有一项满分,也没有一项垫底。它不是一个「极端好用」或「极端难用」的库,而是一个各维度都在中上、需要使用者自己补齐最后一公里的库。
7.2 标注质量的两层
第一层是分组正确性。分组依据是自报的过去一年跌倒次数,达到两次及以上算跌倒者。这个定义在老年医学里常用,但自报本身有回忆偏差,且没有说明是否核实。七十一位受试者里如果有一人记错,分组就会翻转。
第二层是量表完整度。29 列里既有金标准的筛查工具(MMSE、Berg、TUG),也有较新的计算机化认知测评(Neurotrax 的 GCS 与 EFI),还有四项静态姿势测试的保持时间。覆盖面在同类资源里算宽的,但表格里有 n/a,且分布不均。
| 用途 | 分组层够不够 | 量表层够不够 | 建议 |
|---|---|---|---|
| 组间对照 | 够 | 够 | 直接按 CO/FL 分组 |
| 连续风险建模 | 勉强 | 够 | 用跌倒次数而不是二分组 |
| 认知与步态关联 | 够 | 够 | 注意 n/a 的单元格 |
| 事件检测 | 不够 | 不适用 | 换数据集 |
| 纵向随访 | 不够 | 不够 | 数据未含随访结局 |
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 |
|---|---|---|
| 选择偏差 | 排除卧床、认知障碍、既往步态障碍者 | 样本偏向能自主外出的健康老人 |
| 单中心偏差 | 全部来自特拉维夫 | 地面材质、鞋履习惯、气候都单一 |
| 年龄偏差 | 65–87 岁,无年轻人 | 不能用于中青年步态 |
| 回忆偏差 | 跌倒次数为自报 | 分组可能错分 |
| 时长偏差 | 协议三天,实际 24–75 小时 | 等长切片会错位 |
| 季节性偏差 | 每人只测一次,跨若干月 | 无法区分个体差异与季节 |
| 设备偏差 | 型号未公布,增益逐条不同 | 跨设备复现缺参照 |
| 口径不一致 | 页面称三轴加速度、一分钟步行 | 头文件为六通道、38–56 秒 |
关于最后一条,需要说清两个数各自的来处:页面简介写「三轴加速度计」与「步行一分钟」,而每个头文件都列了六路信号(三轴加速度加三轴角速度),LabWalks 的采样点数换算出来是 38 到 56 秒。两个口径的差额构成,官方没有解释。做规划时以头文件为准,因为通道数与采样点数直接决定内存与切片。
7.4 外部验证矩阵
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 跨设备验证 | 用本库训练特征,换自采设备测试 | 通道与采样率同档 | 轴向与增益需先对齐 |
| 跨人群验证 | 用本库阈值测中青年 | 特征定义通用 | 步频与活动量分布差异大 |
| 与量表对照 | 用三天特征预测 TUG、BBS | 同一批人,配对干净 | 只能做关联,不能做因果 |
| 前瞻验证 | 用三天特征预测未来跌倒 | 论文报告过六个月随访 | 随访数据未随库发布 |
| 算法基准 | 用固定切段规则比较两个特征集 | 数据固定,可复现 | 切段规则一变,排名就变 |
跨设备是最常见也最容易出问题的一类。本库没有公布传感器型号,也没有给佩戴朝向的图示,任何「把本库的阈值直接搬到自家设备」的做法,都会在轴向定义与增益换算上翻车。稳妥的做法是先做重力方向对齐,再用静止段的方差估噪声底,最后才谈特征。
还有一类验证常被忽略:时间尺度上的外推。本库是三天,很多应用场景要的是一个月或一个季度。三天的特征能不能代表更长的窗口,本库自己回答不了,只能靠另一个更长的队列去验证。把三天的结论直接写成「长期活动水平」,是一种没有根据的跃迁。
反之,本库特别适合做「同一天内的两种测量」这类验证:实验室一分钟步行与同一天的日常活动,共用一套传感器、同一批人、同一个时间窗。这种配对在其他数据集里很少见,做出来的结论也比跨库比较干净得多。
7.5 它为何能持续:三天加一张量表
它十年没有更新,却仍在被下载,原因是它占着一个别人不容易复制的组合:连续三天的自由生活信号,配同一批人的完整临床量表与手写日记。新库可以更大、采样率更高,但要同时凑齐这三样,需要一次完整的研究设计,而不只是买几台设备。
这个位置不靠规模支撑,靠的是采集成本。三天连续佩戴的依从性、量表施测的人力、日记整理的工作量,三者叠加起来,让同类资源很难快速复制。也正因如此,它的 71 人不会被轻易超越。
§8 生态位与历史
8.1 历史沿革
2013 年论文发表时,可穿戴步态研究的主流还是「实验室里走一条直线,用惯性传感器估步速」。Hausdorff 团队的切入点不同:不问「能不能测准」,而问「测出来的东西和真实发生的跌倒有没有关系」。三天连续记录是回答这个问题的必要条件,因为跌倒本身是低频事件,十分钟的窗口里几乎不可能观察到风险行为的全貌。
2016 年数据上线,把这套设计连同原始信号一起公开。此后再无版本更新,页面浏览量停在两百多次的量级。这个轨迹很典型:一个临床研究组把数据作为论文的附属品发布,发布即完成,不承担长期维护。
8.2 与心电长时程库的命名撞车
PhysioNet 上以 long term 开头的库不少,最容易被混淆的是三个:ltdb、ltstdb、ltmm。三个缩写的字母构成几乎一样,中间的 T 都代表 Term,但最后一个字母决定了完全不同的东西——B 是 beat,D 是 database,M 是 movement。
| 维度 | ltdb | ltstdb | ltmm |
|---|---|---|---|
| 全名 | Long-Term ECG Database | Long-Term ST Database | Long Term Movement Monitoring Database |
| 模态 | 心电 | 心电 | 腰部惯性信号 |
| 记录数 | 7 | 86 | 71 |
| 单条时长 | 14–24 小时 | 21–24 小时 | 约 3 天 |
| 采样率 | 128 Hz | 250 Hz | 100 Hz |
| 逐事件标注 | 心搏 | 心搏 + ST + 节律 | 无 |
| 机构 | MIT 与波士顿贝斯以色列医院 | 同左 | 特拉维夫大学 |
| 上线 | 1999 | 2000 | 2016 |
这张表最该记住的是最后三行:机构不同、上线差了十七年、标注体系毫无交集。它们共享的只有命名习惯与发布平台。
8.3 生态位:自由生活层的那一格
| 层次 | 代表资源 | 回答的问题 |
|---|---|---|
| 实验室生物力学 | 光学动作捕捉类数据 | 关节怎么动 |
| 实验室可穿戴 | 短程步行 + 量表 | 走得准不准 |
| 自由生活 | ltmm 这一类 | 平时怎么走 |
| 事件级 | 带跌倒标注的数据 | 什么时候摔 |
四层里,自由生活这一层最薄。实验室数据多,因为采集可控;事件级数据少,因为跌倒不可预期;自由生活数据介于两者之间,采集不难但依从性难,整理更麻烦。LTMM 站在这一层的偏上方:它有量表、有日记、有纳排标准,缺的是事件与随访。
这一格的位置也解释了它的替代品为什么少。要做自由生活,得有连续佩戴的依从性,三天是多数老人能接受的上限;要配量表,得有一次实验室访视,成本直接翻倍;要日记,得有一个人逐份整理手写记录,这件事没有自动化办法。三样东西叠在一起,产出的周期以年计,愿意做第二次的团队不多。
8.4 谁在用它,用来做什么
从引用它的工作看,使用者集中在三类。第一类是步态与跌倒研究组,用它验证「日常步态指标能否区分跌倒者」,常与自采队列做对照。第二类是可穿戴算法组,用它测试活动识别与步数估计在真实长时程上的稳定性。第三类是数字生物标志物方向,把三天的活动曲线当作老年功能状态的表征。
三类用法都不指望它提供事件真值,只指望它提供真实的自由生活段。这个定位一旦清楚,它的所有局限就都变得可以接受。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一天 | 第一周 | 注意事项 |
|---|---|---|---|
| 步态算法研究者 | 读页面与 CO001 头文件,跑通 §5.3 | 实现切段与四个指标,复现组间差异 | 切段规则必须写全 |
| 可穿戴工程师 | 抽一条记录做端到端推理 | 做轴向对齐与噪声底标定 | 增益逐条不同,不可硬编码 |
| 老年医学研究者 | 读临床表与纳排标准 | 做量表与三天特征的关联分析 | 分组是自报,别当金标准 |
9.2 一条最短的可用流程
#-- 1. 取清单、两个表格与一条最短的记录
BASE=https://physionet.org/files/ltmm/1.0.0
curl -sL "$BASE/RECORDS" -o RECORDS
curl -sL "$BASE/ClinicalDemogData_COFL.xlsx" -O
curl -sL "$BASE/ReportHome75h.xlsx" -O
for ext in hea dat; do curl -sL "$BASE/CO001.$ext" -O; done
#-- 2. 用首行核对通道数、采样率与时长
awk 'NR==1{printf "%s ch=%d fs=%d %.1f h\n", $1, $2, $3, $4/$3/3600}' CO001.hea
import wfdb
import numpy as np
rec = wfdb.rdrecord('CO001')
print(rec.sig_name)
print('%.1f h' % (rec.sig_len / rec.fs / 3600))
#-- 先看灰度的量级,确认没有饱和或全零通道
print(np.percentile(np.abs(rec.p_signal[:, :3]), [50, 99], axis=0))
跑完这两段,就走完了下载、读取、核对三步。剩下的工作是把同一套代码套到其余七十条上,并在 LabWalks 目录里找出与主记录能配对的那些编号。
9.3 引用方式
| 引用对象 | 内容 | 说明 |
|---|---|---|
| 数据集 | Long Term Movement Monitoring Database, v1.0.0. PhysioNet. 2016. | 必须带版本号 |
| 标识符 | DOI 10.13026/C2S59C | 指向 1.0.0 版 |
| 原始论文 | Weiss A, 等. Neurorehabil Neural Repair. 2013 | DOI 10.1177/1545968313491004 |
| 平台 | PhysioNet 平台综述论文,按页面 Cite 按钮生成 | 官方页面同时给出 |
| 许可 | ODC-BY 1.0,署名即可,含商业用途 | 以许可全文为准 |
官方页面给出的引用顺序值得注意:它先列原始论文,再列平台论文。这意味着写论文时应该引用 2013 年那篇方法学文章,而不是只引数据集本身。这一点与 ltdb 不同——后者没有专属论文,只能引平台。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,结构与事实由编辑把关 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方页面与库内文件 |
| 文件核验 | RECORDS、两个 xlsx 与若干 .hea 经直接访问确认 |
| 统计口径 | 时长由采样点数除以 100 换算;人数由文件名前缀计数 |
| 未采用 | 未做标签频次排序、未做活动量分布直方图、未做逐条样本明细 |
| 论文信息 | 仅检索 Europe PMC 摘要,未读全文 |
| 未核验内容 | 传感器型号与佩戴朝向、跌倒分组的核实方式、随访结局数据 |
| 免责 | 本文不构成临床建议;使用须遵守 ODC-BY 1.0 署名要求 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「LTMM 是心电长时程库」 | 是腰部惯性信号,六通道加速度与角速度 | 头文件通道名 v-acceleration 等 |
| 「它和 ltdb 是同一系列」 | 只共享命名前缀,机构、模态、年份都不同 | 两个官方页面的机构与 DOI 不同 |
| 「里面有跌倒事件的标注」 | 只有自报跌倒次数用于分组,无事件时间戳 | 目录内无 .atr,表格无事件列 |
| 「传感器是三轴加速度计」 | 头文件列了六路,含三轴角速度 | CO001.hea 六行信号 |
| 「每条记录都是 72 小时」 | 实际 24–75 小时,长度不一 | 采样点数除以 100 |
| 「实验室步行正好一分钟」 | 头文件换算 38–56 秒 | co001_base.hea 为 3801 点 |
| 「71 条记录等于 71 个三天」 | 是人,每人一条,样本量等于人数量 | 文件名前缀计数 40 + 31 |
| 「可以直接拿它训练分类器」 | 71 人二分类,几轮即过拟合 | 分组只有两类,人数七十一 |
| 「增益是常数,可以直接乘」 | 每条、每通道增益都不同 | 各 .hea 的 gain 字段 |
| 「量表列就是诊断」 | 是筛查工具,非诊断结论 | 表格释义表写明来源文献 |
FAQ
Q1:LTMM 和 ltdb、ltstdb 是什么关系?
只有命名关系。三者都以 long term 开头,都在 PhysioNet 发布,但 ltdb 与 ltstdb 是心电,LTMM 是腰部运动信号;前两者的记录单位是心搏,后者的单位是人。机构、年份、许可时间线都不同。
Q2:它能做跌倒检测吗?
不能。跌倒信息只有一列自报次数,用于把人分成两组,三天记录期内没有任何事件标注。要做检测,需要带事件时间戳的数据。
Q3:为什么记录长度不一致?
协议要求连续戴三天,但洗澡游泳时可以取下,也有人提前结束。日记表备注列写有 47h、75h 等不同时长,与头文件换算结果一致。
Q4:71 个人够做什么?
够做组间对照与关联分析,不够训练端到端模型。论文用这个规模做出了节律一致性的组间差异,说明它在假设检验上的样本量是够的。
Q5:传感器是什么型号?
官方未公布。头文件只给通道名与增益,没给厂商与量程。跨设备复现时需要自己做轴向对齐与噪声底标定。
Q6:采样率 100 Hz 够吗?
对活动量、步数与节律够,对步态相位与关节角度不够。步频通常在 1 到 2 Hz,100 Hz 有五十倍以上的余量;但支撑相划分需要更高分辨率。
Q7:怎么区分步行段和非步行段?
没有真值,只能靠启发式。常用做法是滑动窗算均方根,超过阈值判为活动,再在其中找周期性。阈值要按设备噪声底标定,不能跨记录套用。
Q8:临床表里的 n/a 怎么处理?
按列判断,不要按行删除。缺失是按单元格发生的,有的受试者认知量表有值但其他列为空。整行删除会损失有效样本。
Q9:要不要下整库?
先下一条跑通流程,再决定。整库 20.8 GB,解压后同量。若只做特征层面的研究,可以逐条算完特征存 CSV,原始信号不必长期保留。
Q10:引用哪篇论文?
引 2013 年 Weiss 等的 Neurorehabil Neural Repair 文章,同时著录数据集与版本号。官方页面把论文排在平台引用之前。
Q11:它有没有随访数据?
论文提到收集了六个月后的跌倒自报,但随库发布的表格里没有随访结局列。需要随访数据只能联系作者。
术语表
| 术语 | 含义 |
|---|---|
| LTMM | Long Term Movement Monitoring,长时程运动监测 |
| WFDB | PhysioNet 使用的生理信号存储规范 |
.hea |
纯文本头文件,声明通道、采样率、增益与注释 |
.dat |
二进制信号本体,多通道交错存放 |
| 增益 | 每个物理量对应的整数刻度,写在头文件括号前 |
| 基线 | 零物理量对应的整数值,写在头文件括号内 |
| CO | 非跌倒组前缀,来自 control 或 non-faller 的编号习惯 |
| FL | 跌倒组前缀,来自 faller |
| LabWalks | 实验室一分钟步行记录子目录 |
| 动态步态指数 | DGI,评估行走中变速与转头时的稳定性 |
| Berg 平衡量表 | BBS,十四项静态与动态平衡任务 |
| 起立行走计时 | TUG,从椅子起身走三米返回的用时 |
| 四格步进测试 | FSST,跨格前后左右移动的计时 |
| 平衡信心量表 | ABC,自评在日常活动中不跌倒的信心 |
| MMSE | 简易精神状态检查,本库准入要求高于 24 分 |
| MoCA | 蒙特利尔认知评估,较 MMSE 更敏感 |
| PASE | 老年人活动量表,自报的体力活动水平 |
| 主频幅值 | 功率谱在步频带的峰值高度,反映节律强度 |
| 主频宽度 | 峰周围的展宽,反映步与步之间的变异 |
| 自由生活 | 受试者在自家环境中不受指令约束的日常活动 |
| 佩戴依从性 | 实际佩戴时长与协议时长的比值 |
| ODC-BY 1.0 | 开放数据共享署名许可,允许商用需署名 |
| DAIMS | 数据与信息管理评估框架,本库按五维打分 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 受试者数 | 71 | 官方页面 Subjects 段 | 官方 |
| 非跌倒组 | 40 | RECORDS 计数 |
文件 |
| 跌倒组 | 31 | RECORDS 计数 |
文件 |
| 年龄范围 | 65–87 岁 | 官方页面 Subjects 段 | 官方 |
| 平均年龄 | 78.36 ± 4.71 岁 | 官方页面 Subjects 段 | 官方 |
| 主记录数 | 71 | RECORDS 前 71 行 |
文件 |
| 实验室步行数 | 73 | RECORDS 后 73 行 |
文件 |
| 采样率 | 100 Hz | .hea 首行 |
文件 |
| 通道数 | 6 | .hea 首行 |
文件 |
| 量化位宽 | 16 位 | .hea 信号行 |
文件 |
| 单条最大体积 | 309.0 MB | 目录列表 | 文件 |
| 整库体积 | 20.8 GB | 官方页面 Files 段 | 官方 |
| 临床表列数 | 29 | xlsx 首行 | 文件 |
| 满程记录(CO040) | 约 74.8 小时 | 采样点数换算 | 换算 |
| 短记录(FL009) | 约 23.8 小时 | 由文件体积估算 | 换算 |
| 实验室步行时长 | 38–56 秒 | 采样点数换算 | 换算 |
附录 B:数字的来源分层
| 层级 | 含义 | 本库对应内容 |
|---|---|---|
| 官方 | 官方页面明文写出 | 71 人、年龄范围、20.8 GB、许可、DOI |
| 文件 | 从库内文件读出 | 通道数、采样率、分组计数、列数、体积 |
| 换算 | 由文件数字计算得出 | 时长、实验室步行秒数、每小时体积 |
| 未核实 | 官方未说明且无法从文件推出 | 传感器型号、跌倒核实方式、随访结局 |
四层的可信度依次下降。写作与建模时,前两层可以直接引用,第三层要写明换算方式,第四层只能标注为未知。
附录 C:完整参考文献
| 编号 | 文献 | 说明 |
|---|---|---|
| 1 | Weiss A, Brozgol M, Dorfman M, Herman T, Shema S, Giladi N, Hausdorff JM. Does the evaluation of gait quality during daily life provide insight into fall risk? A novel approach using 3-day accelerometer recordings. Neurorehabil Neural Repair. 2013. DOI 10.1177/1545968313491004 | 官方指定的方法学论文,71 人,六个月随访 |
| 2 | PhysioNet. Long Term Movement Monitoring Database, v1.0.0. 2016-06-20. DOI 10.13026/C2S59C | 数据本体 |
| 3 | Pollard T, 等. PhysioNet as a global platform for biomedical research. Nature Health. 2026. DOI 10.1038/s44360-026-00096-z | 平台引用 |
| 4 | Hausdorff JM 团队. BioMed Research International, 2015, 文章号 402596 | 官方页面另附的链接,内容未核实 |
第 4 条只以链接形式出现在官方页面上,标题与作者未能确认,引用前应自行核对。
附录 D:选库判决代码
#-- 用几个问题快速判断该不该用 LTMM
need = {
'需要事件级真值': False,
'需要关节角度': False,
'需要跨人群泛化': False,
'需要自由生活三天': True,
'需要配对的临床量表': True,
'需要佩戴依从性记录': True,
}
blockers = [k for k, v in need.items() if k.startswith('需要') and v and
k in ('需要事件级真值', '需要关节角度', '需要跨人群泛化')]
if blockers:
print('放弃 LTMM,硬约束:', blockers)
else:
print('可用,先跑 §9.2 的最短流程')
这段判断没有技术含量,但能省掉一次白跑。三个硬约束里任意一个成立,这个库都不适合作为主数据源。
附录 E:如果只记五件事
- LTMM 是运动的长时程库,不是心电的;与 ltdb、ltstdb 只共享命名前缀。
- 71 位老人、每人一条约三天的腰部六通道记录,40 位非跌倒者配 31 位跌倒者。
- 没有事件标注,跌倒只是分组依据,做不了跌倒检测。
- 三天加量表加日记的组合稀缺,这三点凑齐的成本决定了它不会被轻易替代。
- 用之前先按采样点数核对时长,按头文件读增益,别按页面措辞做假设。
编辑说明
本篇的核验路径为:官方项目页(physionet.org/content/ltmm/1.0.0/,HTTP 200)、RECORDS 清单、两个 xlsx 表、以及若干 .hea 头文件;论文信息取自 Europe PMC 的摘要字段。写作时对官方措辞与文件内容不一致之处(通道数、步行时长)采取并列呈现,不做对错判定。
未覆盖的内容包括:传感器型号与佩戴朝向的确认、跌倒分组的核实流程、六个月随访结局的具体数值、以及 2015 年那篇 BioMed Research International 文章的内容。这些都需要向作者索取或读全文,超出本次核验范围。
统计口径统一为:时长 = 采样点数 ÷ 采样率 ÷ 3600;人数 = 文件名前缀计数;体积取目录列表的显示值。所有分布类统计(活动量直方图、标签频次、字段空值率交叉表)均未做,交由使用者在拿到数据后自行处理。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- taichidb — 共享标签:生理信号 / 可穿戴传感 / 步态与运动 / 队列研究
- minute-level-step-count-nhanes — 共享标签:生理信号 / 步态与运动 / 队列研究
- ppg-dalia — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
- culm — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
- nesfdb — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
- plantar — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
- wearable-device-dataset — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
- semg-gait-31subjects — 共享标签:生理信号 / 可穿戴传感 / 步态与运动
- cgmacros — 共享标签:生理信号 / 可穿戴传感 / 队列研究
- big-ideas-glycemic-wearable — 共享标签:生理信号 / 可穿戴传感 / 队列研究
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

