信息速览
BigIdeasLab_STEP 是一份围绕同一句话采集出来的数据:不同肤色的人,手腕上那块表测出来的心率,到底一样准吗。为了回答它,研究者在 2019 年 7 月到 8 月招募了五十三名志愿者,让他们在胸口贴一片心电贴片当标准答案,同时在手腕和上臂挂上六款可穿戴设备,先在椅子上静坐四分钟,再跟着视频做一分钟深呼吸,然后上跑步机走到心率升到最大心率的一半,歇两分钟,最后坐下来敲一分钟键盘。整个过程重复三轮,每轮换一批设备。
为什么值得单独成条。肤色与光电容积脉搏波的关系在可穿戴行业里被讨论了十多年,但公开数据极少。厂商的验证报告通常不披露测试人群的肤色构成,学术研究又多是小样本、单设备。这份数据的稀缺之处不在规模——五十三人在今天看来不算大——而在它把参考标准、多种设备、四类活动、六档肤色放进同一个受控协议,并且把逐时间点配对的结果原样放出。它的结论「肤色不是误差主因、设备与活动才是」与不少人的直觉相反,也因此引出了正式的学术商榷与作者回应。这一段争议本身就是数据价值的一部分,用的人必须知道。
怎么读这一页。本页面向三类人。想训练或验证腕戴心率模型的人,关心数据形态、误差口径与样本划分陷阱(§2 至 §5)。想在论文里引用这份数据的人,关心它的结论边界与被质疑的地方(§4 与 §6)。想判断这类设备能否进临床的人,关心它测的到底是什么、漏了什么(§1 与 §7)。受限访问这一条先说在前面:数据要签协议才能拿,本页无法代取,也不复述任何协议内的条款。
§1 它是什么:一份为回答一个具体争论而采的数据
1.1 一句话定义与三条边界
BigIdeasLab_STEP 是一份配对心率记录集:五十三名参与者,六款可穿戴设备,一片心电贴片作参考,四类活动条件,六个肤色档位,合并为一张十列的表。
三条边界必须先划清。
第一,它记的不是原始光信号,而是设备自己算出来的心率。六款设备的心率列都是厂商算法输出的成品,没有人拿到过原始光电容积脉搏波波形(Empatica E4 除外,但随该 CSV 发布的也只有心率列)。这意味着这份数据能回答「设备准不准」,不能回答「设备的算法错在哪一步」。想改算法、想把光信号喂进神经网络,这份数据做不了。
第二,参考标准是心电,不是动脉血压或超声。心电给出的是电活动意义上的心率,与脉搏波的心率在概念上等价,但在心律失常、外周循环不佳的情况下会分叉。数据里没有节律标注,也没有血压,因此无法识别哪些行落在房颤、早搏这类会让两种心率真实分歧的情形上。
第三,五十三人是健康志愿者,年龄偏年轻(均值二十五点六岁),从大学校园周边招募。这决定了它不适合作为人群基准,也不适合估计老年人、皮肤病变者、外周血管病患者的误差结构。
1.2 六款设备与它们的采样率
六款设备分两档。
消费级四款:Apple Watch 4(软件版本 5.1.3,2018 年秋季上市)、Fitbit Charge 2(软件版本 22.55.2,2016 年秋季)、Garmin Vivosmart 3(软件版本 5.10,2017 年春季)、Xiaomi Miband 3(2018 年春季,无公开软件版本号)。
研究级两款:Empatica E4 与 Biovotion Everion,软件版本均记为 2019 年夏。
采样率的差异在这里比通常想象得更要命。Empatica E4 与 Biovotion Everion 的对外输出固定在一赫兹左右,四款消费级设备则是可变采样率——所谓可变,是指设备按内部策略决定何时输出一个心率值:静息时可能几十秒一个点,运动时可能每秒一个点甚至更密。研究协议里让设备进入「活动模式」以取到最高可用采样率,但即便如此,四款消费级设备之间、同一设备在不同活动段之间的采样密度都不相同。
这直接决定了误差怎么算。若两台设备的输出频率不同,逐时间点求差时必须有一步对齐,而对齐方式(取最近邻、线性插值、区间平均)会系统性地改变误差数值。原始论文的做法是先把各设备时间戳统一到同一网络时间协议基准,再逐匹配时间戳求差。数据发布时时间戳被整体移除,只剩行序与活动标签,因此复现者只能用行序近似对齐,无法还原当初的匹配关系。这是这份数据在使用上最实质的一道坎,§3.3 会细说。
1.3 为什么肤色会成为问题
光电容积脉搏波测量的原理很朴素:用发光二极管照进皮肤,用光电二极管接收反射或透射回来的光,血容量的周期变化会调制吸收量,于是光强信号里出现与心跳同频的起伏。
绿光被选作主流方案,是因为血红蛋白对绿光的吸收系数高,信号幅度大。但黑色素对绿光的吸收同样强。肤色越深,进入真皮层的绿光越少,返回的交流分量越小,信噪比越低。这里的因果链是清楚的:黑色素吸收 → 直流分量下降更快 → 交流与直流的比值下降 → 同样的运动伪差与探测噪声占的比重上升。
关键在最后一步。信噪比下降不必然导致误差上升,因为设备算法可以在低信噪比时降低输出频率或直接丢弃数据。于是「肤色深导致不准」这条链条上有两个可以各自成立的结论:一是误差变大,二是数据缺失变多。这两件事在统计上是不同的现象,需要分别检验。原始论文把两者都做了,结论是肤色组之间的误差差异不显著,缺失率的差异也不显著。§4 会交代这个结论后来被怎样质疑。
1.4 参考标准:为什么用心电而不是别的
心电贴片在这个设计里承担的是「真值」角色。它测的是心肌除极产生的电位变化,R 峰之间的间隔给出逐拍心率,与光学原理无关,因此不受肤色影响。
选 Bittium Faros 180 有几个具体理由。它是单导联贴片式,受试者可以在跑步机上走动而不必拖着线;采样率约一千赫兹,R 峰定位的时间分辨率在毫秒量级;它是临床常用的动态心电记录器,做过合规认证,作为参考标准在方法学上站得住。
但「真值」这个说法要打折扣。心电心率与腕部脉搏波心率之间存在生理延迟:心脏电活动发生后,压力波传到腕部需要一段时间,这个时间随血管僵硬度、心率、体位变化。原始论文在探索性分析里发现心电与可穿戴心率序列之间的滞后在零到四十三秒之间,且有的固定有的漂移。四十三秒这个数字远大于生理传导时间,说明其中包含设备内部处理与上报的延迟,不只是血流传播。论文用互相关与滚动窗平滑两种方式做了对齐后的再分析,结论未变。这件事的教训是:把「配对误差」理解为纯粹的测量误差会高估一部分、低估另一部分,滞后结构本身需要单独建模。
1.5 四类活动各自在考什么
协议里四类活动不是随便凑的,各自针对一种误差机制。
静坐四分钟是基线。此时没有运动伪差,信噪比最高,测的是设备在理想条件下的底噪。
深呼吸一分钟考的是另一个机制。深呼吸引起胸腔内压周期性变化,静脉回流随之波动,光信号里出现与呼吸同频的慢变分量。若设备的滤波带宽没把这一分量滤掉,心率估计会被拉偏。原始论文的发现有些反直觉:除 Apple Watch 外,所有设备在深呼吸时的平均绝对误差反而低于静息;Apple Watch 在深呼吸时表现最差。作者未给出确定解释。
步行五分钟是运动伪差的主战场。跑步机速度二点五到四英里每小时,心率目标为最大心率的百分之五十(最大心率按二百二十减年龄估算)。这里考的是腕部周期性摆动与血流信号的频率重叠——所谓信号串扰:手臂摆动频率落在一到三赫兹,恰好在心率基频带附近,算法可能锁到摆动上。论文报告步行条件下除 Apple Watch 外所有设备的误差都显著高于静息。
打字一分钟是最容易被忽略的一类。敲键盘是高频小幅的手腕运动,频率远高于心率,但它引起的皮肤形变与接触压力变化会引入尖锐的瞬态伪差。论文发现打字时的误差在所有设备上都高于静息,且常常接近步行水平;更有意思的是方向:步行倾向于让报告心率高于真值,打字倾向于让它低于真值。
1.6 同一个团队的另一份数据
杜克大学 Big Ideas Lab 在 PhysioNet 上还托管着另一份数据,主题是血糖波动与可穿戴设备。两份数据出自同一实验室、同一套采集哲学:小样本、多设备、受控协议、配对参考。区别在于那份的参考标准是连续血糖监测,这份是心电。
把它们放在一起看能看出这个团队的取舍:愿意为「多设备并行」牺牲样本量,愿意为「配对可算」牺牲原始波形。这个取舍在方法学上说得通——配对设计的统计效率高于独立样本,但代价是无法回溯算法细节,也无法做端到端的信号级建模。
§2 数据构成:一张十列的表与它藏起来的结构
2.1 官方给出的列清单
官方页面把数据结构写得很清楚:单个 CSV,观测已同步,每行代表一个时间点,时间戳在去标识化时移除,十列。
| 列名 | 内容 | 单位 | 采样率说明 |
|---|---|---|---|
| ECG | Bittium Faros 180 心电贴片报告的心率 | bpm | 约 1000 赫兹原始采样 |
| Apple Watch | Apple Watch 4 报告的心率 | bpm | 可变采样率 |
| Empatica | Empatica E4 报告的心率 | bpm | 约 1 赫兹 |
| Garmin | Garmin Vivosmart 3 报告的心率 | bpm | 可变采样率 |
| Fitbit | Fitbit Charge 2 报告的心率 | bpm | 可变采样率 |
| Miband | Xiaomi Miband 3 报告的心率 | bpm | 可变采样率 |
| Biovotion | Biovotion Everion 报告的心率 | bpm | 约 1 赫兹 |
| ID | 内部研究编号 | — | — |
| Skin Tone | 参与者肤色,Fitzpatrick 量表 1 至 6 | 类别 | — |
| Activity | 活动类型:Rest、Activity、Breathe、Type | 类别 | — |
十列里,七列是数值型心率,两列是类别标签,一列是标识。表面看是一张干净的长表,实际上它压缩掉了三层结构。
2.2 被压掉的三层结构
第一层是轮次。每名参与者做了三轮,每轮佩戴的设备组合不同:第一轮 Empatica E4 与 Apple Watch 4,第二轮 Fitbit Charge 2,第三轮 Garmin Vivosmart 3、Xiaomi Miband 3 与 Biovotion Everion。心电贴片三轮全程佩戴。表里没有轮次列。这意味着某些列在某一轮里必然是空的——第一轮没有 Fitbit 数据,第二轮没有 Apple Watch 数据。想按设备分别统计,必须先靠缺失模式反推轮次边界,而缺失模式在去标识化后未必完整保留。
第二层是左右手。第一轮 Empatica 戴右腕、Apple Watch 戴左腕;第二轮 Fitbit 戴左腕;第三轮 Garmin 戴右腕、Miband 戴左腕。Biovotion 三轮都戴右上臂,但只有第三轮数据被纳入。左右手不同意味着运动伪差的形态不同——惯用手摆动幅度更大。表里没有手别列,这个信息只能从论文方法学里读出来。
第三层是设备接触状态。协议要求设备以「活动模式」运行以取最高采样率,但表里没有记录佩戴松紧、传感器贴合度、皮肤温度。这些恰恰是光学测量最敏感的现场变量。
三层结构被压掉之后,这张表能做的分析变窄了:它能比较同一时间点的六款设备误差,能按肤色分组,能按活动分组;它不能追溯为什么某个设备在某个受试者身上偏得特别多。
2.3 行与时间的关系
「每行代表一个时间点」这句话需要拆开看。原始论文的时间同步做法是让所有可穿戴设备连到同一台仅开 Wi-Fi 的手机或笔记本,手机与笔记本先与网络时间协议(NTPv4)对时,再让设备与手机对时。这样处理后设备时钟之间的偏差在毫秒量级。
但设备输出心率的时刻并不一致。一赫兹的设备每秒一个点,可变采样率的设备可能几百毫秒一个点也可能几十秒一个点。把它们塞进同一行的做法,实质上是对每一列各自做了时间重采样(官方未说明是取最近邻还是插值),再按统一的时间网格拼接。
后果是:一行里六个心率值并非同一瞬间测得,它们各自代表一小段时间窗内的值,窗宽随设备而异。跨设备求差时,这个窗宽差异构成一项系统性不确定度。若某台设备在心率快速变化段(如步行开始的前二十秒)以三十秒窗平均,它的读数会明显滞后于以一秒窗输出的设备,而这个滞后会被算成误差。
这不是数据的缺陷,是配对设计的固有代价,但用它的时候必须知道。
2.4 缺失值的两种成因
表里的空值来自两种完全不同的机制,混在一起会让统计出错。
第一种是结构性缺失:某轮没戴某设备,该设备的整段记录为空。这类缺失与受试者特征无关,与轮次安排有关,属于完全随机缺失。
第二种是质量性缺失:设备戴了,但算法在某个时间段判定信号不可靠,不输出心率。这类缺失与肤色、活动强度、佩戴状态都可能相关,属于非随机缺失。
原始论文在缺失率分析里明确把两款研究级设备排除在外,理由是它们用降采样或插值把输出强行对齐到一赫兹,缺失率因此无意义。这个处理是对的,但发布的数据表里看不出哪些空值是降采样造成的、哪些是真的没测到。复现缺失率分析时,只能按设备分档处理:先把 Empatica 与 Biovotion 单独拿出来,剩下的四款再按结构性缺失的轮次边界切分。
2.5 一枚容易踩的标签坑
Activity 列有四个取值:Rest、Activity、Breathe、Type。
其中 Activity 这个名字既是活动列的整体名,又是「步行」这一具体条件的取值。写成代码时极易出现 df[df.Activity == 'Activity'] 这种自己撞自己的表达式,读起来像是在筛全表,实际是在筛步行段。建议一开始就把它重命名成 condition 与 walk,避免后面反复出错。
另一处是 Skin Tone 的编码。它是一到六的整数,不是字符串。按整数处理时容易顺手当连续变量做回归,而 Fitzpatrick 量表是有序类别,六类之间的间隔不等距——量表后两档(五、六)是后来补入的,与前面四档的划分逻辑不同。原始论文的作者在回应商榷时也承认,该量表在分析中必须当作有序变量而非等距变量。把它当连续变量塞进线性模型,会得到一个看起来显著但没有生理含义的斜率。
2.6 官方页面没写的那几件事
对照三份公开材料(PhysioNet 条目页、npj Digital Medicine 论文、GitHub 仓库),有几项信息只在其中一两处出现。
样本量的算法在论文方法学里:效能分析要求每个肤色类别八人,六类共四十八人;混合效应模型另算得四十六人。实际入组五十六人,三人因心电记录不完整被剔除,最终五十三人。PhysioNet 页面直接写五十三,不提前因后果。
各肤色类别的实际人数在论文里:第一类七人、第二类八人、第三类十人、第四类九人、第五类九人、第六类十人。PhysioNet 页面只写「均衡分布」。
von Luschan 肤色量表与分光光度计读数在论文方法学里提过,但随 CSV 发布的只有主观 Fitzpatrick 档位。这一点很重要——商榷文批评的核心正是主观量表不可靠,而开放出来的数据恰恰只有主观档位,读的人无法自行用客观读数复核。
文件体积三处都没写。这在实际使用上是个麻烦:签完协议才知道要下多大的文件。
§3 怎么拿到:受限访问的实际路径
3.1 访问条件
PhysioNet 的访问政策写得很短:只有注册用户、且签署了该项目数据使用协议的人,才能访问文件。许可证是 PhysioNet Restricted Health Data License 1.5.0,配套的数据使用协议是同名 1.5.0 版。
流程按 PhysioNet 的通用做法:注册账号、完成身份核验(通常要求提供机构邮箱与导师或主管信息)、在项目页签署协议、等待审批。审批由数据托管方处理,不是自动通过。本页不复述协议条款,也不对审批时长作任何承诺。
3.2 为什么这份数据是受限的
数据本身已经去标识化,时间戳被整体移除,受试者只有内部编号。那为什么还要签协议?
原因在肤色这一列。肤色类别与年龄、性别、招募地点结合,在小样本里构成再识别风险——五十三人的池子里,某个肤色档位只有七到十人,若再加上活动模式的个体特征(比如某人三轮里哪一轮数据特别短),匹配回具体个人的可能性不为零。把肤色与生理信号放在一起公开发布,属于敏感属性与生物信号的联结,多数伦理审查会要求加限制。
这个判断有代价:它挡住了大量想快速上手的人,也让复现论文结果必须先过一道流程。
3.3 没有时间戳怎么对齐
这是拿到数据后第一个要解决的问题。
CSV 保留了行序。行序就是时间序——官方说「每行代表一个时间点」,观测已同步。因此最直接的对齐方式是把行号当时间轴。这样做的误差来自两处:一是各设备的实际输出时刻在行内被抹平(见 §2.3),二是活动段之间的边界在行序上只能靠 Activity 列的变化来切,而活动切换处往往有若干行的标签归属模糊。
更稳的做法是用 Activity 列切段,每段内部按行序建相对时间,段与段之间不强行拼接。这样得到的不是绝对时间,但足以做分条件的分组统计,也就足以复现论文的主要结论。
若要估计设备延迟,只靠这份 CSV 做不到。论文里的零到四十三秒滞后是用原始带时间戳的数据算的,那批数据不在公开范围内。
3.4 双闸门式的伦理与合规要求
这份数据的使用有两道门槛,性质不同。
第一道是访问审批,属于数据托管方对使用者的资质核验。第二道是研究伦理,属于使用者所在机构对研究目的的审查。PhysioNet 的协议通常要求使用者声明不尝试再识别、不与其他数据源做个体级联结。若研究计划涉及把这份数据与电子病历或其他可穿戴数据合并,需要提前在伦理申请里写清楚联结的层级(个体级还是分布级),否则容易在投稿阶段被质疑。
3.5 配套代码在哪
论文的数据可得性声明里写明:分析代码在 GitHub 的 Big-Ideas-Lab/STEP 仓库,无限制开放。
仓库里六个 R 语言脚本,分工清楚:一个把各来源原始数据合并成大数据表,一个做混合效应模型与交互效应模型,一个在数据上滚窗并输出带窗长列的数据框,一个对滚窗结果跑同一套模型,一个做效能分析,一个画论文里的图。
值得注意的是仓库里没有数据。脚本读的是实验室内部路径,拿到公开 CSV 的人要自己改读取部分。另外脚本用的是 R,不是 Python,想用 Python 复现需要重写;不过模型结构本身不复杂(随机截距加固定效应),重写成本不高。
§4 质量:结论、争议与它没解决的问题
4.1 先看设计上的几处扎实之处
在批评之前,先把这份研究做对的地方列清楚,否则容易低估它的分量。
参考标准选心电,且是临床级贴片而非另一款消费设备,这一步排除了「用不可靠的去校验不可靠的」这种循环。
受试者入组按肤色分层的效能分析来做,不是招到谁算谁。方法学里写明依据先导研究的绿光吸收差异估出效应量零点三,据此算得每类八人、共四十八人。
误差给了两个口径:平均方向误差(心电减设备,带符号)与平均绝对误差(取绝对值)。只报绝对误差会掩盖系统性高估或低估,两个都给是对的做法。
缺失率单独分析,且明确排除两款研究级设备,理由写清楚了。
每个设备、每个肤色、每个条件都报了置信区间。
这几点合起来,说明作者知道自己在做什么,也知道审稿人会问什么。
4.2 主要数字:读数与它们的口径
原始论文报告的核心结果可以归成四组。
肤色维度,静息条件下:平均方向误差最大的是第五类(负四点二五 bpm),最小的是第一类(负零点五三 bpm);平均绝对误差最大的是第六类(十点六 bpm),最小的是第五类(八点六 bpm)。六类合起来的平均方向误差是负二点九九 bpm,平均绝对误差是九点五 bpm。这组数字的形态本身就说明问题:方向误差最大的类别与绝对误差最大的类别不是同一个,若只看其中一个指标会得出相反的排序。
活动条件下:平均方向误差最大的是第五类(九点二一 bpm),最小的是第三类(七点二一 bpm);平均绝对误差最大的是第四类(十四点八 bpm),最小的是第三类(十点一 bpm)。所有类别的方向误差都转正,即活动时设备倾向于高估心率——这与直觉一致,运动伪差把信号频率往上推。
设备档次维度:静息时消费级平均绝对误差七点二 bpm(标准差五点四),研究级十三点九 bpm(标准差七点八);活动时消费级十点二 bpm(标准差七点五),研究级十五点九 bpm(标准差八点一)。两个条件下消费级都优于研究级,这个结果与「研究级更准」的常识相反。作者对此的说明是:显著性主要由 Apple Watch(消费级里最好的)与 Biovotion Everion(研究级里最差的)两端驱动,档次标签本身不是原因。
活动维度:活动时绝对误差平均比静息高百分之三十。这一条是论文摘要里被引用最多的结论。
4.3 结论:肤色不是主因
把上面四组拼起来,论文的结论是:肤色与心率测量误差之间没有显著相关;设备之间、活动条件之间有显著差异。
这个结论表述得很小心,用了「no statistically significant difference」,而不是「没有差异」。两者的区别在统计上是根本性的:前者说的是在这个样本量下未能拒绝零假设,后者说的是证明了零假设成立。论文正文后来在讨论部分也承认这一点。
但摘要与新闻稿的传播中,这个区别经常被抹掉,变成「研究证明肤色不影响手表心率准确性」。这是这份数据被误用最严重的一处。
4.4 商榷文说了什么
2021 年 2 月 26 日,也就是原始论文发表整一年后,npj Digital Medicine 同期登出一篇商榷文与一篇作者回应。
商榷文的作者是 Peter J. Colvonen(加州大学圣迭戈分校与 VA 圣迭戈医疗系统)。它提出两条批评。
第一条针对样本量。商榷文指出最深肤色组的样本太小(它写的是 FST 第六型九人,而论文方法学记录为十人,这里本身有出入),并列出若干可能与肤色发生交互、但研究未测量的因素:手臂毛发、汗液、环境温度、活动水平、表皮厚度、体重。这些因素若与肤色相关,就会把肤色效应掩盖或放大。
第二条针对肤色量表。商榷文的主张更彻底:Fitzpatrick 量表是一九七五年由白人研究者为白人受试者设计的,原本用来评估皮肤对日晒的反应(会不会晒伤),后来才被挪用来描述肤色;它与实际肤色只有弱相关,组内变异大;而且评定依赖评定者主观判断,不同评定者给出的档位差异明显。它的建议是停用主观量表,改用分光光度计这类客观反射光谱测量。
商榷文还点出一个政策层面的问题:部分厂商的使用说明曾建议设备只用于浅肤色人群或仅限静息使用。这句话把技术问题拉到了公平性层面——若设备在深肤色上确实更不准,而厂商又以此为由限制使用,等于把一群人排除在健康监测之外。
4.5 作者怎么回应
回应的作者是原始团队五人,含一位生物统计学者。
对样本量,回应给出了效能分析的完整逻辑:效应量零点三来自先导研究的绿光吸收差异,据此算得每类八人;实际入组七、八、十、九、九、十,全部达到或超过要求;并指出商榷文建议的「增加深肤色组人数」在统计上没有依据,因为并未观察到深肤色组的方差异质性。
对量表,回应承认视觉量表不完美,也承认「一项研究永远无法证明零假设为真」,但同时指出 Fitzpatrick 是当前的标准做法,且研究同时采集了 von Luschan 量表与分光光度计读数(这两项未随公开数据发布);并强调量表必须按有序变量处理,这一点在分析中已经做到。
对未测量协变量,回应说表皮厚度可以用光学设备测、值得未来研究,但手臂毛发、汗液、环境温度难以量化;并称文献检索未找到这些因素影响光电容积脉搏波的证据;同时指出增加协变量会延长每人的实验时长并推高所需样本量。
这段往复的实质是:一方要求更强的证据标准,一方主张在既有标准下结论成立。两边都没有说服对方,也没有第三方数据来裁决。这种状态在方法学争议里很常见,对使用者的含义是——引用这份数据时必须同时引用这场争议,只引其中一边是不诚实的。
4.6 争议里一个容易被忽略的技术点
商榷文提出的「组内变异大」不是抽象的方法学担忧,它有具体的数据含义。
假设 Fitzpatrick 第六型内部的真实黑色素含量跨度很大,而样本里这一档只有十人。若设备误差随黑色素含量单调上升,那么把这十人平均之后,得到的组均值可能落在无效应区,而组内最深的几个人误差其实很大。这就是商榷文说的「深肤色子集里的错误很可能被漏掉」。
要检验这一点,需要连续的黑色素度量,而不是六个档位。原始研究采了分光光度计读数,理论上可以做这个检验,但公开数据里没有这一列。于是这个疑问在公开数据范围内无法回答。
这是受限发布带来的直接后果:能证伪争议的数据被采了,但没有放出来。
4.7 数据本身的可用性评价
抛开争议,单看数据可用性。
优点:结构极简,一张表十列,任何工具都能读;配对设计让误差可以直接算,不需要复杂的建模;活动标签与肤色标签齐全,分组分析一步到位。
缺点:没有时间戳,滞后分析做不了;没有原始光信号,算法层研究做不了;没有轮次与手别,跨设备比较要小心混杂;没有客观肤色读数,连续剂量反应做不了;没有佩戴状态,异常值的成因追不到。
一句话:它适合做「设备间横向比较」与「条件间纵向比较」,不适合做「误差溯源」。
4.8 一句必须写在引用里的话
如果只能在这份数据上加一句注,应该是这句:它的样本量足以检出一个中等效应,不足以排除一个小效应;它的结论是「在这个设计下未观察到肤色主效应」,而不是「肤色不影响测量」。
再加一句:设备是 2016 到 2018 年的型号,软件停在 2019 年夏。厂商此后推送的算法更新可能已经改变了误差结构,用 2026 年的手表去套这份数据的结论,属于外推。
§5 能做什么:五类用法与实现要点
5.1 用法一:设备横向基准
最直接的用法是把六款设备放在同一批人、同一套协议下比。
实现上要注意三件事。第一,必须按轮次把数据切开——第一轮的 Empatica 与 Apple Watch 可以和心电直接比,但 Fitbit 在第一轮没有数据,若不分轮次直接对全表求各设备的平均绝对误差,会得到被缺失模式污染的数字。第二,研究级两款设备的 1 赫兹输出与消费级的可变输出在匹配时不对等,比较时要么把消费级降采样到 1 赫兹,要么承认两者口径不同并分开报告。第三,方向误差与绝对误差要一起报,只报一个会误导。
做完这三步,能得到一张设备 × 条件的误差矩阵。这张矩阵的用处不在排名,而在看排序是否稳定:若某设备在静息排第一、在步行排第五,说明它的强项是低噪声环境下的精度,弱项是抗运动伪差。
5.2 用法二:肤色分组的公平性审计
把误差按肤色六档分组,检验组间差异。
统计上要用混合效应模型而不是简单方差分析,因为同一受试者贡献了大量重复测量,观测不独立。模型结构是随机截距(受试者)+ 固定效应(肤色、设备、条件),交互项按需加入。原始论文用的就是这个结构,代码在 GitHub 仓库的第二个脚本里。
显著性阈值要按比较次数做校正。原始论文用的是零点零一二五(三个因素、邦费罗尼校正),跨肤色两两比较时另用零点零零零二八(十五组比较 × 六设备 × 两条件)。这些数字抄错一个,结论就会翻转。
更重要的是解释。若检验结果为不显著,正确的表述是「未观察到差异」,不是「没有差异」。若要在论文里写后者,需要给出等价性检验或置信区间的实际范围,说明能排除多大的效应。
5.3 用法三:活动条件的误差分解
四类活动提供了一个天然的难度梯度:静息 < 深呼吸 < 打字 ≈ 步行(具体排序依设备而异)。
可以把这个梯度当作误差分解的工具:把总误差拆成基线噪声(静息)、呼吸调制(深呼吸减静息)、高频瞬态(打字减静息)、周期串扰(步行减静息)四部分,看每款设备在哪一项上吃亏。
这个分解是描述性的,不是严格的方差分解——四类条件之间还有心率水平的差异(步行时心率高,静息时低),而误差本身可能与心率水平相关。若要做严格分解,得先把心率水平作为协变量控制住,或者按心率分层后再比较。
5.4 用法四:缺失率与精度分开建模
这份数据一个被低估的用处,是把「准不准」与「报不报」当成两个独立的因变量。
设备在信号差时可以有两种应对:硬着头皮给一个不准的数,或者干脆不给。前者表现为误差大,后者表现为缺失多。这两条策略没有绝对优劣——临床上,一个明确标为不可靠的空值比一个错得离谱的数更安全;但在连续监测场景里,过多的空值会让趋势分析失效。
用这份数据可以画出每款设备在「误差—缺失」平面上的位置,从而判断它的策略偏向。原始论文在缺失率部分给了一些数字(静息时 Fitbit 缺失率最高,Apple Watch 最低),但没有做这个二维分析,这是一个现成的、尚未被做透的角度。
需要注意的是负缺失率这个反常现象:论文报告 Miband 在活动时的缺失率为负十四点二个百分点。原因是该设备在某些时段的实际采样率高于按研究全程平均算出的期望采样率。这说明缺失率的定义依赖期望采样率的估计方式,跨设备比较时要统一口径。
5.5 用法五:教学与基准套件
五十三人、十列、一张表,这个规模适合做教学数据。
可以让学生用这份数据练:配对误差的计算、混合效应模型的设定、多重比较校正、缺失机制辨析、有序变量与连续变量的区别。这些都是流行病学与临床数据科学的基本功,而这份数据在每个点上都有一个真实存在的坑。
若要做成基准套件,建议切分方式是按受试者划分训练与测试,绝不能按行随机划分——同一受试者的相邻行高度相关,按行划分会让测试集泄漏训练信息,指标虚高。这是所有生理信号数据的通病,这份数据因为行数多、人数少,泄漏的后果尤其严重。
5.6 DAIMS 24 项检查
下表按文档、质量、公平、可复现、治理五个维度逐项判定。判据以官方页面、论文与数据可得性声明的实际披露为准,未披露即判否,不做推测性加分。
| 维度 | 项 | 判定 |
|---|---|---|
| 文档 | 数据字典 | 是(条目页逐列给出十列的列名、单位、采样率说明) |
| 文档 | 采集协议 | 是(四类活动、时长、跑步机速度、心率目标全部写明) |
| 文档 | 设备规格 | 是(六款设备型号、厂商、上市时间、软件版本齐全) |
| 文档 | 标注规范 | 部分(肤色评定方法写明为 Fitzpatrick 主观评定,未给评定者培训细则与一致性) |
| 文档 | 版本历史 | 部分(有版本号与发布日期,无变更说明;另有最新版 DOI 但无差异记录) |
| 文档 | 许可说明 | 是(受限健康数据许可 1.5.0,协议单独列出) |
| 文档 | 引用格式 | 是(含 BibTeX、DOI、RRID) |
| 文档 | 局限披露 | 是(明确写出数据采于 2019 年、厂商软件此后可能更新) |
| 质量 | 缺失披露 | 部分(论文分析了缺失率,但数据表本身不标注哪些空值属于哪种机制) |
| 质量 | 信号质量说明 | 部分(给了误差与缺失两组指标,未给逐段信号质量标签) |
| 质量 | 一致性检验 | 否(同一受试者的肤色评定未做多评定者一致性检验) |
| 质量 | 记录数一致性 | 未知(数据未获取,无法核对行数与文档口径,见 §10.5) |
| 质量 | 编号一致性 | 是(受试者编号在表中恒定,列名与文档一致) |
| 质量 | 采集环境说明 | 是(杜克大学私人研究房间,受控条件已声明) |
| 公平 | 人群构成 | 是(性别、年龄、肤色分层人数均在论文中给出) |
| 公平 | 机构来源 | 是(单一机构,伦理审查已声明) |
| 公平 | 亚组表现 | 是(按六个肤色组、六款设备、四类条件分别报告误差与置信区间) |
| 公平 | 偏倚讨论 | 是(商榷文与作者回应公开,争议本身可查) |
| 可复现 | 代码可用 | 是(GitHub 仓库六个 R 脚本,无限制开放) |
| 可复现 | 环境说明 | 部分(脚本为 R,未给依赖版本锁定与运行说明) |
| 可复现 | 随机种子 | 不适用(协议无随机分配,设备轮次固定) |
| 可复现 | 结果可重算 | 部分(心率层结果可重算,滞后分析因时间戳移除不可完全重算) |
| 治理 | 伦理审批 | 是(杜克大学机构审查委员会批准,知情同意取得) |
| 治理 | 再分发约束 | 是(受限许可,明确禁止再分发,须逐人签署协议) |
统计:是 15 项,部分 7 项,否 1 项,不适用 1 项,未知 1 项。
两项判定值得单独说明。记录数一致性判为「未知」而非「否」,是因为数据未获取,无法像开放条目那样解析文件核对;把它判否等于预设了文档有问题,判是又等于预设文档无误,两者都不诚实。结果可重算判为「部分」,理由在 §2.3 与 §3.3:时间戳移除后,逐时间点配对关系无法还原,误差数值只能近似复算。
5.7 一条不建议的用法
不建议用它训练端到端的心率估计模型。
原因很直接:数据里没有光信号,只有设备输出的心率。用它训练出来的模型学的是「从六款设备的输出预测心电心率」,本质上是一个融合或校正模型,不是测量模型。这类模型在学术上有意义(相当于事后纠偏),但如果论文写成「我们提出了一个更准的心率估计算法」,就与实际做的事不符。
若确实想做校正,也要说清楚它的适用边界:它只对这几款 2016 至 2018 年的设备有效,只在这个协议(四类活动、五十三人、年轻健康)下验证过。
§6 常见误读与引用陷阱
6.1 误读一:把它当成「肤色无关」的证据
这是传播中最常见的走形。
原始论文的表述是未观察到统计显著差异。商榷文指出这个否证不成立(样本量与量表两方面)。作者的回应也只是重申在既有设计下结论成立。
三方都没有说「肤色已被证明不影响光电容积脉搏波」。任何把这份数据当作「肤色无关」证据的引用,都越过了原始材料的边界。
正确的引用方式:这份研究在五十三人、六档 Fitzpatrick 分层、四类活动、六款设备的条件下,未观察到肤色与心率误差之间的统计显著关联;该结论受到样本量与肤色量表两方面的商榷,作者已作回应;两者并存,尚无第三方数据裁决。
6.2 误读二:把设备排名当成普遍结论
论文里消费级整体优于研究级,这个结果被大量转述。
但作者自己指出,显著性主要由 Apple Watch 与 Biovotion Everion 两端驱动。也就是说,这个「档次」结论实际上是被两个极端样本撑起来的,中间的设备之间未必有稳定排序。
而且设备型号是特定的:Apple Watch 4 不是 Apple Watch 系列的通称,Fitbit Charge 2 与后来的 Charge 系列算法不同,Miband 3 与后续型号差异更大。任何「Apple Watch 比 Empatica 准」的表述都需要带上型号与软件版本。
6.3 误读三:把四十三秒滞后当成生理延迟
论文报告心电与可穿戴心率序列的滞后在零到四十三秒之间。
四十三秒显然不是血流从心脏传到手腕的时间(那在几百毫秒量级)。作者列了四种可能来源:时间戳错位、数据处理与上报延迟、低采样率导致的漏拍、心跳到腕部血容量变化的真实延迟。四种里前三种都是设备侧的,只有第四种是生理的。
把四十三秒引用成「脉搏波比心电慢四十三秒」是明显的误读,但在二手文献里出现过。
6.4 误读四:以为数据里有原始光信号
官方列清单里没有一列是光电容积脉搏波原始波形。有研究者在申请数据后才发现这一点,因为论文里讨论了 Empatica E4 的原始绿光信号与心搏间隔序列。
那部分分析用的是实验室内部的原始数据,随 PhysioNet 发布的成品表只到心率层。想做信号级研究,得去申请 Empatica E4 的原始数据(该厂商另有数据共享机制),或者找别的含原始波形的数据集。
6.5 误读五:按行随机划分训练测试
前面提过,这里再强调一次,因为它太容易犯。
同一受试者的相邻行间隔可能只有一秒,心率几乎不变。随机划分会把同一段连续记录切到训练集与测试集两边,模型只要记住「这个人的心率大概是多少」就能拿到很好的指标。
正确做法是按 ID 分组划分,且最好保证肤色分布在各折之间均衡——否则某折可能全是浅肤色,评估就失去了公平性维度的意义。
6.6 误读六:把 Fitzpatrick 档位当连续变量
一到六的整数编码看起来像数值,实际是有序类别。
把它当连续变量放进线性回归,等于假设「从第一型到第二型的差异」与「从第五型到第六型的差异」一样大。这个假设没有依据,而且量表后两档是后来补入的,与前四档的划分逻辑不同。
正确做法是用有序因子做编码,或者改用非参数检验。若一定要给一个连续度量,得用分光光度计读数——而这份公开数据里没有。
6.7 引用时必须写清的五件事
| 项 | 必须写的内容 |
|---|---|
| 样本 | 五十三名完成全协议的参与者,十八至五十四岁,均值二十五点六岁,校园招募 |
| 设备 | 六款具体型号加软件版本,说明是 2016 至 2018 年上市、软件停在 2019 年夏 |
| 参考标准 | Bittium Faros 180 心电贴片,约一千赫兹 |
| 结论口径 | 未观察到统计显著差异,非证明无差异;并注明存在商榷与回应 |
| 数据类型 | 设备输出心率,非原始光信号;时间戳已移除 |
§7 在生态中的位置
7.1 与其它腕戴 PPG 数据集的分工
公开的腕戴光电容积脉搏波数据有几类,路数不同。
一类是信号级数据集,给原始波形加同步心电,用于训练心率估计算法。这类数据的代表是 PPG-DaLiA 一类:十五人、约三十六小时、八类日常活动、腕部 PPG 六十四赫兹配胸部心电七百赫兹,切成一万多个八秒窗,社区用留一受试者协议评测。
另一类是设备级数据集,即这一份这一类:不给波形,给成品心率,重点在比较设备。
第三类是临床数据集,来自重症监护的床旁监护仪,量大但受试者卧床,没有运动伪差,与这一份的场景不重叠。
三类的用途不重叠。想做算法,用第一类;想做设备评估与公平性审计,用这一份;想做临床场景的波形分析,用第三类。混用会出问题——拿这一份去训练波形模型,缺输入;拿第一类去做设备公平性审计,缺多设备并行。
7.2 与同实验室另一份数据的关系
杜克这个实验室在 PhysioNet 上还托管了血糖与可穿戴的那份数据。两份的共同点是多设备并行加配对参考,差异在参考标准的性质:心电是即时的、逐拍的、不受代谢影响的;连续血糖是慢变的、有滞后、受饮食与胰岛素影响。
这个差异决定了分析难度:心率误差可以逐时间点算,血糖误差必须考虑生理滞后与个体差异,模型复杂得多。两份数据放在一起看,能看出一套方法学从简单到复杂的演进。
7.3 在公平性研究里的位置
算法公平性在医学影像领域已有大量数据与基准,在生理信号领域要薄弱得多。原因不难理解:影像数据里的人群属性(性别、种族)通常可以从病历里拿到,而可穿戴数据的采集往往不带这些字段。
这份数据的价值在于它把一个敏感属性(肤色)与一个生物信号(心率)在同一协议下配对。它不完美——量表主观、样本偏小、只有六档——但它是这个方向上少有的公开材料。
用的时候要把它当起点而不是终点。真正要回答「设备在不同人群里是否同样可靠」,需要的是多中心、大样本、客观肤色度量、多代设备的数据。这份数据提供的是方法与争议框架,不是最终答案。
7.4 规模上的定位
五十三人、每人约一小时、三轮,总记录时长在百小时量级——具体时长官方未披露,因为时间戳被移除后无法从表里还原。
这个规模在设备评估研究里属于中等偏上。厂商的内部验证通常几十到几百人但数据不公开;学术界的独立评估多在十到三十人;超过百人的公开数据极少,因为成本随设备数量线性上升。
对这一份的用途(设备横向比较、肤色分层)来说,五十三人按肤色分层后每档七到十人,够做组间比较但不够做交互分析。若想检验「肤色 × 设备」的交互,每格的人数会掉到个位数,统计功效不足。
7.5 适合谁用
适合:做可穿戴设备评估的研究者;做算法公平性审计的团队;需要一份结构极简的配对生理数据做方法学教学的人;写综述需要一份「小样本但设计严谨」的案例的人。
不适合:想训练端到端心率模型的人;想研究原始光信号与运动伪差耦合机制的人;想外推到老年人群或患者群体的人;想直接用 2026 年在售设备结论的人。
§8 这项研究是怎么做的:协议、同步与统计
8.1 三轮协议的安排
每名参与者到实验室一次,完成三轮,每轮约一小时,轮间换设备。
单轮流程固定:静坐四分钟取基线;跟一分钟深呼吸视频同步呼吸;上跑步机步行五分钟,速度二点五到四英里每小时,监控心率达到最大心率的百分之五十且不超过最大心率(最大心率按二百二十减年龄);歇约两分钟等心率回落;坐在机械键盘前打字一分钟。
心电贴片三轮全程佩戴,不摘。
设备分配按轮次:第一轮 Empatica E4 戴右腕、Apple Watch 4 戴左腕;第二轮 Fitbit Charge 2 戴左腕;第三轮 Garmin Vivosmart 3 戴右腕、Xiaomi Miband 3 戴左腕。Biovotion Everion 三轮都戴右上臂,但只用第三轮数据。
这个分配方式有一个隐含的比较限制:Empatica 与 Apple Watch 可以左右手对照(同一轮、不同手),Fitbit 只能与本轮无其他设备(无同轮对照),第三轮三款设备分布在不同手腕与上臂。因此严格的同轮对照只在第一轮成立。
8.2 时钟同步:三级对时
同步方案分三级。
第一级是网络时间协议。实验室里的手机与笔记本先连 Wi-Fi 与网络时间协议服务器(NTPv4)对时,客户端约每十分钟更新一次本机时钟。
第二级是设备对手机。开机前把每台可穿戴与对应的手机或笔记本配对,让设备按 ISO 8601 格式同步时钟。Apple Watch、Fitbit、Garmin、Biovotion 连 iPhone SE;Miband 连 Android 手机;Bittium Faros 与 Empatica E4 连 Windows 笔记本。
第三级是事后对齐,在分析阶段做。
作者自己也承认,可穿戴设备不是精密仪器,对时过程中的处理延迟可能给设备时钟带来毫秒级偏差。这个量级对心率分析影响不大,但对滞后分析有影响——尤其是当真实滞后只有几百毫秒时。
8.3 统计模型的结构
模型是混合效应,随机截距按受试者,因变量是每时间点的心电减设备的心率差。
先跑空模型(只有随机截距),再分别加肤色、条件、设备三个固定效应,最后加肤色与设备的交互。每加一项用似然比检验与空模型比,看拟合是否改善。
显著性阈值零点零一二五,来自三个因素的邦费罗尼校正(零点零五除以四)。
这个结构的关键在于随机截距:它吸收了「某人天生心率偏高或偏低」以及「某人手腕贴合度特别差」这类个体层面差异,让固定效应的估计不被个体差异污染。若改成普通线性回归,个体差异会被算进残差,标准误被低估,容易把不显著做成显著。
8.4 误差的两个口径为什么必须同时报
方向误差的定义是心电减设备,带符号。绝对误差是取绝对值。
只报绝对误差,看不出设备是系统性高估还是系统性低估。只报方向误差,看不出误差的离散程度——平均值接近零可能是「有的高估有的低估相互抵消」,也可能是「确实很准」。
原始论文两个都报,读者因此能看到一个有意思的现象:静息时整体方向误差为负(设备倾向于低估),活动时整体方向误差为正(倾向于高估)。这个符号翻转说明误差不是随机噪声,是有结构的偏倚。
8.5 心率变异性那条支线
论文还做了一项心率变异性的准确性分析,但范围很窄。
原因在数据可得性:心率变异性需要逐拍间隔,而多数可穿戴不提供原始逐拍数据。六款设备里只有 Empatica E4 提供心搏间隔序列。
于是这项分析只用了 E4 一款设备,且只在静息段做(运动伪差会毁掉间隔检测)。指标取了时域的六项:平均心率变异性、最小、最大、相邻间隔差的均方根、全部间隔标准差、以及相邻间隔差超过五十毫秒的比例。频域指标未做,理由是光学传感器上的频域心率变异性尚未充分验证。
结论是各肤色组之间无差异,邦费罗尼校正后的显著性阈值零点零零三三。
这条支线的意义在于它划出了一条界线:这份数据能支持心率层面的公平性审计,心率变异性层面只能勉强做一款设备的一个条件。
§9 术语与口径速查
| 术语 | 本页用法 |
|---|---|
| 光电容积脉搏波 | 用发光二极管照射皮肤、以光电二极管接收、从光强变化中提取血容量搏动的技术;英文缩写 PPG |
| 绿光方案 | 以绿光发光二极管为主光源的 PPG 实现,因血红蛋白对绿光吸收强,是腕戴设备的主流 |
| 心电贴片 | 单导联、贴于胸前的动态心电记录器;此项研究用 Bittium Faros 180,约一千赫兹 |
| Fitzpatrick 量表 | 一九七五年提出的六型皮肤分型,依据肤色与日晒反应;此项研究用其一至六档 |
| von Luschan 量表 | 三十六档肤色比对量表;原始论文采了,未随公开数据发布 |
| 平均方向误差 | 心电心率减设备心率的均值,带符号;正数表示设备低估 |
| 平均绝对误差 | 上述差值的绝对值均值;不区分方向 |
| 缺失率 | 实际样本数相对期望样本数的缺口百分比;期望值按研究全程平均采样率算 |
| 信号串扰 | 周期性肢体运动的光学信号被算法误判为心搏,导致心率锁到运动频率上 |
| 混合效应模型 | 含固定效应与随机效应的回归模型;此项研究用随机截距吸收受试者层面差异 |
| 邦费罗尼校正 | 按比较次数放大显著性阈值的多重比较校正方法 |
| 可变采样率 | 设备按内部策略决定输出时刻,输出间隔不固定 |
§10 事实清单与附录
10.1 核心事实
| 项 | 值 | 来源 |
|---|---|---|
| 全称 | BigIdeasLab_STEP: Heart rate measurements captured by smartwatches for differing skin tones | 条目页 |
| 作者 | Brinnae Bent、Jessilyn Dunn(杜克大学) | 条目页 |
| 版本与日期 | 1.0,2021 年 2 月 10 日 | 条目页 |
| 采集时间 | 2019 年 7 月至 8 月 | 条目页 |
| DOI(本版) | 10.13026/cqfy-d860 | 条目页 |
| DOI(最新版) | 10.13026/z82k-3w96 | 条目页 |
| RRID | SCR_007345 | 条目页 |
| 许可 | PhysioNet Restricted Health Data License 1.5.0 | 条目页 |
| 访问 | 受限,需签署数据使用协议 | 条目页 |
| 完成全协议人数 | 53 | 条目页与论文一致 |
| 招募人数 | 56 | 论文方法学 |
| 剔除人数与原因 | 3,心电记录不完整 | 论文方法学 |
| 性别构成 | 32 女、21 男 | 条目页与论文一致 |
| 年龄范围 | 18 至 54 岁 | 条目页 |
| 年龄均值 | 25.6 岁 | 论文方法学 |
| 肤色分布(一至六型) | 7、8、10、9、9、10 | 论文方法学 |
| 设备数 | 6(4 消费级 + 2 研究级) | 条目页 |
| 协议轮数 | 3 | 条目页 |
| 单轮时长 | 约 1 小时 | 条目页 |
| 数据文件 | 单个 CSV | 条目页 |
| 列数 | 10 | 条目页 |
| 文件体积 | 官方未披露 | 三处均缺 |
| 原始研究 | npj Digital Medicine 3:18(2020),DOI 10.1038/s41746-020-0226-6 | 论文 |
| 商榷文 | npj Digital Medicine 4:38(2021),DOI 10.1038/s41746-021-00408-5 | 论文 |
| 作者回应 | npj Digital Medicine 4:39(2021),DOI 10.1038/s41746-021-00409-4 | 论文 |
| 代码仓库 | github.com/Big-Ideas-Lab/STEP(R 语言,6 个脚本) | 论文数据可得性声明 |
10.2 六款设备
| 列名 | 型号 | 厂商 | 上市时间 | 软件版本 | 采样率 | 档次 |
|---|---|---|---|---|---|---|
| Apple Watch | Apple Watch 4 | Apple(库比蒂诺) | 2018 年秋 | 5.1.3 | 可变 | 消费级 |
| Fitbit | Fitbit Charge 2 | Fitbit(旧金山) | 2016 年秋 | 22.55.2 | 可变 | 消费级 |
| Garmin | Garmin Vivosmart 3 | Garmin(奥拉西) | 2017 年春 | 5.10 | 可变 | 消费级 |
| Miband | Xiaomi Miband 3 | 小米(北京) | 2018 年春 | 未标注 | 可变 | 消费级 |
| Empatica | Empatica E4 | Empatica(米兰) | 未标注 | 2019 年夏 | 约 1 赫兹 | 研究级 |
| Biovotion | Biovotion Everion | Biovotion(苏黎世) | 未标注 | 2019 年夏 | 约 1 赫兹 | 研究级 |
| ECG | Bittium Faros 180 | Bittium(奥卢) | 未标注 | 未标注 | 约 1000 赫兹 | 参考标准 |
10.3 三轮设备分配
| 轮次 | 右腕 | 左腕 | 上臂 | 心电 |
|---|---|---|---|---|
| 第一轮 | Empatica E4 | Apple Watch 4 | Biovotion(戴但不入分析) | Faros 180 |
| 第二轮 | — | Fitbit Charge 2 | Biovotion(戴但不入分析) | Faros 180 |
| 第三轮 | Garmin Vivosmart 3 | Xiaomi Miband 3 | Biovotion(本轮数据入分析) | Faros 180 |
10.4 附录 A:拿到数据后的最短路径
下面这段伪代码按顺序做了四件事:读表、切轮次、算误差、按设备汇总。具体列名以实际文件为准,官方列清单用的是带空格的显示名(如 Apple Watch),CSV 里的表头可能是下划线形式,读入后先打印一次列名再改。
import pandas as pd
import numpy as np
df = pd.read_csv('step.csv')
print(df.columns.tolist()) -- 先确认真实列名
-- 重命名,避免 Activity 自己撞自己
df = df.rename(columns={'Activity': 'condition'})
-- 结构化缺失:某设备整段为空即为该轮未佩戴
-- 按缺失模式给每行打轮次标签
def infer_round(row):
if pd.notna(row.get('Fitbit')):
return 2
if pd.notna(row.get('Garmin')):
return 3
return 1
df['round'] = df.apply(infer_round, axis=1)
-- 单设备误差
devices = ['Apple Watch', 'Empatica', 'Garmin', 'Fitbit', 'Miband', 'Biovotion']
rows = []
for d in devices:
sub = df[['ECG', d, 'condition', 'Skin Tone', 'ID']].dropna(subset=[d])
diff = sub['ECG'] - sub[d]
for cond, g in diff.groupby(sub['condition']):
rows.append({
'device': d, 'condition': cond,
'n': len(g),
'mde': round(g.mean(), 2),
'mae': round(g.abs().mean(), 2),
})
summary = pd.DataFrame(rows)
print(summary.pivot_table(index='device', columns='condition', values='mae'))
三个细节。第一,轮次推断依赖缺失模式,若某行 Fitbit 与 Garmin 都非空(不该出现,但需核),infer_round 会判成第二轮,这是要处理的边界。第二,dropna 之后各设备的样本数不同,横比时要在表里保留 n 列。第三,按 ID 分组时同一人可能在三个轮次里各出现一次,做受试者层面的统计时要先聚到人再聚到组。
10.5 附录 B:六个可立即验证的疑问
第一,CSV 的实际行数是多少,与「每行一个时间点」能不能对上总时长。若把行数乘以平均行间隔,得到的总时长与五十三人乘三轮乘约一小时是否同量级。
第二,六款设备的非空行数各是多少,比例关系是否与轮次安排一致(第一轮两款、第二轮一款、第三轮三款)。
第三,Biovotion 在第三轮之外是否真的整列为空。若第一、二轮有值,说明发布时未按论文口径裁剪,需要自行剔除。
第四,Skin Tone 列的取值分布是否为七、八、十、九、九、十。若不同,说明发布口径与论文不符,两者必有一处需核。
第五,同一 ID 在不同轮次里的 Skin Tone 是否恒定。理论上恒定,若不恒定则是录入错误。
第六,Activity 列在活动切换处是否有过渡行(既非前一段也非后一段)。若没有过渡行,说明切段时刻被向上或向下取整,边界段的误差需谨慎解释。
10.6 附录 C:证据链
| 事实 | 出处 | 核对方式 |
|---|---|---|
| 五十三人完成全协议 | 条目页摘要与方法段 | 两处一致 |
| 招募五十六人、剔除三人 | 论文方法学 | 条目页未提 |
| 肤色分布 7/8/10/9/9/10 | 论文方法学与回应文 | 两处一致 |
| 商榷文写最深组九人 | 商榷文正文 | 与论文的十人不符,本页按论文录,并注明分歧 |
| 十列结构 | 条目页数据描述 | 直接读取 |
| 四类活动 | 条目页与论文 | 两处一致 |
| 三轮设备分配 | 条目页方法段与论文 | 两处一致,但用词略有差异 |
| 零至四十三秒滞后 | 论文信号对齐段 | 直接读取 |
| 四十三秒非生理延迟 | 本页推断 | 依据血流传播时间的生理量级 |
| 分光光度计读数未公开 | 条目页列清单与论文方法学对照 | 列清单无此项 |
| 缺失率负十四点二 | 论文缺失分析段 | 直接读取,含义见 §5.4 |
| 显著性阈值 0.0125 | 论文方法学 | 直接读取 |
编辑说明
本页基于 PhysioNet 条目页(2026-10-19 取)、npj Digital Medicine 2020 年原始论文、2021 年商榷文与作者回应、以及 GitHub 仓库说明写成。四处材料互有出入的地方已在正文标注,未擅自统一。
受限访问这一条对本页的取材有实质影响:数据文件未获取,因此 §2 关于行数、缺失分布、肤色计数的描述全部来自官方文档而非本页解析。§10.5 列的六个疑问正是本页无法自行验证、留给拿到数据的人去核的项。这与若干完全开放条目不同,那些条目里的数字可以是本页解析统计所得,这一份不能。
§1.3 的黑色素吸收链条、§2.3 的窗宽差异后果、§8.3 关于随机截距作用的说明,属于技术背景与推断,非官方结论。§4.6 关于组内变异的讨论是商榷文论点的展开,作者在回应中未接受,本页按「争议未决」处理。
凡涉及设备优劣的表述,均限定在具体型号与 2019 年夏的软件版本内。厂商此后推送的更新未被覆盖,这一点在 §4.8 与 §6.2 重复提示,因为它是这份数据最容易被忽视的时效性边界。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- echonext — 共享标签:生理信号 / 心血管疾病 / 评测基准 / 多模态
- cves — 共享标签:生理信号 / 心血管疾病 / 多模态
- heartcycle — 共享标签:生理信号 / 心血管疾病 / 多模态
- bigp3bci — 共享标签:生理信号 / 评测基准 / 多模态
- neurocritical-pediatric — 共享标签:生理信号 / 心血管疾病 / 评测基准
- multimodal-surgery-anesthesia — 共享标签:生理信号 / 心血管疾病 / 评测基准
- circor-heart-sound — 共享标签:生理信号 / 心血管疾病 / 评测基准
- visem — 共享标签:生理信号 / 评测基准 / 多模态
- cerebral-vasoreg-diabetes — 共享标签:生理信号 / 心血管疾病 / 多模态
- daic-woz — 共享标签:生理信号 / 评测基准 / 多模态
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

