院内活动加速度记录:58 位内科病人的腕表

一百赫兹的加速度、一赫兹的温湿光压、每天一份生命体征与化验——这份数据不做步数统计,它把原始惯性信号直接交出来,让人自己去定义「活动」;正因如此,它既是活动识别的研究材料,也是一次关于「什么算活动」的方法学提问

来源 德国斯图加特罗伯特·博世医院(Robert-Bosch-Krankenhaus);图宾根大学医学院伦理委员会批准(507/2016BO1)发布时间: 2026-10-19最后更新: 2026-10-20 阅读 22
院内活动加速度记录:58 位内科病人的腕表

信息速览

数据集名称院内活动加速度记录:58 位内科病人的腕表
数据类型加速度计,院内活动,活动识别,再入院,住院时长,腕戴传感器,内科住院,惯性测量
规模58
接入方式德国斯图加特罗伯特·博世医院(Robert-Bosch-Krankenhaus);图宾根大学医学院伦理委员会批准(507/2016BO1)
AI 就绪度

步数是一个很诱人的指标。便宜、直观、人人能懂,几乎所有消费级手环都在算它。但在医院里,步数几乎没用。一个卧床三天的肺炎病人,与一个每天绕病区走十圈的心衰病人,步数差几十倍——这个差别太粗,粗到无法用来预测任何事。真正有信息量的,是动作的形态:起身的爆发力、步态的稳定性、夜间翻身的频次、久坐的时长。

这些都要从原始惯性信号里算。而多数公开的可穿戴数据集,给的正是算好的步数。这份数据反其道而行。五十八位内科住院病人,腕上戴一块博世开发的传感器,三轴加速度与三轴角速度以一百赫兹持续记录,另有温湿光压四种环境读数。数据里没有任何派生指标——没有步数、没有活动分钟数、没有睡眠分期。给的就是原始信号。这个选择的后果是双向的。一方面,它把「什么算活动」这个定义权交给了使用者,让新的活动识别算法有地方可试。另一方面,它让这份数据的使用门槛高了不少——你得先自己造出一个活动量,才能谈相关性。

五十八位病人,来自斯图加特的罗伯特·博世医院,内科与肿瘤病区,2016 年采集,最长监测十天。想知道目录长什么样,读 §2.1;想搞清楚佩戴依从性为什么关键,读 §4.3;只想判断能不能用来做再入院预测,直接读 §6.9。

§1 它是什么:原始信号加临床标签

1.1 一句话定义与四条边界

这是一份前瞻性观察数据集:58 位内科住院病人,住院期间佩戴腕戴传感器,采集原始惯性信号与环境信号,配以逐次测量的生命体征、化验值与出院后三十天再入院状态。

四条边界。

第一,给的是原始信号,不是活动量。 这一点是这份数据最鲜明的特征。目录里没有一个「步数」字段,也没有「活动强度」字段。所有活动相关的量都要自己算。

第二,监测有上限。 每位病人最多监测十天,出院早于十天则提前结束。所以院内活动只能观察住院的前半段,长期住院病人的后期没有数据。

第三,样本有明确的入选与排除。 十八岁以上、能独立或在辅具帮助下走三米、无佩戴手表的医学禁忌、因特定急性内科情况入院、预计住院至少四十八小时。排除截肢者、仅能轮椅活动者、卧床者。

第四,受限访问。 需要签署数据使用协议。

1.2 为什么不留步数

这个问题值得正面回答,因为它决定了这份数据的定位。

步数的问题不在于不准,而在于它是一个面向健康人的指标。消费级算法调优的目标是「走在街上的人」,假设是连续步行、步幅稳定、手臂自然摆动。住院病人不满足这些假设:走三步就停下、扶着输液架、手臂被限制、步幅因疼痛而缩短。

在这种条件下,步数算法会系统性失效——不是误差大,是根本检测不到。而如果数据提供方直接给步数,使用者无从知道效力如何,只能盲信。

给原始信号,等于把这个问题暴露出来:任何使用者都必须自己面对「这段信号里到底有没有走」的判断,而不是接受一个黑箱输出。条目页把这一点写得很清楚——目的是让人研究「适用于评估病人健康状态的活动识别算法」,而不是依赖步数这类通用指标。

这个理由站得住。代价是使用门槛高,且不同研究之间难以直接比较结果(因为各自定义的活动量不同)。

1.3 五个通道组

传感器给六类信号,可以分成五组看。

惯性组:acc_1 至 acc_3 是三轴加速度,gyro_1 至 gyro_3 是三轴角速度。采样率一百赫兹。这一组是活动识别的核心。

湿度:hum,百分比。

光照:light,单位焦耳。这个单位值得注意——光照通常用勒克斯,用焦耳意味着记录的是能量而非照度,可能经过某种累积或标定。使用前要确认。

气压:pres,单位写作千克每米每秒平方,即帕斯卡。气压可以用来估楼层变化(每上升一层气压略降),这是一条被低估的信息——住院病人每天走多少层楼梯或多少趟走廊,气压能给出线索。

温度:temp,摄氏度。

后四组的采样率都是一赫兹。

这四组环境信号的实际价值:光照与温度可以标记昼夜与室内外,湿度与气压可以标记位置变化。把它们与惯性信号合起来,能推断出比「动了多少」更丰富的东西——比如「夜里起来了三次,每次都去了卫生间」(气压与湿度变化加路径长度)。

1.4 双采样率带来的对齐问题

一百赫兹与一赫兹差两个数量级。两组合并时,必须先把惯性信号降采样,或者把环境信号插值升采样。

这两种做法各有代价。

降采样会丢掉高频信息。而加速度的高频成分恰恰是区分动作类型的关键——走路与翻身的差别在频谱的高段。

升采样会造出不存在的中间值。环境信号变化慢,线性插值勉强可用,但插值出来的曲线会让人误以为分辨率真的提高了。

建议做法:不要急着合并。先在一百赫兹上做活动识别,得到逐秒的活动标签序列;再把标签序列与一秒一格的环境信号对齐。这样高频信息用在了它该用的地方,对齐发生在语义层而不是采样层。

1.5 临床数据分两层

条目页把临床信息分成两层,这个设计值得单独说。

第一层,不随时间变的:放在 examineeInfo_publicReduced.json 里。含年龄、性别、住院总时长、居住与照护状况(自主、居家护理、养老机构)等。

第二层,随测量变的:放在 measurementInfo_publicReduced.json 里,每次测量一份。含体重、生命体征(心率、体温、血压、血氧)、以及化验值(C 反应蛋白、肌酐、白细胞计数、血红蛋白)。

为什么分两层?因为同一病人可能被测量多次(不同日期)。若把临床数据都放在病人层,多次测量的差异就丢了;若都放在测量层,重复存储病人级信息又浪费。

分层的实际好处是:可以做两种分析。一是「急性变化与活动的关系」——用测量层,看同一个人今天化验变差、活动是否也变少。二是「总体状况与活动的关系」——用病人层,看不同人的活动水平差异与结局的关联。

这两种分析的结论可能不同,甚至相反。分层设计让两者都能做,这是这份数据在结构上的一个优点。

1.6 入选条件划出了什么样的人群

入选条件是:十八岁以上、能走三米(可借助辅具)、无佩戴禁忌、因四类急性内科情况之一入院、预计住院至少四十八小时。

四类情况是:慢性肾病或心衰的容量负荷过重、急性感染、慢阻肺急性加重、恶性肿瘤进展或肿瘤治疗感染并发症导致的非计划入院。

排除:截肢、仅能轮椅活动、卧床。

这个条件组合,划出了一个特定的人群画像:能走、病情中等、以内科急性问题入院、预期不会当天出院。

画像之外的人被系统性地排除了:走不动的(最病重的)、能走的但只是来做个日间治疗的、外科病人、儿科病人、精神科病人。

所以这份数据描述的是「内科病房里还能下床的那批人」。这个限定在解读任何结论时都要带上。

1.7 它不适合回答什么

不适合回答「住院病人的平均活动量是多少」——样本经过筛选,且佩戴依从性不一。

不适合回答「活动量与再入院有因果关系」——观察性设计,且再入院只统计本院。

不适合回答「哪种活动识别算法最好」——数据本身不含算法,只含信号;比较需要自建标注。

不适合回答「老年人活动特点」——年龄分布未在条目页给出,但入选条件排除了走不动的老人,样本偏向功能较好的老年人。

适合回答的是方法学问题:在住院条件下,哪些信号特征能稳定区分活动类型?活动量的不同定义方式,对结局预测的影响有多大?单腕传感器的信息上限在哪里?

1.8 一个容易被忽略的设计:为什么是手腕

传感器戴在手腕上,不是腰、不是踝、不是胸。

这个选择有实际考虑。腕戴设备病人愿意长期佩戴,不影响洗漱之外的日常活动;腰戴与踝戴依从性差,且住院病人常有伤口、引流管、弹力袜。

代价是信号质量。手腕是人体活动最自由的部位之一——吃饭、写字、抓痒、翻身,手臂动而身体不动的情况极多。所以腕部加速度里混着大量「非位移性动作」,这些动作消耗能量很少,却会产生与走路相似的信号幅度。

这解释了为什么腕戴设备的步数算法普遍不如腰戴准。也解释了为什么这份数据强调「活动识别」而不是「活动计数」——识别动作类型,比数步数更能容忍腕部的噪声。

1.9 单侧传感器的信息上限

只用一只手腕,意味着另一侧身体的动作完全不可见。

对多数对称动作(走路、坐下、起身),单侧足够。但对不对称动作(单手持物行走、偏瘫病人的健侧代偿、扶拐),单侧会漏掉一半信息。

作者在限制里主动写了这一条:「我们只用了一个腕戴传感器来检测运动与体位」。这句话的分量在于,它承认了体位判断的可靠性受限——判断「躺着还是坐着」在单腕设备上本来就难,因为手腕的位置与躯干姿态只是弱相关。

若研究问题涉及体位(比如压疮风险、坠床风险),这份数据不够用。

§2 数据构成:目录、压缩包与文件

2.1 目录结构

每位病人一个目录,命名是 R401 到 R458——五十八个编号,连续。

每个目录下有一个 export 子目录,其下有:

examineeInfo_publicReduced.json:病人级信息,一份。

若干 measurement_1、measurement_2……子目录:每次测量一个。每个测量目录下有两个文件——sensorData.csv 与 measurementInfo_publicReduced.json。

所以文件数不是固定的。一位只测了一次的病人,目录里就一个测量子目录;测了五次的,就有五个。

条目页还说明:数据集按每档不超过十位病人切分成多个压缩包。五十八人大概会分成六到七个压缩包。

2.2 三层嵌套的读取逻辑

写读取代码时,要按三层来处理。

第一层是病人:R4xx。

第二层是测量:measurement_k,k 不连续,缺号是正常的(可能某次测量被剔除)。

第三层是信号:sensorData.csv 里一行一个时间点。

常见错误:假设每位病人的测量数相同。不能假设。必须先扫一遍目录,统计每人的测量次数分布,再决定怎么组织数据结构。

建议的数据结构:一个字典,键是病人编号,值是测量列表,每个测量是一个字典,含信号表、测量级临床信息、以及指向病人级信息的引用。这样既能按人聚合,也能按次分析。

2.3 sensorData.csv 的列

八列:time、acc_1、acc_2、acc_3、gyro_1、gyro_2、gyro_3、hum、light、pres、temp。

仔细数会发现这是十一列,不是八列。条目页列的是十一个字段,前面说「八列」是笔误——正确的读法是:一个时间列,六个惯性列,四个环境列。

time 是自测量开始起的毫秒数。这意味着每个测量文件的时间轴都从零开始,与病人的住院日历不对应。要把它挂到日历上,得靠 measurementInfo 里的日期字段。

2.4 惯性列的单位与量程

条目页没有给加速度与角速度的单位与量程。

这是一个必须自己反推的点。做法:读一段静置信号(病人躺着不动时),看三轴加速度的模长。若约为 1,单位是重力加速度 g;若约为 9.8,单位是米每二次方秒。量程则看最大值,若在 2 左右封顶,量程是正负二 g;若到 16,量程是正负十六 g。

角速度同理,静止时三轴应接近零,量程看峰值。

这两个参数直接影响特征工程——用 g 为单位算出的能量特征,与用米每二次方秒算出的差近十倍,跨数据集比较时必须统一。

2.5 环境列的四处疑点

四列环境信号各有一处需要核实。

湿度:单位是百分比,这个清楚。但传感器贴在手腕上,测得的是袖口与皮肤之间的微环境,不是病房湿度。袖子的厚薄、病人是否盖被子,都会影响读数。

光照:单位写作焦耳。这个单位很反常——焦耳是能量,而光照传感器通常输出照度(勒克斯)或光子通量。用焦耳可能意味着读数经过时间累积,也可能是单位标注有误。使用前必须核对。

气压:单位写作千克每米每秒平方,这是帕斯卡的展开式。量级应当在一千帕左右(海平面标准大气压约 1013 百帕)。若数值在 1000 附近,单位就是百帕;若在 100000 附近,是帕斯卡。

温度:摄氏度。同样受佩戴位置影响,腕部温度低于核心体温,且随环境变化。

这四列的共同问题是:它们测的是腕部微环境,不是病室环境。做位置推断时可以利用(比如从走廊进入病房,温湿度会跳变),但不能当作环境监测数据用。

2.6 两个 JSON 里有什么

条目页没有逐一列出 JSON 的字段,只给了概括。

examineeInfo 含年龄、性别、住院总时长、居住状况、照护方式等。

measurementInfo 含体重、生命体征(心率、体温、血压、血氧)、化验值(C 反应蛋白、肌酐、白细胞、血红蛋白)。

从 Methods 段还能推出一些:入组时问卷采集了种族、过去十二个月跌倒次数、上次住院、身高体重与 BMI、惯用手、吸烟状况、饮酒量、室内外行走辅具使用、居住与护理状况、以及德语版短版 IPAQ 问卷;还做了计时起立行走测试。

这些是否全部进入公开版 JSON,条目页没说。文件名带 publicReduced(公开精简版)这个后缀,暗示有删减。

2.7 体量估算与它的边界

体量只能估。

若一位病人测三次,每次二十四小时,一百赫兹采样,惯性通道每秒 600 个数值(六列),一天 86400 秒——单次约五千二百万个数值。三次一亿五千万。五十八人约八十七亿个数值。

即使按单精度存二进制,也是三十多吉字节;存 CSV 文本会膨胀数倍。

但实际不会这么大。条目页说监测上限十天,且要求单次记录至少八小时、佩戴占比超八成。若平均每次记录十二小时、平均两次,则每人约五千二百万个数值,五十八人约三十亿,二进制约十二吉字节。

这个量级意味着:全量装进内存不现实,必须按病人或按测量逐个处理。这也是为什么数据要切成多个压缩包。

2.8 缺失与不规则

条目页明说:数据质量与可用性参差不齐,部分病人有效记录很少甚至没有。

这类「有的病人有、有的病人几乎没有」的结构,比随机缺失更难处理。因为缺失可能与病人状况相关——病情重的测得少(不愿戴、常检查),病情轻的也测得少(早早出院)。中间那批数据最全。

做法:先做一张表,每人的测量次数、每次时长、佩戴占比。用这张表判断样本的实际可用规模,而不是用「五十八」这个名义数字。

2.9 佩戴占比是怎么算的

条目页说要求「佩戴时间超过总记录时长的八成」,但没有说怎么判定「佩戴」。

这是关键技术细节。常见判据有三类:基于加速度方差的静止检测、基于温度与皮肤接触的检测、基于光照的遮挡检测。

不同判据会给出不同的佩戴占比,进而影响哪些记录能入库。

对使用者来说,影响在于:数据里可能仍残留未佩戴的时段(比如设备放在床头柜上但被算作佩戴)。这些时段的信号是近乎恒定的小噪声,若当成「完全不动」参与分析,会拉低活动量估计。

建议:自己做一次静置检测——若某段连续若干分钟的三轴加速度方差低于阈值,标为「疑似未佩戴」,与真实的活动停止区分开。

§3 访问:受限访问,一道协议

3.1 门槛

注册 PhysioNet 账号,签署受限数据使用协议,说明研究目的。条目页的 Files 段明确写了「这是受限资源,访问文件须满足全部要求:签署数据使用协议」。

与凭证式相比,这一档不要求 CITI 培训证书,也不要求机构担保。与公开数据相比,多了协议签署。

3.2 处理的现实问题

即使签了协议,文件分发也可能受站点策略限制。若遇到页面显示不可用,属于分发层面而非许可层面的问题。

3.3 引用的正确写法

数据本身:DOI 10.13026/yrz5-5909,版本 1.0,2020 年 12 月 3 日发布。

条目页只列了三篇参考文献(急诊风险筛查、再入院预测综述、术后活动与住院时长的系统综述),没有列出配套的数据论文。这一点需要注意:这份数据缺少一篇正式的数据描述论文,方法细节只能靠条目页。

3.4 数据保护上的一个特别处理

条目页明确说:出于数据保护原因,不给确切的记录时间,只说明数据采集于 2016 年。

这个处理很克制,也很重要。它意味着无法把数据与季节、节假日、天气关联。做活动研究时,「住院期间是夏天还是冬天」这类变量不可得——而这在活动量研究里是有影响的(病房温度、病人衣着、日照时长)。

§4 局限:依从性、单腕、与看不见的时间

4.1 依从性是第一位的限制

可穿戴研究的老问题:愿意戴的人,与不愿意戴的人,不一样。

这份数据的入选条件要求病人同意佩戴,这本身就是一道筛选。同意的病人可能更配合、功能更好、对研究更信任。不同意的病人被系统排除,且排除的原因可能与结局相关。

条目页没有给拒绝率——有多少符合条件的人被邀请但拒绝了。这个数字若有,能让人判断选择偏倚的大小。

4.2 佩戴占比八成意味着什么

要求佩戴超过八成,是为了保证数据量。但反过来看,有两成时间是空的。

这两成不是随机分布的。病人洗澡时取下(条目页明说)、做检查时取下(磁共振、X 光)、觉得不舒服时取下。洗澡多在傍晚,检查多在白天,不舒服多在夜间。

所以缺口集中在特定时段。若某项分析依赖「全天活动总量」,缺口会直接造成偏差;若依赖「活动的时间模式」,缺口会破坏模式。

4.3 依从性随时间衰减

这是一个在多数可穿戴研究里被观察到、但很少被报告的现象:佩戴率随天数下降。

病人刚入院时配合度高,几天后觉得麻烦,开始间歇性不戴。若数据里记录了佩戴标记,可以验证这一点;若没有,只能从信号特征推断(长时间静置可能是不戴)。

这个衰减对「活动量与住院时长」的分析有直接影响:住院越久的人,后期数据越可能缺失,而恰恰是这批人的活动量最值得关注。

4.4 单腕的信息上限

§1.9 说过。这里补一层:腕部信号对「体位」的推断力弱。

条目页提到,研究目的之一是「测试用三轴腕戴传感器测量体位的附加价值」。但作者同时承认只用了一个传感器。这两句放在一起,说明体位测量是探索性的,不是这份数据能可靠支撑的。

若研究问题需要准确区分卧、坐、站、走,单腕不够。这需要至少加一个躯干传感器。

4.5 再入院只算本院

条目页明说:再入院状态只报告回到索引医院的情况,因此可能低估再入院率。

这一条的影响比看起来大。病人出院后若去了另一家医院,这份数据里记为「未再入院」。而跨院就医在现实中并不少见——尤其是出院后回老家、或者急诊去了更近的医院。

低估的方向是单向的,所以任何基于这个标签的「再入院率」都会偏低,「预测模型」的阳性样本会偏少。

4.6 十天上限与住院时长的关系

监测上限十天。若某位病人住院二十天,只有前十天有数据。

而住院时长本身是这份数据的核心结局之一。于是出现一个循环:住院越长的人,数据覆盖的比例越低;而住院越长,往往意味着病情越复杂、活动量越低。

这个循环会让「活动量低」与「住院长」的关联被夸大——因为长住院者的活动量只被观察了最差的那一段。

4.7 时间信息被刻意模糊

§3.4 说过。这里说它的具体后果。

无法分析季节性。无法分析星期效应(周末病房活动少、探视多)。无法分析节假日。无法把活动与天气关联。

这些在活动研究里都不是小事。特别是星期效应——住院病人的康复活动高度依赖治疗安排,而治疗安排在周末会变。

4.8 环境信号测的是腕部微环境

§2.5 说过。补一句:这意味着不能用来做病室环境暴露研究。

若研究问题是「病房温度对活动量的影响」,这份数据答不了——它测的是手腕附近的温度,受衣袖、被褥、体位影响远大于室温。

4.9 缺少数据论文

条目页列的三篇参考文献都是背景文献,没有一份是这份数据的方法学描述。

这意味着很多细节只能靠条目页文字与自行核对:传感器型号与量程、佩戴判定算法、预处理做了什么、活动识别的验证方式。

对一个要发表方法学论文的使用者,这构成额外工作量。

4.10 数据质量清单(DAIMS)

按二十四个常见维度逐项判定。

判为「是」的十二项:有明确许可与协议;有 DOI 与版本;有引用格式;有采集设备与采样率说明;有伦理批准编号(507/2016BO1);有入选与排除标准;有目录结构与文件说明;有字段列表;有已知局限的主动披露(数据质量参差、再入院只算本院、单传感器);有资助与利益冲突声明;采集年份明确;来源机构可核实。

判为「部分」的九项:加速度与角速度的单位与量程未给;佩戴判定算法未描述;预处理做了什么未说明;光照单位(焦耳)存疑;JSON 字段未逐一列出,且文件名标注为精简版;样本的年龄与性别分布未在条目页给出;拒绝率未给;活动识别的验证方式未描述;无配套数据论文。

判为「否」的三项:无派生活动量(这是设计选择,但确实构成使用门槛);无跨院再入院信息;无确切采集日期。

§5 它能用来做什么

5.1 开发住院场景的活动识别算法

这是这份数据的首要用途,也是作者明说的目的。

住院场景与日常场景的差别在哪?动作更慢、更碎、更不对称。走路可能只有三米,中间停两次;起身要扶床栏;躺下的过程分几个阶段。

通用算法在这些动作上会失效。这份数据提供了真实信号,让人可以针对这个场景设计算法。

具体做法:先人工标注一小段(看波形标出「走」「坐」「卧」「站」),再用监督学习训练分类器,最后在全量上推断。

5.2 比较不同活动量定义对结局预测的影响

因为数据不给活动量,使用者必须自己定义。这反而成了研究机会:同一个结局,用不同的活动量定义,预测性能差多少?

可以比较的定义至少有五种:总加速度积分、超过阈值的时长、活动片段数、活动片段平均时长、活动的昼夜分布。

这个比较本身有方法学价值——它回答「活动量该怎么量化」这个尚无共识的问题。

5.3 研究活动与化验值的同期关系

因为临床数据是逐次测量的,可以把「今天的 C 反应蛋白」与「今天的活动量」放在一起看。

这类分析在临床上是有意义的:感染加重时活动下降,好转时活动上升。若能定量刻画这个关系,活动监测就有了临床用途。

要注意的是样本量——五十八人、每人几次,能做的分析有限。

5.4 研究体位与气压的关系

气压可以用来估楼层。若病人在不同楼层间移动(去检查、去康复室),气压会有台阶状变化。

把它与加速度合起来,能推断「外出次数」——一条被低估的指标,因为它反映的是病人被带去检查、去做康复的频次,间接反映病情复杂度。

5.5 用于可穿戴信号处理的教学

五十八人、结构清晰、信号类型丰富(惯性加环境)、有临床标签。适合作为「可穿戴信号分析」课程的数据集。

学生可以在一个数据集上走完整链条:读信号、做特征、训分类器、关联临床结局。

5.6 作为其他可穿戴数据的对照

若手上有社区老人的活动数据,可以把这份当「住院状态」的对照,看活动模式如何因住院而改变。

前提是对齐三件事:设备佩戴位置、采样率、活动量的定义。

5.7 不能用来做什么

不能用来训练通用的步数算法(住院场景与日常场景差异太大)。

不能用来做再入院的风险预测模型(样本太小,且标签低估)。

不能用来研究体位(单腕不足)。

不能用来做环境暴露研究(测的是腕部微环境)。

不能用来推断人群活动水平(样本经过筛选)。

5.8 用之前必须做的五件事

第一,扫目录。 统计每人的测量次数与每次的时长,画出分布。这个分布决定了实际可用样本。

第二,反推单位。 用静置段确认加速度的单位与量程,用静止段确认角速度。

第三,核实光照单位。 焦耳这个标注必须与数值量级对照,判断是笔误还是累积量。

第四,做静置检测。 自己标出疑似未佩戴的时段,与真实活动停止分开。

第五,对齐时间。 把 time 的毫秒偏移与 measurementInfo 里的日期合起来,建立住院日历。

5.9 一个被低估的用途:检验活动量的定义之争

文献里对「住院病人活动量该怎么算」没有共识。有人用步数,有人用活动分钟,有人用加速度积分。

这些定义在同一批数据上会给出不同的结论,但很少有人在同一批数据上把它们全跑一遍。原因很简单:多数数据集只给一种算好的量。

这份数据给了原始信号,所以可以一次算五种、十种,看排序是否一致。若五种定义给出的病人排序高度一致,说明「活动量」这个概念是稳健的;若不一致,说明分歧不是技术细节,而是概念本身有歧义。

这个实验的价值超出这份数据本身——它能把一场定义之争变成可检验的问题。

§6 常见误读

6.1 误读一:把五十八当样本量

五十八是人数,不是测量次数。每人可能有多次测量,每次是不同日期的观察。

做「活动与结局」的分析,有效样本是五十八(因为结局是病人级的)。做「活动与化验」的分析,有效样本是测量次数(但同人多次测量不独立)。

症状:报告「n = 一百二十次测量」然后算 p 值。

6.2 误读二:把加速度模长当活动量

一个常见做法:算三轴加速度的模长,减去重力分量,得到「动态加速度」,再对时间积分当作活动量。

这个做法在腕部有严重问题:手臂的任意挥动都会产生大的动态加速度,包括吃饭、抓痒、翻身挥手。这些动作的能量消耗很小,但积分值很大。

后果:卧床但清醒、手臂乱动的病人,活动量可能高于安静走路的病人。

改进:先分类动作类型,只对「位移性动作」积分。

6.3 误读三:把未佩戴当静止

设备放在床头柜上时,加速度近乎恒定(只有微小的热噪声)。若当成「病人完全不动」,会把大量时间算作极低活动。

症状:某些病人的日间活动量出现长时间的平台期,且平台期的信号方差极小。

6.4 陷阱一:忽略双采样率对齐

直接把一百赫兹的惯性数据与一赫兹的环境数据按索引相减,会得到错位的结果。

正确做法:先在一百赫兹上算逐秒特征,再与一秒一格的环境数据合并。

6.5 陷阱二:用住院时长做特征又做标签

住院时长既是结局,也可能是筛选条件的一部分(要求预计至少四十八小时)。

若模型用「已住院天数」做特征预测「总住院时长」,会得到虚高的性能——因为在观察时点,已住天数与总时长高度相关。

6.6 陷阱三:把再入院的缺失当阴性

只统计本院,跨院再入院记为未再入院。这会让阳性样本偏少。

做法:在论文里明确写「再入院定义为回到索引医院」,不要把结论推广到「所有再入院」。

6.7 陷阱四:忽略佩戴率的时间衰减

§4.3 说过。若不做检查,会以为数据是均匀覆盖的。

做法:按住院日画佩戴率曲线。若曲线下降,后面的分析要加权或截断。

6.8 陷阱五:把环境信号当病室环境

§4.8 说过。腕部的温湿度受衣袖与被褥影响极大。

6.9 活动量与再入院相关,不等于能预测再入院

这是最需要强调的一条。

在五十八人里,很可能发现「活动量低的病人再入院率更高」。这个关联是真的,但它的用途有限。

原因有三。第一,样本太小,任何关联的置信区间都很宽。第二,再入院标签低估(只算本院)。第三,也是最关键的:关联不等于可干预。知道活动量低的人预后差,不等于提高活动量就能改善预后——后者需要干预试验。

把观察性关联包装成「预测模型」,是这类数据最常见的误用。

§7 与相邻数据的定位

7.1 与社区可穿戴数据的差别

社区老人活动数据(比如英国生物样本库的加速度子集)规模大、随访长、佩戴位置多为腰部。

这份数据的优势是临床标签密集(每次测量都有化验),劣势是规模小、随访短。

两者的用途不同:前者适合做人群流行病学,后者适合做机制探索与算法开发。

7.2 与 ICU 活动数据的差别

ICU 的活动数据关注的是早期活动、床上被动运动、呼吸机相关性肌无力。

这份数据是普通内科病房,病人能走三米。两者的人群与场景完全不同,算法不能通用。

7.3 与术后活动数据的差别

外科病人的活动恢复有明确的时间线(术后第一天、第二天……),且与手术类型强相关。

这份数据是内科急性入院,时间线不明确(入院时病情已在进展中)。所以它无法回答「术后第几天能走」这类问题。

7.4 在可穿戴公开数据里的位置

PhysioNet 上的可穿戴数据多数是生理信号(心电、光电容积脉搏波、睡眠),纯惯性信号的较少。

这份数据的独特性在于:它是院内场景、有临床标签、且给原始信号。这三点组合在一起,在公开数据里不常见。

7.5 利益冲突这件事

条目页写明:一位作者是博世医疗解决方案公司的雇员,该公司提供了传感器与技术支持。同时声明资助方未参与设计、采集、分析、解释、写作与发表决定。

这个声明的措辞是标准的,但读结论时要记得这层关系——尤其是在评估「这套传感器平台的表现」这类结论时。

7.6 适合谁用

做可穿戴活动识别的方法研究者、做院内活动与结局关联的临床研究者、需要一份真实惯性数据做教学的人。

不适合:需要大样本做预测模型的人、需要准确体位信息的人、需要跨院随访数据的人。

§8 怎么用:从信号到活动量

8.1 三条技术路线

路线一,手工特征加分类器。 从滑动窗口算时域与频域特征(均值、方差、过零率、频带能量、熵),接随机森林或梯度提升。

路线二,卷积网络端到端。 把三轴加速度的窗口当一维图像,直接训卷积网络。

路线三,无监督聚类。 不做标注,直接对窗口特征聚类,看能否自然分出「静止」「轻度活动」「行走」几类。

三条路线各有适用场景。样本只有五十八人,路线一最稳;路线三可以先用来看数据长什么样。

8.2 窗口怎么选

活动识别的标准窗口是一到两秒(识别单个动作)或十到三十秒(识别活动类型)。

住院场景建议用较长的窗口。理由:动作慢、碎片化,短窗口里可能一个完整动作都没有。

建议:先用两秒窗做初探,再用十秒窗做活动类型分类,最后用一分钟窗做活动量汇总。三层窗可以并存,各自服务不同问题。

8.3 特征怎么选

按四类组织。

时域:均值、标准差、峰峰值、均方根、偏度、峰度、过零率、相关系数(轴间)。

频域:各轴的主频、频带能量(0.5–3 赫兹对应步行、3–8 赫兹对应快动作)、谱熵。

时频:短时傅里叶变换后的能量分布,或者小波分解的各层能量。

跨通道:加速度与角速度的互相关、模长的自相关(周期性动作会呈现明显峰)。

对角速度这一路要特别重视——它是区分「手臂摆动」与「身体移动」的关键。走路时手腕的角速度有明显的周期性,而躺着挥手则没有稳定的周期。

8.4 基线与它的意义

必须给基线,否则无法判断模型有没有学到东西。

基线一,静止检测。 只区分「动」与「不动」,用方差阈值。这是最粗的基线。

基线二,模长阈值。 算动态加速度模长,超过阈值算活动。

基线三,多数类。 若绝大部分时间是不动,全预测为不动就有很高的准确率。

三个基线里,第三个最重要——它揭示了类别不平衡的程度。住院病人一天里真正在走的时间可能只有几十分钟,占百分之几。

8.5 过拟合的典型表现

五十八人,若按窗口随机划分,训练集与测试集里会有同一病人的相邻窗口。模型只需记住这个人的信号特征,就能在测试集上表现很好。

典型表现:随机划分的准确率零点九以上,按病人划分掉到零点六。

正确做法:按病人划分,或者按「病人加日期」划分。

8.6 从活动量到结局的具体流程

若目标是研究活动与结局,按这个顺序。

一,对每次测量,算出逐分钟的活动强度序列。

二,汇总成日级指标:总活动时长、活动片段数、平均片段长度、活动的时间分布(上午、下午、夜间)。

三,把日级指标与当日的化验、生命体征合并。

四,按病人聚合,得到每人一个概况,再与住院时长、再入院关联。

五,报告时给出每人的散点,不只是一个相关系数。

8.7 五条失败模式

失败一,未区分未佩戴与静止。 见 §6.3。

失败二,用模长积分当活动量。 见 §6.2。

失败三,按窗口随机划分。 见 §8.5。

失败四,忽略佩戴率的时间衰减。 见 §6.7。

失败五,把住院时长当特征又当标签。 见 §6.5。

8.8 结果该怎么读

三个问题。

一,活动量的定义对结论影响多大? 换一种定义,结论是否还成立?若不成立,说明结论依赖于定义,不是稳健发现。

二,个体间差异有多大? 五十八人的活动量分布若很宽,任何「平均活动量」都没有代表性。

三,与化验的同期关系是否在个体内也成立? 组间相关可能由混杂造成;个体内的同期变化更能说明问题。

8.9 与临床判断的比较

临床上,医生判断病人「能不能出院」,靠的是查房时看病人状态、问活动情况。

这份数据能否提供增量信息?这是它最有价值的应用方向,也是最难验证的。

验证方式:让医生在不知道传感器数据的情况下做出院判断,再比较「医生判断」与「基于活动量的模型」的一致性。若两者高度一致,说明传感器没有增量价值;若不一致且模型更准,才有意义。

这份数据本身不支持这样的验证(没有医生的判断记录),只能作为未来研究的设计参考。

§9 三条技术路线的细节

9.1 手工特征加树模型

最实用的一条。特征可解释,模型训练快,在小样本上不容易过拟合。

具体配置建议:窗口两秒、重叠一半;每窗算二十到三十个特征;用随机森林(几百棵树,深度限制);按病人做交叉验证。

优点:能输出特征重要性,可以解释「模型靠什么判断」。
缺点:特征要手工设计,可能有遗漏。

9.2 卷积网络

把三轴加速度排成三行,时间作列,当成一维图像处理。

在小样本上的问题:参数多、易过拟合。缓解办法是加深数据增强(时间抖动、幅度缩放、轴旋转)、用较小的网络、早停。

优点:无需手工特征,能自动学出频域与时域的模式。
缺点:可解释性差,训练不稳定。

9.3 无监督与自监督

先不标注,用聚类或自编码器看数据的自然结构。

聚类能回答一个基础问题:这份数据里的活动,到底有几种典型形态?若聚类出四类,可能对应「静止」「轻微动作」「坐姿活动」「行走」。

自监督(比如掩码重建)能学出表示,再用少量标注微调。这在标注成本高的场景里有价值。

9.4 一条被忽略的路线:物理模型驱动

既不想纯手工,也不想纯黑箱,可以从物理模型出发。

思路:人体的加速度信号是重力与运动加速度的叠加。若能估出重力方向(低频成分),就能把信号分解为「姿态」(重力方向)与「运动」(残差)。

姿态可以给出体位(卧、坐、站的粗略判断,虽然单腕精度有限),运动可以给出活动强度。两者合起来,比单纯的模长积分更有物理意义。

这条路线的好处是可解释、不需要大量标注,且能直接给出「体位」这个临床关心的量。

9.5 选择建议

要快速出结果且要解释性,走 §9.1。有足够数据与算力,走 §9.2。想先摸清数据结构,走 §9.3。想要物理意义,走 §9.4。

§10 术语

加速度计:测量比力(重力加运动加速度)的传感器,三轴可给出空间中的加速度向量。

陀螺仪:测量角速度的传感器,三轴可给出绕三个轴的旋转速率。

惯性测量单元:加速度计与陀螺仪的组合。

活动识别:从传感器信号推断人正在做什么动作或活动类型。

佩戴时间占比:设备被认为戴在身上的时长占总记录时长的比例。

Charlson 共病指数:根据合并症种类与严重程度加权求和的评分,用于量化整体疾病负担。

IPAQ:国际体力活动问卷,用于自报活动量的标准化工具。

计时起立行走测试:让受试者从椅子起身、走三米、转身、返回坐下,计时间,评估 mobility。

容量负荷过重:体内液体过多,常见于心衰与慢性肾病,表现为水肿、呼吸困难。

再入院:出院后一定期限内再次住院,常用三十天为窗口。

动态加速度:从原始加速度中去除重力分量后剩下的部分,反映运动。

谱熵:功率谱的熵,衡量信号频率分布的复杂度。

§11 事实清单

11.1 核心事实

项 值
标题 In-hospital physical activity measured with a new Bosch accelerometer sensor system
发布 PhysioNet,2020 年 12 月 3 日,版本 1.0
DOI 10.13026/yrz5-5909
采集地 德国斯图加特罗伯特·博世医院(1100 床转诊中心)
病区 三个普通内科病区(共 100 床)+ 一个 30 床肿瘤病区
采集年份 2016 年(出于数据保护不给确切日期)
样本 58 位病人,编号 R401–R458
入选 ≥18 岁;能走 3 米(可借辅具);无佩戴禁忌;四类急性内科情况之一;预计住院 ≥48 小时
排除 截肢;仅能轮椅活动;卧床
监测上限 10 天
入库要求 单次记录 ≥8 小时;佩戴时间占比 >80%
惯性采样率 100 赫兹
环境采样率 1 赫兹
信号 三轴加速度、三轴角速度、湿度、光照、气压、温度
派生指标 无(只有原始信号)
临床数据 病人级 JSON + 测量级 JSON
伦理 图宾根大学医学院与大学医院伦理委员会 507/2016BO1
许可 PhysioNet Restricted Health Data License 1.5.0
资助 罗伯特·博世基金会与博世医疗解决方案公司
利益冲突 一位作者为博世医疗解决方案公司雇员

11.2 六个可立即验证的疑问

一,加速度的单位与量程是什么?用静置段的模长反推。

二,光照为什么用焦耳?是笔误还是累积量?用数值量级判断。

三,佩戴占比是怎么判定的?条目页未描述算法。这决定了数据里残留多少未佩戴时段。

四,每人的实际测量次数分布如何?条目页只说「有些病人测了多次」。

五,年龄与性别分布如何?条目页未给,需从 JSON 里统计。

六,预处理到底做了什么?条目页说「做了些预处理以应对传感器与技术障碍」,但没说什么。

11.3 一个病人的读取流程

import json, pandas as pd, os

def load_patient(root, pid):
    d = os.path.join(root, pid, 'export')
    with open(os.path.join(d, 'examineeInfo_publicReduced.json')) as f:
        info = json.load(f)
    ms = sorted(x for x in os.listdir(d) if x.startswith('measurement_'))
    out = []
    for m in ms:
        sd = pd.read_csv(os.path.join(d, m, 'sensorData.csv'))
        with open(os.path.join(d, m, 'measurementInfo_publicReduced.json')) as f:
            mi = json.load(f)
        out.append(dict(name=m, signal=sd, info=mi))
    return info, out

注意 measurement_ 目录的排序:若编号超过九,字符串排序会把 measurement_10 排在 measurement_2 之前。要按编号数值排。

11.4 附录 A:反推单位与检测静置

import numpy as np

def infer_unit(sig):
    acc = sig[['acc_1','acc_2','acc_3']].values
    mag = np.linalg.norm(acc, axis=1)
    lo = np.percentile(mag, 5)
    print(f"模长 5% 分位 = {lo:.3f} -> 单位应为 {'g' if lo < 2 else 'm/s^2'}")
    print(f"模长最大值 = {mag.max():.2f}, 99.9% 分位 = {np.percentile(mag,99.9):.2f}")

def still_mask(sig, win=100*60, thr=1e-3):
    """按一分钟窗检测方差极低的时段,返回布尔掩码(True = 疑似未佩戴/静止)。"""
    acc = sig[['acc_1','acc_2','acc_3']].values
    n = len(acc)//win
    out = np.zeros(n, dtype=bool)
    for i in range(n):
        seg = acc[i*win:(i+1)*win]
        out[i] = seg.var(axis=0).mean() < thr
    return out

第一段回答「单位是什么」,第二段标出「长时间几乎不动」的时段。后者要人工看几段确认——可能是未佩戴,也可能是深度睡眠。

11.5 附录 B:活动量的几种定义

def activity_enmo(acc, fs=100):
    """ENMO:欧几里得范数减一,负值截零。单位需为 g。"""
    m = np.linalg.norm(acc, axis=1) - 1.0
    return np.clip(m, 0, None)

def activity_counts(acc, fs=100):
    """把动态加速度按秒求绝对值和,近似「活动计数」。"""
    dyn = acc - acc.mean(axis=0, keepdims=True)
    n = len(dyn)//fs
    return np.abs(dyn[:n*fs]).reshape(n, fs, 3).sum(axis=(1,2))

def activity_bouts(intensity, thr, min_len=10):
    """按阈值切出活动片段,返回片段长度列表(单位:秒)。"""
    b = intensity > thr
    runs, cur = [], 0
    for x in b:
        if x: cur += 1
        elif cur:
            if cur >= min_len: runs.append(cur)
            cur = 0
    if cur >= min_len: runs.append(cur)
    return runs

三种定义回答三个不同问题:ENMO 给强度、counts 给总量、bouts 给碎片化程度。三者对同一批数据会给出不同的排序——这正是 §5.2 想研究的东西。

11.6 附录 C:证据链

  • 数据集条目页:https://physionet.org/content/hospital-activity-bosch/1.0/,含 Abstract、Background、Methods(Clinical assessment 与 Accelerometry 两小节)、Data Description、Usage Notes(含 Limitations、Example usage)、Acknowledgements、Conflicts of Interest、References
  • 样本与入排标准:条目页 Methods 段,四类诊断与三条排除逐条给出
  • 设备与采样率:条目页 Methods 段 Accelerometry 小节,六类信号、100 赫兹与 1 赫兹、入库两条门槛
  • 目录结构:条目页 Data Description 段,给出目录树与压缩包切分规则
  • 字段含义:条目页 Files 段,逐列解释
  • 伦理与资助:条目页 Methods 段编号 507/2016BO1;Acknowledgements 段资助来源;Conflicts of Interest 段照录
  • 文件清单:条目页 Files 段显示为受限资源,本页未取得实际文件清单,故不含按文件核对的统计

凡属分析性内容(§2.7 的体量估算、§2.5 的单位疑点、§4.10 的判定、§8 与 §9 的方案、§11.3 至 §11.5 的代码)为基于条目页描述与领域常识的推演,非官方结论,代码亦未在真实数据上运行验证。凡标注「条目页」的均为该页原文表述。

编辑说明

本页数值来自 PhysioNet 条目页(版本 1.0),未做数据下载与实测。四处需提示:一是体量为量级推测;二是加速度单位、量程、光照单位三处疑点为编辑判断,条目页未给;三是佩戴判定算法与预处理内容条目页未描述,相关分析均为推断;四是附录代码仅为示范,未在真实数据上运行。资助与利益冲突两节照录条目页原文,不含评价。


相关数据集导航

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

  • hd-semg — 共享标签:生理信号 / 步态与运动 / 电子健康记录 / 评测基准
  • kinecal — 共享标签:生理信号 / 可穿戴传感 / 步态与运动 / 评测基准
  • accelerometry-walk-climb-drive — 共享标签:生理信号 / 可穿戴传感 / 步态与运动 / 评测基准
  • grabmyo — 共享标签:生理信号 / 可穿戴传感 / 步态与运动 / 评测基准
  • tpehgt — 共享标签:生理信号 / 电子健康记录 / 评测基准
  • rehab-motion-capture — 共享标签:生理信号 / 可穿戴传感 / 步态与运动 / 评测基准
  • scientisst-move — 共享标签:生理信号 / 可穿戴传感 / 步态与运动 / 评测基准
  • sisfall — 共享标签:生理信号 / 可穿戴传感 / 步态与运动 / 评测基准
  • wisdm — 共享标签:生理信号 / 可穿戴传感 / 步态与运动 / 评测基准
  • ppg-dalia — 共享标签:生理信号 / 可穿戴传感 / 步态与运动

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

返回 AI-Ready 数据集