信息速览
2020 年春天,检测试剂不够用这件事,比病毒本身更早成为公共政策的瓶颈。一个城市一天只能做几千份核酸,这几千份该给谁做?当时的通行答案是按症状排队:发烧、咳嗽、味觉丧失的人优先。可新冠有相当一部分传播发生在症状出现之前,按症状排队等于把这部分人系统性地排在队尾。另一条路是让连续数据来排队:手腕上的智能手表每天都在记静息心率与步数,这两条曲线在感染前后会偏离本人基线,而且偏离出现的时间比症状更早。CovIdentify 就是为验证这条路径而做的一次大规模招人:杜克大学生物医学工程系 BIG IDEAs Lab 从 2020 年 4 月 2 日到 2021 年 5 月 25 日,通过 REDCap 拿到了 7,348 人的电子知情同意,其中 2,887 人把自己的智能手表接进了平台——1,689 块 Garmin、1,091 块 Fitbit、107 块 Apple Watch。
它稀缺的地方在于「配对」:同一批人既有逐日的客观生理序列,又有逐日的自报问卷,问卷里还带着诊断检测结果。多数新冠数据集只占其中一边——影像库有片子没有生活日志,声音库有录音没有检测结果,可穿戴库有信号没有问卷。真正能拿来回答「检测资源有限时先测谁」这一问的开放数据,屈指可数。
代价同样直白:它受限访问,要签数据使用协议并提供 CITI 培训证明;检测结果全部来自自报,官方明写没有做过外部验证;绝对日期被抹掉,只剩相对入组的天数。它不是一份下载下来就能跑的大表,是一份必须先把口径对齐才能用的纵向配对数据。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | CovIdentify Dataset,版本 1.0.0 |
| 发布方 | PhysioNet(MIT 计算生理学实验室维护);数据由杜克大学生物医学工程系 BIG IDEAs Lab 提供 |
| 署名作者 | Peter Cho、Md Mobashir Hasan Shandhi、Ali Roghanizad、Jessilyn Dunn |
| 首次发布 | 2024 年 11 月 25 日,版本 1.0.0 |
| 最近改动 | 无;Release Notes 只写「Version 1.0.0: Initial release.」 |
| 同意与入组 | 7,348 人经 REDCap 电子知情同意;6,765 人完成入组问卷(37–61 题,分支逻辑) |
| 设备接入 | 2,887 人接入智能手表:1,689 Garmin、1,091 Fitbit、107 Apple |
| 问卷规模 | 362,108 份每日问卷,由 5,859 名不重复参与者完成 |
| 时间跨度 | 入组窗口 2020-04-02 至 2021-05-25;绝对日期已删除,仅保留相对入组天数 |
| 信号类型 | 日级静息心率、日级步数;心率文件另附当日观测数、最小值、中位数、均值与 q10 |
| 原始分辨率 | 由更高分辨率的分钟级或 15 分钟级数据汇总而来 |
| 标注方式 | 无人工专家标注;标签来自参与者自报的检测结果,官方明写未经外部验证 |
| 文件格式 | CSV(官方描述中出现的文件为问卷文件与 rhr、step 两个可穿戴文件) |
| 许可与访问 | PhysioNet Credentialed Health Data License 1.5.0 + DUA 1.5.0;须凭证化并完成 CITI「Data or Specimens Only Research」培训 |
| 典型用途 | 纵向数字健康研究中的填答行为建模、可穿戴数字生物标志物与自报检测结果的配对分析 |
§1 它要解决的具体麻烦
1.1 检测资源不够时,排队规则由谁定
大规模筛查的瓶颈从来不是「有没有检测手段」,而是「同一天能测多少人」。在试剂、采样点、检验人员都有限的条件下,每一次检测都是一次分配决策:给这个人测,就等于那个人或这批人今天测不上。衡量分配好坏的指标是阳性率——同样检测一千份,检出一百个阳性和检出二十个阳性,对疫情控制的意义完全不同。
提高阳性率有两条路。第一条是症状筛查:让有症状的人优先。这条路便宜、易执行,但漏掉了潜伏期与无症状感染者,而这两类人正是疫情防控里最难被发现的。第二条是数据排序:不看症状,看连续生理指标相对本人基线的偏离,把偏离最明显的人排到队首。这条路不依赖参与者是否自觉报告症状,理论上能同时覆盖有症状与无症状者。
CovIdentify 支持的就是第二条路。它的设计目标写在官方摘要里:用静息心率、步数这类连续数字生物标志物提高诊断检测的阳性率,从而在检测短缺时缓解分配压力。这个目标决定了它的形态——不是横断面快照,而是一批人被连续观察若干个月的纵向记录;不是只有信号,而是信号与自报问卷并行。
1.2 三条常见的错误期待
第一条,期待它是「带核酸确诊标签的可穿戴数据集」。它的检测结果全部来自参与者自己在问卷里填的内容,官方在 Usage Notes 里明确写着:参与者的报告可能不可靠,因为没有对其检测结果做过外部验证,这一局限同样适用于问卷里的其他任何问题。把它当成有实验室确诊标签的监督数据来用,等于把自报噪声当成了金标准。
第二条,期待它有原始的高频信号。发布的是日级汇总值:一天的静息心率、一天的总步数。分钟级或 15 分钟级的原始数据只被用来计算这些汇总量,并没有随数据集发布。想做心律失常检测、逐分钟活动识别这类需要高频波形的任务,这份数据给不了。
第三条,期待它是一份「队列完整、人人有标签」的表。7,348 人同意,6,765 人入组,2,887 人接了手表,5,859 人填过每日问卷,1,289 人报告过至少一次检测结果。这五个数字一层层往下降,每一层都有各自的分析口径。把它们混用,最常见的后果是把「没有报告检测结果」当成「阴性」。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 数字生物标志物与感染状态的配对建模 | 日级静息心率 + 步数 + 自报检测结果 | 够,这是它设计出来要干的事 |
| 检测资源分配策略的仿真 | 可按模型打分排序,计算子人群阳性率 | 够,官方论文就是用这个口径做的 |
| 纵向研究的填答行为与留存分析 | 362,108 份每日问卷 + survey_filled 三态 | 够,且是官方明列的用途之一 |
| 多品牌可穿戴设备的一致性比较 | 三个品牌(Garmin / Fitbit / Apple)在同一平台 | 够做品牌层面的对照,不能做机型层面 |
| 无症状感染的早期信号研究 | 症状问卷与生理序列并行,可分离症状与信号 | 可做探索,阳性样本只有 132 人 |
| 高频生理波形分析 | 只发布日级汇总 | 不够,原始数据未公开 |
| 有实验室确诊标签的分类基准 | 自报结果,无外部验证 | 不够,标签可信度上限受限于自报 |
| 人群代表性推断 | 社交网络与社交媒体广告招募,官方承认与全美人口结构有偏差 | 不够,只适合做方法学验证 |
| 绝对日期层面的流行病学时序分析 | 日期已删除,只剩相对天数 | 不够,无法对齐外部疫情曲线 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在做可穿戴异常检测,缺一份带结局标签的真实队列 | 提供 2,887 人的日级序列与 1,289 人的自报结局 | 先只用有报告结果的人建标签,把其余人标为未知而非阴性(§5.5) |
| 你在做纵向研究的依从性建模 | 提供 36 万余份每日问卷的填答状态三态 | 用 survey_filled 做状态序列,注意 3 代表退出研究而非缺失 |
| 你想验证「症状无关筛查」是否可行 | 同时有症状问卷与生理序列,可按症状分层比较 | 把有症状与无症状两组分开评估,别合并报一个数 |
| 你在比较不同品牌手表的数据质量 | 三个品牌在同一协议下采集 | 按品牌分别建模,把品牌作为协变量写进模型 |
| 你要复现 ITA(智能检测分配)方法 | 官方给出配套代码库与论文 | 按论文口径重建偏差特征,注意口径差异(§7.4) |
| 你想做公共卫生政策仿真 | 阳性率提升倍数是这篇数据的核心指标 | 明确你的基线是随机分配,否则倍数无可比性 |
1.5 一句话判断
它不是一个「更大的新冠数据集」,而是一把用来量「连续生理数据能不能替代症状去排队」的尺子——尺子上刻的是阳性率,不是准确率。
1.6 不适合谁:四条边界
不适合做临床诊断模型的训练与评测。 标签是自报的,官方明写未做外部验证。用它训练出的分类器,其性能上限被自报误差封住,报告出来的数字不能与基于实验室确诊的研究直接比较。
不适合做波形级或分钟级的算法研究。 发布的是日级汇总,分钟级与 15 分钟级数据只作为计算依据存在。任何需要原始采样率的算法都无法在这份数据上跑。
不适合做人群层面的流行病学推断。 招募靠社交网络与社交媒体广告,入组条件是年满 18 岁且有互联网接入。官方自己承认入组人群的构成与美国新冠阳性及死亡人群、以及 2020 年美国人口普查的整体构成存在明显差异,研究期间通过向代表性不足人群提供可穿戴设备来做缓解。这意味着它的人群构成不等于任何自然人群。
不适合做绝对时间轴上的时序分析。 日期信息被删除,只剩相对入组的天数,且负数的含义官方定义为「检测之前的天数」。想把它与公开疫情曲线、疫苗接种时间线对齐,缺少锚点。
§2 数据构成与规格
2.1 三份文件与它们的分工
官方数据描述里点名的文件有三类:一个问卷文件(文件名在描述中写作 covidentify_survey_upload.csv),以及两个可穿戴设备文件——rhr(静息心率)与 step(步数)。三者的分工很清晰:问卷文件承载自报信息,两个可穿戴文件承载客观测量,三者通过去标识后的参与者标识对齐。
需要提醒的是,这份资源是受限访问的,官方文件目录在未登录或未完成凭证化时返回 403,因此文件的确切命名与完整清单只能以官方描述中点出的名称为准,其余内容应在获得访问权后以目录实际内容核对(§5.1)。这一条不是免责,而是使用方法:拿到权限后的第一件事应该是列目录,而不是照着任何二手清单去拼路径。
| 文件 | 承载内容 | 粒度 | 与其他文件的连接键 |
|---|---|---|---|
covidentify_survey_upload.csv |
入组问卷 + 每日问卷的全部自报字段 | 一行 = 一位参与者的一次问卷事件 | hash_id + 相对天数 |
rhr(静息心率文件) |
日级静息心率及其衍生统计量 | 一行 = 一位参与者的一个观测日 | hash_id + 相对天数 |
step(步数文件) |
日级总步数 | 一行 = 一位参与者的一个观测日 | hash_id + 相对天数 |
2.2 字段字典
下表把官方描述里逐条写明的字段含义列出来。这份数据的「字段」不是仪器通道,而是问卷题项与设备汇总量,含义以官方描述为准。
| 字段 | 所在文件 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|---|
hash_id |
三个文件共有 | 字符串 | 去标识化并随机化后的参与者唯一标识 | 唯一的跨文件连接键,不要假设它有序或可回溯 |
day(相对天数) |
三个文件共有 | 整数,可为负 | 相对入组的天数;官方定义为负数为检测之前的天数 | 不是日历日期,绝对日期已被删除 |
survey_filled |
问卷文件 | 1 / 2 / 3 | 1 = 已填,2 = 未填,3 = 退出研究 | 把它当「缺失」会丢掉退出研究这一语义 |
redcap_event_name |
问卷文件 | consent_arm_1 / baseline_arm_1 等 |
问卷类型;前者为知情同意第一天,后者为该参与者入组第二天 | 入组期与随访期要分开处理 |
Ethnicity |
问卷文件 | 1 / 0 / 999 | 1 = 西班牙裔或拉丁裔,0 = 否,999 = 未说明 | 999 不等于缺失,是有明确语义的第三类 |
| 症状相关题项 | 每日问卷 | 问卷题项 | 症状、社交距离、检测结果及相关信息 | 每日问卷在 2021 年 2 月起加入疫苗接种问题 |
| 疫苗接种题项 | 每日问卷(2021-02 起) | 问卷题项 | 接种日期、疫苗品牌、疫苗相关症状、剂次 | 2021 年 2 月之前不存在这些题项 |
Value |
心率文件 | 数值 | 设备上报的当日静息心率 | 不是全天平均心率 |
| 当日观测数 | 心率文件 | 整数 | 该日参与计算的观测点数量 | 观测数少的日子,汇总值稳定性差 |
heartrate_min |
心率文件 | 数值 | 当日心率最小值 | 由更高分辨率数据算出 |
heartrate_median |
心率文件 | 数值 | 当日心率中位数 | 同上 |
heartrate_mean |
心率文件 | 数值 | 当日心率均值 | 同上 |
heartrate_q10 |
心率文件 | 数值 | 官方原词为 10 percentile heart rate | 官方定义的值,不是事后推算量 |
| 步数 | 步数文件 | 整数 | 当日总步数 | 24 小时内的步数值求和 |
2.3 一条记录的完整解剖
以「一位参与者的一天」为例。在问卷文件里,这天可能对应一行:hash_id 是某个哈希串,day 是比如 -3(入组或检测之前第三天),redcap_event_name 标明这是哪一种问卷,survey_filled 是 1 表示填了,Ethnicity 是 0 或 999 之类的取值,后面跟着这一天的症状题项、社交距离题项与检测结果题项。如果这天他退出了研究,这一行的 survey_filled 会是 3。
在心率文件里,同一位参与者、同一个相对天数会有另一行:Value 是设备上报的当日静息心率,旁边并排着当日观测数、heartrate_min、heartrate_median、heartrate_mean、heartrate_q10。在步数文件里,同样位置是一行当日总步数。
把三行拼起来,得到的是一个人在某一天的完整切片:客观侧有两个数字(心率、步数),主观侧有一组自报答案。这就是它的最小分析单元。很多研究问题——比如「偏离基线多少天之后会出现阳性报告」——正是在这条切片序列上定义的。
一个容易被忽略的结构事实:心率文件里的五个统计量不是五个独立测量,而是同一批高频数据的不同汇总方式。把它们当成五个特征直接喂进模型,会带来高度共线;把它们当成「同一个量的不同稳健性版本」,则可以用来判断某一天的汇总值可不可信。
2.4 主键映射:hash_id、相对天数与问卷类型
| 键 | 粒度 | 由它决定的分组 | 常见误用 |
|---|---|---|---|
hash_id |
参与者 | 按人划分训练/测试集的唯一依据 | 按行随机切分会导致同一人两侧都有 |
day(相对天数) |
观测日 | 时间序列的排序与窗口切分 | 把它当日历日期做外部对齐 |
redcap_event_name |
问卷事件类型 | 区分入组期与随访期 | 把入组问卷与每日问卷混在一张表里统计 |
survey_filled |
填答状态 | 区分已填、未填、退出研究 | 把 2 与 3 都当缺失,丢掉退出语义 |
| 设备品牌 | 参与者属性 | 品牌层面的分层建模 | 在混合品牌上跑单模型却不报分组结果 |
主键映射里最要紧的一条是 hash_id。参与者被去标识化并随机分配了一个唯一哈希标识,这是三个文件之间唯一的连接键。任何按人划分数据集的操作都必须以它为分组键——按行随机切分会让同一个人的第 -3 天进入训练集、第 -2 天进入测试集,模型只要记住这个人的基线水平就能在测试集上白拿分,而这个能力换到另一个人身上完全失效。
第二条要紧的是相对天数的方向。官方定义负数为检测之前的天数,这与「感染前」不是一回事:检测日期本身就晚于感染日期,而自报的检测日期还可能滞后于实际采样日。用相对天数定义「感染前窗口」时,这个偏差会直接进入结论。
2.5 与同类资源的字段差异
| 对比项 | CovIdentify | 剑桥新冠声音库 | Coswara | COUGHVID |
|---|---|---|---|---|
| 采集物 | 智能手表日级生理汇总 + 问卷 | 手机录音(咳嗽、呼吸、语音)+ 问卷 | 手机录音(咳嗽、呼吸、语音)+ 问卷 | 众包咳嗽录音 |
| 时间结构 | 纵向,逐日重复 | 多为单次或少量重复 | 多为单次 | 单次片段 |
| 核心变量 | 静息心率、步数 | 声学特征 | 声学特征 | 声学特征与专家听判 |
| 结局标签 | 自报诊断检测结果 | 自报检测状态 | 自报健康状态 | 众包与专家标注 |
| 与外界对齐能力 | 日期已删,只剩相对天数 | 有采集时间戳 | 有采集时间戳 | 无个体级时间轴 |
| 适配的任务 | 检测资源分配、依从性建模 | 声学筛查 | 声学筛查 | 咳嗽音分类 |
这张表要说清的只有一件事:同是「新冠相关的开放数据集」,采集物与时间结构完全不同。声音类资源回答的是「声音里有没有信号」,CovIdentify 回答的是「连续生理数据能不能用来排队」。两者的标签来源也完全不同——声音库的结局标签同样是自报,但它的输入是数秒音频,而 CovIdentify 的输入是数月的日级序列。
2.6 两条日级曲线的物理含义
| 变量 | 物理含义 | 官方给出的计算口径 | 影响它的非病理因素 |
|---|---|---|---|
| 静息心率(设备上报值) | 设备在静息时段给出的当日静息心率 | 设备自行计算后上报 | 佩戴时长、睡眠时段、设备算法版本 |
| 静息心率(高分辨率重算) | 统一定义下的日级静息心率 | 官方代码库说明:汇总午夜到早上 7 点之间、且无步数记录的高频心率点 | 作息、夜班、夜间起床 |
| 当日总步数 | 24 小时内步数值求和 | 官方代码库说明:24 小时记录求和 | 是否全天佩戴、通勤方式、天气 |
| 当日观测数 | 参与汇总的高频观测点数量 | 由原始分辨率决定 | 佩戴时长、蓝牙同步频率 |
| 心率最小值 / 中位数 / 均值 / q10 | 同一批高频数据的不同汇总 | 由分钟级或 15 分钟级数据算出 | 佩戴时长、运动时段占比 |
口径这一列值得单独强调。官方代码库给出的统一定义是:把午夜到早上 7 点之间、且没有步数记录的高频心率点汇总起来作为当日静息心率;步数则是 24 小时内所有步数值求和。这个定义的意义在于跨品牌可比——Garmin、Fitbit、Apple 各自的静息心率算法不同,直接混用等于把品牌差异当成生理差异。数据集同时保留了「设备上报值」与「统一定义重算值」两套口径,使用者必须明确自己用的是哪一套。
这也解释了为什么官方心率文件里既有 Value 又有四个统计量:前者的口径取决于设备,后者由统一流程从高频数据算出。把它们混在一个特征向量里而不区分来源,是这份数据最容易犯的分析错误之一。
§3 它是谁的数据
3.1 贡献者与机构
官方页面署名的四位作者是 Peter Cho、Md Mobashir Hasan Shandhi、Ali Roghanizad 与 Jessilyn Dunn,机构均为杜克大学(Duke University)。数据来自杜克大学生物医学工程系的 BIG IDEAs Lab 发起的 CovIdentify 研究,项目官网是 https://covidentify.covid19.duke.edu/,托管与发布由 PhysioNet 承担。
机构属性值得留意。BIG IDEAs Lab 是做「大数据智能健康」的工程实验室,不是临床检验科室,这解释了数据形态上的两个特点:第一,采集物是消费级设备而不是医疗级仪器,因为工程实验室要的是「大规模、真实世界、低成本」;第二,数据从一开始就是为算法而组织的——日级汇总、统一口径、问卷与信号对齐,这些都不是事后整理出来的,而是研究设计的一部分。
同一实验室在库内还有其他可穿戴相关数据集,但采集目的与变量完全不同(§6.1),不要因为它们同属一个实验室就假定字段结构一致。
3.2 时间线
| 时间 | 事件 | 意义 |
|---|---|---|
| 2020-04-02 | CovIdentify 研究启动,杜克大学伦理委员会批件号 2020-0412 | 队列开始招募 |
| 2020 年内 | 探索性分析发现入组人群构成与美国新冠阳性/死亡人群及 2020 年人口普查构成差异明显 | 官方开始向代表性不足人群提供设备以缓解偏差 |
| 2021-02 | 每日问卷加入疫苗接种问题(接种日期、品牌、疫苗相关症状、剂次) | 问卷字段在这一时点前后不一致 |
| 2021-05-25 | 数据收集窗口截止 | 此后不再有新入组 |
| 2022-04-01 | 方法学论文预印本发布(智能检测分配,ITA) | 方法先于数据公开 |
| 2022 | 论文正式发表于 npj Digital Medicine(s41746-022-00672-z) | 数据集的科学背景定型 |
| 2024-11-25 | 数据在 PhysioNet 发布,版本 1.0.0 | 首次公开,至今仅此一版 |
时间线里有两个值得注意的间隔。第一个是数据收集结束(2021 年 5 月)与数据发布(2024 年 11 月)之间隔了三年半,这意味着任何「用它做实时预警」的设想都不成立——它是历史队列。第二个是论文先于数据发布,也就是说论文里报告的结果无法用发布版数据逐字重算(§7.4),因为论文用的分析样本与发布数据的口径并不相同。
3.3 采集场景:三个品牌、两条通道、一份问卷
| 采集层 | 具体做法 | 官方说明 |
|---|---|---|
| 入组条件 | 年满 18 岁、有互联网接入 | 官方 Methods 段 |
| 招募方式 | 社交网络与社交媒体广告 | 官方 Methods 段 |
| 知情同意 | 通过 REDCap 系统完成电子知情同意 | 7,348 人 |
| 入组问卷 | 37–61 题,带分支逻辑 | 6,765 人完成 |
| 数据捐赠 | 入组时可选择捐赠 12 个月回顾性可穿戴数据与 12 个月前瞻性数据 | 官方说明为可选项 |
| Apple 通道 | 通过 CovIdentify iOS 应用接入 Apple HealthKit(如 Apple Watch) | 官方 Methods 段 |
| 其他品牌通道 | 通过厂商 API 接入(Garmin、Fitbit) | 官方 Methods 段 |
| 问卷语言 | 英语或西班牙语 | 官方 Methods 段 |
| 问卷投递方式 | iOS 应用、短信和/或电子邮件 | 官方 Methods 段 |
| 存储与分析环境 | 数据存放在 Microsoft Azure,分析在 Azure Machine Learning 环境完成 | 官方 Methods 段 |
采集场景决定了三件事。第一,它是「自带设备」研究(BYOD),参与者用自己的手表,品牌、型号、固件版本、佩戴习惯都不统一——这是真实世界研究的常态,也是它的价值所在,同时是任何跨品牌比较必须处理的混杂。第二,问卷通过三种渠道投递且有英西双语,意味着填答行为的差异里混着渠道与语言因素。第三,数据捐赠是「可选」的回顾 12 个月加前瞻 12 个月,不同人的有效观测窗口长度并不一致。
3.4 数据来源的四个层次
理解这份数据要先分清四层:知情同意层(7,348 人)、入组问卷层(6,765 人)、设备接入层(2,887 人)、结局报告层(1,289 人,其中 132 人阳性、1,157 人阴性)。每一层都是上一层的子集,但子集关系不等于因果关系——没接手表的人不等于没被感染,没报告检测结果的人不等于阴性。
| 层次 | 人数 | 缺失的原因 | 能否反向推断 |
|---|---|---|---|
| 知情同意 | 7,348 | 无 | 基准层 |
| 完成入组问卷 | 6,765 | 同意后未完成问卷 | 不能推断为退出 |
| 接入智能手表 | 2,887 | 没有手表或不愿授权 | 不能推断为不佩戴或不感染 |
| 填过每日问卷 | 5,859 | 入组后未填每日问卷 | 不能推断为失访,也可由 survey_filled=3 明确标出 |
| 报告至少一次检测结果 | 1,289 | 未做检测或未报告 | 不能推断为阴性 |
这张表最关键的一行是最后一行。把 1,289 人之外的所有人都标成阴性,会让阴性样本瞬间膨胀到数倍,阳性率与相关的一切指标都会失真。正确做法是把他们标为未知,并在敏感性分析里检验不同假设下的结论稳定性。
§4 它最独特的东西
4.1 客观序列与自报问卷的配对为什么稀缺
做一份「只有问卷」的新冠数据集不难:发一份在线表单就能收几十万份。做一份「只有信号」的可穿戴数据集也不难:只要能拿到设备授权。难的是把两者按人、按天对齐,而且持续足够长的时间——因为这需要参与者在数月里既戴着设备又天天填问卷,任何一环断掉,配对就失效。
CovIdentify 之所以能做到,靠的是两个设计。第一是问卷投递的多渠道:iOS 应用、短信、电子邮件三路并进,把单渠道疲劳造成的损失降到最低。第二是数据收集走的是设备厂商的既有接口(Apple HealthKit 与各厂商 API),参与者不需要额外佩戴任何研究专用设备。
代价也很清楚:362,108 份每日问卷由 5,859 人完成,官方给出的每人完成份数是均值 62、中位数 37。均值明显高于中位数,说明少数参与者贡献了大量问卷,多数人填得少。这个分布形态意味着任何按「问卷条数」加权的分析都会被少数高依从者主导,官方把这一点明列出来,本身就是对使用者的提醒。
4.2 差异化证据:它证明了什么
| 结论 | 出处 | 对使用者的含义 |
|---|---|---|
| 静息心率特征比步数特征更早区分阳性与阴性,可早至检测前 10 天与 5 天 | 官方论文摘要 | 心率是主信号,步数是补强 |
| 在心率特征基础上加入步数特征,AUC-ROC 提高 7–11% | 官方论文摘要 | 两个模态互补,不要只用一个 |
| 在步数特征基础上加入心率特征,AUC-PR 提高 38–50% | 官方论文摘要 | 在不平衡场景下心率的边际价值更大 |
| 最好成绩来自单一品牌(Fitbit)+ 分钟级高分辨率数据,交叉验证集 AUC-ROC 0.73±0.14、独立测试集 0.77 | 官方论文摘要 | 混合品牌会稀释性能,按品牌分层是必要的 |
| 智能检测分配使阳性率最高提升 6.5 倍(交叉验证集)与 4.5 倍(独立测试集),覆盖有症状与无症状者(无症状占比最高 27%) | 官方论文摘要 | 方法的核心卖点是「检测配额不变、检出更多」 |
上表的价值在于把「它有什么用」具体化。这张表里的每一个数字都来自官方论文摘要,不是从数据里重新算出来的。它们共同说明一件事:这份数据的设计目标是排序而不是诊断——评价指标是阳性率提升倍数,AUC 只是中间量。
这也解释了为什么它的 AUC 数值看起来并不惊艳(0.73–0.77)。在低患病率的人群里做筛查排序,绝对 AUC 本来就不会高;真正有意义的指标是「在只能测 10%–30% 人口的前提下,排队后排在前面的那批人里有多少阳性」。用诊断模型的尺子去量它,会得出「效果一般」的错误结论。
4.3 具体案例:一条完整的时间线怎么读
设想一位参与者:4 月入组,redcap_event_name 里先出现 consent_arm_1(同意当天)再出现 baseline_arm_1(第二天);随后三个月里,问卷文件里陆续出现他的每日问卷行,survey_filled 大部分是 1,偶尔是 2(这天没填),最后一行是 3(退出研究)。同一时期,心率文件与步数文件里按 hash_id 与相对天数各有一串行。
要做的是三件事:第一,把他的日级心率序列按相对天数排序,取入组后前 14 天作为基线窗口;第二,计算每一天相对基线的偏离(官方论文用的是 delta、归一化 delta、标准化 delta、z 分数四类偏差指标,再取均值、中位数、最大、最小、极差作为特征);第三,把偏离序列与他的检测结果报告日对齐,看偏离出现在报告日之前多少天。
| 步骤 | 操作 | 输出 | 判断点 |
|---|---|---|---|
| 1 | 按 hash_id + day 排序并去重 |
一条按天排列的序列 | 同一天多条时明确取哪一条 |
| 2 | 定义基线窗口(如入组后 14 天) | 每个人的基线水平与波动范围 | 窗口太短基线不稳,太长会吃掉早期偏离 |
| 3 | 计算四类偏差指标 | 逐日的偏离序列 | 四类指标口径不同,别混着报 |
| 4 | 对偏差序列取汇总统计量 | 每人一组特征 | 官方取均值、中位数、最大、最小、极差 |
| 5 | 与检测结果对齐并评估排序 | 阳性率提升倍数 | 基线对照必须是随机分配 |
这套流程的价值不在于复现某个数字,而在于它把「日级序列」变成了「可排序的分数」。任何想用这份数据做方法学工作的人,都要先走过这五步——跳过第 2 步直接算偏离,等于把基线本身当成参照系之外的东西。
4.4 标注的粒度:自报两层,无专家层
| 标注层 | 内容 | 生成方式 | 可信度边界 |
|---|---|---|---|
| 客观测量层 | 日级静息心率、步数及其统计量 | 设备采集 + 统一口径汇总 | 受佩戴时长与品牌算法影响 |
| 自报结局层 | 是否做过检测、检测结果 | 参与者在问卷中填写 | 官方明写未做外部验证 |
| 自报状态层 | 症状、社交距离、疫苗接种 | 参与者在问卷中填写 | 同上,且字段在 2021-02 前后不一致 |
| 填答状态层 | survey_filled(1/2/3) | 系统记录 | 明确,但 3 的语义是退出而非缺失 |
这份数据没有专家标注层。没有医生复核、没有实验室确认、没有专家听判(这与声音类数据集不同,后者往往有专家标注环节)。所有标签都来自参与者本人,官方在 Usage Notes 里把这一点直接写成局限,并说明这一局限适用于问卷里的其他任何问题。
这意味着分析方法上要做一个选择:要么接受自报标签的噪声,在结论里明确写出「标签未经外部验证」;要么做敏感性分析,假设一部分自报阳性实际为阴性(反之亦然),看结论是否翻转。两种做法都比「默认标签为真」更诚实。
4.5 边界条件:什么情况下它不再适用
| 条件 | 是否适用 | 判断依据 |
|---|---|---|
| 研究检测资源分配策略 | 适用,且是最贴合的用途 | 数据集就是为此设计的 |
| 研究纵向研究的填答行为 | 适用,官方明列 | 36 万余份问卷 + 三态填答标记 |
| 研究品牌间数字生物标志物的一致性 | 适用 | 三个品牌同一协议 |
| 训练临床级诊断模型 | 不适用 | 标签为自报,未做外部验证 |
| 训练需要波形的算法 | 不适用 | 只发布日级汇总 |
| 做人群代表性的流行病学推断 | 不适用 | 招募方式与人群偏差官方已承认 |
| 与外部疫情曲线做时间对齐 | 不适用 | 绝对日期已删除 |
| 做机型层面的设备精度比较 | 不适用 | 官方只给到品牌层面 |
| 做儿童或青少年研究 | 不适用 | 入组条件为年满 18 岁 |
§5 怎么拿到
5.1 目录结构与下载面
这份资源是受限访问(restricted-access)。官方页面在 Access 区块写明:只有签署了数据使用协议(DUA)的凭证化用户才能访问文件;许可为 PhysioNet Credentialed Health Data License 1.5.0,协议为 PhysioNet Credentialed Health Data Use Agreement 1.5.0,所需培训为 CITI「Data or Specimens Only Research」。
在未满足上述条件时,https://physionet.org/files/covidentify/1.0.0/ 直接返回 403。因此目录结构无法在公开状态下逐项核对,能确认的是官方描述中点名的三类文件。
| 路径形态 | 内容 | 可获得性 |
|---|---|---|
https://physionet.org/content/covidentify/1.0.0/ |
项目主页(摘要、方法、数据描述、使用说明、伦理、参考文献) | 公开可读 |
https://physionet.org/files/covidentify/1.0.0/ |
文件目录 | 需凭证化 + CITI 培训 + 签署 DUA |
covidentify_survey_upload.csv |
问卷数据(官方描述中的文件名) | 同上 |
rhr 文件 |
日级静息心率及衍生统计量 | 同上 |
step 文件 |
日级总步数 | 同上 |
| 可能存在的说明文件 | 字段说明、清单文件 | 获得权限后以目录实际内容为准 |
拿到权限后的第一件事应该是列目录并逐文件核对,而不是照任何二手清单拼路径——受限资源的文件命名常有细微出入,而字段说明文件(若有)的权威性高于任何转述。
5.2 批量下载
#-- CovIdentify 为受限访问资源:需先在 physionet.org 完成凭证化(credentialing)、
#-- 提交并通过 CITI "Data or Specimens Only Research" 培训,再签署本项目的 DUA
#-- 之后才可以下载文件。下面用 wget 走带认证的递归下载。
wget -r -N -c -np --user <你的 PhysioNet 用户名> --ask-password \
https://physionet.org/files/covidentify/1.0.0/
#-- 官方也提供命令行工具 physionet-client,登录一次后可直接同步整个版本目录
#-- 安装:pip install physionet-client
physionet login
physionet download covidentify/1.0.0 ./covidentify
#-- 下载完成后先列目录,确认实际文件名与官方描述是否一致
ls -lh ./covidentify
第二段特意写出来,是因为受限资源的文件命名可能与官方描述中的写法略有出入(描述里写的是 rhr 与 step 两个文件的用途,不一定等于磁盘上的字面文件名)。列目录这一步不能省。
5.3 读取方式
import pandas as pd
#-- 问卷文件:一行 = 一位参与者的一次问卷事件(入组问卷或某一天的每日问卷)
survey = pd.read_csv('covidentify_survey_upload.csv', low_memory=False)
print(survey.shape)
print([c for c in survey.columns if c.lower() in
('hash_id', 'day', 'survey_filled', 'redcap_event_name', 'ethnicity')])
#-- 按人聚合,确认「一人多行」的结构
g = survey.groupby('hash_id').size()
print('参与者数 =', g.size, ' 行数 =', int(g.sum()))
#-- 可穿戴文件:一行 = 一位参与者的一个观测日
rhr = pd.read_csv('rhr.csv')
ste = pd.read_csv('steps.csv')
print(rhr.columns.tolist())
print(ste.columns.tolist())
读取时有两个默认值要改。第一是 low_memory=False:问卷文件列数多、混合类型多,分块推断会让同一列在不同块里被判成不同类型,后续合并时报错。第二是日期相关的列不要尝试转成时间戳——这里的天数是有符号的相对偏移,不是日期。
5.4 转成分析用的宽表
import pandas as pd
#-- 1. 取有自报检测结果的参与者,做成一人一行的标签表
lab = survey[survey['covid_test_result'].notna()][['hash_id', 'covid_test_result']]
lab = lab.drop_duplicates('hash_id') #-- 同一人多次报告时保留第一条
#-- 2. 日级可穿戴数据按 hash_id + 日期键外连接
daily = rhr.merge(ste, on=['hash_id', 'day'], how='outer')
#-- 3. 标签左连接:连不上的一律保持未知,不填阴性
daily = daily.merge(lab, on='hash_id', how='left')
print(daily.shape)
#-- 4. 按人划分,绝不按行随机切分
ids = daily['hash_id'].drop_duplicates()
train_ids = set(ids.sample(frac=0.7, random_state=0))
daily['split'] = daily['hash_id'].map(lambda h: 'train' if h in train_ids else 'test')
print(daily.groupby('split')['hash_id'].nunique())
这段代码里最要紧的是第 3 步的注释。标签表里没有的人,merge 之后会得到空值,正确做法是让它保持未知;如果在这里写 fillna(0),就把「没报告」变成了「阴性」,后面所有与阳性率相关的数字都会失真。第 4 步同样关键:按 hash_id 划分而不是按行划分,否则同一个人的相邻两天会分处两侧。
5.5 检测结果的标签映射
#-- survey_filled:1 = 已填,2 = 未填,3 = 退出研究(官方定义)
FILLED = {1: 'filled', 2: 'not_filled', 3: 'left_study'}
#-- redcap_event_name:consent_arm_1 = 知情同意当天,baseline_arm_1 = 入组第二天
EVENT = {'consent_arm_1': 'consent_day', 'baseline_arm_1': 'baseline_day'}
#-- 相对天数方向:负数为检测之前(官方定义)
survey['phase'] = survey['day'].map(lambda d: 'pre' if d < 0 else 'post')
#-- Ethnicity:1 = 是,0 = 否,999 = 未说明(第三类,不是缺失)
survey['ethnicity_lab'] = survey['Ethnicity'].map({1: 'yes', 0: 'no', 999: 'unspecified'})
survey['filled_lab'] = survey['survey_filled'].map(FILLED)
print(survey[['filled_lab', 'phase', 'ethnicity_lab']].head())
| 原始取值 | 官方语义 | 映射建议 | 不要这样用 |
|---|---|---|---|
survey_filled = 1 |
已填 | filled | 当作质量评分的分母之外 |
survey_filled = 2 |
未填 | not_filled | 与 3 合并后当缺失 |
survey_filled = 3 |
退出研究 | left_study | 当作可插补的缺失 |
Ethnicity = 1 |
西班牙裔或拉丁裔 | yes | 与 999 合并 |
Ethnicity = 0 |
非西班牙裔或拉丁裔 | no | 当作缺失 |
Ethnicity = 999 |
未说明 | unspecified | 当缺失直接丢弃 |
redcap_event_name = consent_arm_1 |
知情同意当天 | consent_day | 与每日问卷混算 |
redcap_event_name = baseline_arm_1 |
入组第二天 | baseline_day | 当作随访日 |
| 无检测结果记录 | 未报告,非阴性 | unknown | fillna 成阴性 |
5.6 五个最容易出错的地方
| 位置 | 错误写法 | 后果 | 正确做法 |
|---|---|---|---|
| 标签构造 | 把未报告检测结果的人填成阴性 | 阴性样本虚增,阳性率与一切指标失真 | 标为 unknown,做敏感性分析 |
| 时间轴 | 把相对天数当作日历日期 | 无法与外部曲线对齐,且方向理解反了 | 只用相对偏移,明确负数为检测前 |
| 变量口径 | 把 Value(设备上报静息心率)与重算统计量混为一谈 |
品牌算法差异被当成生理差异 | 明确使用哪一套口径并写进方法节 |
| 数据集划分 | 按行随机切分 | 同一人的相邻两天分处两侧,结果虚高 | 以 hash_id 为分组键 |
| 问卷字段 | 把 2021-02 前后的每日问卷当同一套题项 | 疫苗接种字段在前段全空 | 按时间分段的字段集分别处理 |
§6 与库内条目的关系
6.1 关系图谱
| 站内数据集 | 采集物 | 与 CovIdentify 的关系 | 是否同一数据集 |
|---|---|---|---|
| COVID-19 Sounds(剑桥新冠声音) | 手机录音(咳嗽、呼吸、语音)+ 自报问卷 | 同一主题(新冠筛查)的不同采集通道;回答「声音里有没有信号」 | 否,来源、机构、采集物均不同 |
| Coswara | 众包手机录音 | 同上,众包来源不同 | 否 |
| COUGHVID | 众包咳嗽录音 + 专家标注 | 同为呼吸道音频,任务不同 | 否 |
| ICBHI 2017 / SPRSound | 呼吸音、儿科呼吸音 | 呼吸音异常检测基准,与新冠无关 | 否 |
| BigIdeasLab_STEP(肤色与手表心率误差) | 智能手表心率 + 肤色配对 | 同一实验室(杜克 BIG IDEAs Lab),研究设备精度偏差 | 否,采集目的与变量不同 |
| BIG IDEAs Lab Glycemic Variability | 可穿戴 + 血糖变异性 | 同一实验室,代谢方向 | 否 |
| GLOBEM | 多年纵向可穿戴感知 + 心理健康 | 同为纵向可穿戴,结局不同 | 否 |
| TILES-2018 Sleep Benchmark | Fitbit 纵向睡眠与自评量表 | 同为消费级设备的纵向自评配对,人群为医院员工 | 否 |
| PPG-DaLiA | 腕戴 PPG + 活动 | 同为消费级腕戴生理信号,有高频波形 | 否 |
| Flatten 新冠症状自报调查 | 自报症状调查 | 只有问卷一侧,无客观信号 | 否 |
| 上半身热成像新冠库 | 热成像视频 | 同为新冠筛查,模态不同 | 否 |
这张表里最容易混淆的是同实验室的两条。BigIdeasLab_STEP 与 CovIdentify 都出自杜克 BIG IDEAs Lab、都涉及智能手表心率,但前者研究的是肤色对腕戴心率精度的影响,属于设备精度评测;后者研究的是感染状态下的数字生物标志物偏离,属于筛查分配。变量结构、人群、标签口径都不同,不能互相替代。
声音类那几条则相反:它们与 CovIdentify 共享「新冠 + 自报标签」这一层,但采集物是数秒音频而非数月序列。把它们放在一起比较性能没有意义,因为输入模态、时间结构、任务定义都不同。
6.2 检索路径
| 你要找的东西 | 检索词 | 会落到哪里 |
|---|---|---|
| 新冠相关的其他模态 | covid、新冠、coronavirus |
§6.1 表上半部分的影像与声音类 |
| 可穿戴纵向数据 | wearable、可穿戴、smartwatch、智能手表 |
§6.1 表中间部分 |
| 消费级设备精度评测 | PPG、心率、步数、smartwatch |
§6.1 中的 BigIdeasLab_STEP、PPG-DaLiA |
| 自报问卷类资源 | survey、问卷、自报 |
Flatten 新冠症状自报调查 |
| 同一实验室的其他产出 | BIG IDEAs、bigideaslab、Duke |
§6.1 中的两条同实验室数据 |
| 呼吸音与咳嗽音 | breath、呼吸音、cough、咳嗽 |
§6.1 表中的音频类,均与本数据不同源 |
6.3 与其他库的分工判据
| 任务 | 主粮仓该用什么 | CovIdentify 的位置 | 原因 |
|---|---|---|---|
| 新冠声学筛查 | 声音类数据集 | 不适用 | 没有音频通道 |
| 可穿戴数字生物标志物与感染结局配对 | 无可替代 | 主力 | 日级序列 + 自报检测结果的配对稀缺 |
| 检测资源分配策略仿真 | 无可替代 | 主力 | 评价指标是阳性率提升倍数,需完整队列 |
| 纵向研究依从性建模 | 本库 + 其他纵向可穿戴库 | 主力之一 | 36 万余份问卷带三态填答标记 |
| 设备精度评测 | 有参考标准的设备评测库 | 不适用 | 无参考标准同步记录 |
| 波形级生理算法 | 有高频波形的可穿戴库 | 不适用 | 只发布日级汇总 |
| 人群层面的疫情推断 | 有时间戳的流行病学数据源 | 不适用 | 绝对日期已删除 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
先纠正一个常见误判:把「阳性只有 132 人」当成质量缺陷。这个数字不是采集失败,而是现实约束——在 2020 年 4 月到 2021 年 5 月的美国,愿意参加研究、又恰好做了检测、又把结果报回问卷的人本来就是少数,检测资源本身在相当长一段时间里也受限。评价它时不能套用「正样本越多越好」的尺子,而应该问:在它要回答的那个问题上,这个样本量够不够支撑排序结论?
这个校正会改变五维评分的读法。规模与标签质量两项它拿不到高分,但在「任务唯一性」上几乎无可替代。把两件事混在一起看,容易得出「不值得用」的错误结论。
7.1 五维评分
按数据可用性的常用维度打分,每项 1–5 分,分数针对「作为可穿戴数字生物标志物研究数据」这一用途:
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 4 | 7,348 人同意、2,887 人接设备、36 万余份问卷;但阳性仅 132 人 |
| 标注质量 | 2 | 标签全部自报,官方明写未做外部验证,无专家层 |
| 任务适配 | 5 | 检测分配与依从性建模这两件事上几乎没有替代品 |
| 文档完整 | 4 | 官方写清了招募、字段语义、口径与局限;但文件目录不可公开核对 |
| 可获取性 | 2 | 受限访问:凭证化 + CITI 培训 + 签署 DUA |
五项合计 17 分(满分 25)。分数结构说明它不是全能型选手:可获取性与标注质量拖后腿,规模与适配性撑着。这种分数形态恰恰对应它的定位——一份需要投入前期成本、且只能回答特定问题的数据。
7.2 标注质量的两层
第一层是客观测量准不准。可穿戴设备的心率与步数不是医疗级测量,误差随佩戴方式、佩戴时长、设备型号变化。统一口径(午夜到早 7 点、无步数记录时段的心率点)能消除品牌算法差异,但消除不了设备本身的测量误差。
第二层是结局标签真不真。官方直说:参与者的报告可能不可靠,因为没有对检测结果做过外部验证,这一局限同样适用于问卷里的其他任何问题。这句话常被略过,但它对下游影响很实:任何以检测结果为监督信号的建模,其性能上限被自报误差封住。
| 用途 | 自报误差的影响 | 建议 |
|---|---|---|
| 检测分配排序仿真 | 中,排序任务对单点错误相对稳健 | 可用,但要在结论里写明标签来源 |
| 阳性率提升倍数的绝对值 | 大,倍数直接依赖标签 | 报告为区间,不做点估计 |
| 早期偏离天数估计 | 大,检测日期本身有滞后 | 明确写「相对报告日」而非「相对感染日」 |
| 依从性与填答行为建模 | 小,标签是填答状态而非检测结果 | 可直接用 |
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 |
|---|---|---|
| 招募偏差 | 靠社交网络与社交媒体广告招募,入组需年满 18 岁且有互联网接入 | 人群不等于任何自然人群 |
| 构成偏差 | 官方承认入组人群与美国新冠阳性/死亡人群及 2020 年人口普查构成差异明显 | 结论外推受限 |
| 设备偏差 | 自带设备,品牌与型号不统一,佩戴时长不一 | 跨人比较需控制佩戴时长 |
| 口径偏差 | 设备上报值与统一重算值两套静息心率 | 混用会把品牌差异当生理差异 |
| 时间偏差 | 绝对日期删除;问卷字段在 2021-02 前后不一致 | 无法与外部时间线对齐;疫苗接种字段前段为空 |
| 标签偏差 | 检测结果自报,未做外部验证 | 标签可信度上限受限 |
| 依从偏差 | 少数参与者贡献大量问卷(官方给出均值 62、中位数 37) | 按问卷条数加权会被高依从者主导 |
| 幸存偏差 | 退出研究者以 survey_filled=3 标记后不再产生后续记录 | 后期样本量随天数下降 |
7.4 外部验证矩阵
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 方法复现 | 按论文口径重建偏差特征,重跑排序 | 官方给出代码库与特征口径 | 论文分析样本与发布数据口径不完全一致 |
| 跨品牌验证 | 在单一品牌上训练、另一品牌上测试 | 三个品牌在同一协议下采集 | 品牌与人群、佩戴习惯纠缠在一起 |
| 依从性建模外测 | 在本数据的填答序列上建模 | 序列长、状态明确 | 单队列,无第二个同类队列可外测 |
| 敏感性分析 | 假设部分自报标签错误,看结论是否翻转 | 直击最大局限 | 只能给边界,不能给点估计 |
外部验证里有一个必须写明的数字差异。官方论文摘要报告的分析样本是:CovIdentify 研究 6,765 名参与者,加上另一项研究(MyPHD)8,580 名参与者,其中 1,265 人有智能手表数据、126 人检测阳性。而本次发布的 CovIdentify Dataset 描述里,报告至少一次检测结果的是 1,289 人,其中 132 人阳性。两组数字接近但不相同,说明论文的分析样本与发布数据的口径并不完全一致(论文还混入了另一项研究的数据)。想逐字复现论文数字的人会在这里卡住——这不是数据错误,而是口径差异,论文里也不会替你标出来。
还要注意论文里的性能数字是在「单一品牌(Fitbit)+ 分钟级数据」这一子集上取得的最好成绩。在混合品牌的完整数据上复现,性能会低于论文报告值。把这个差异当成「数据有问题」,是常见的误判。
7.5 它为何能持续:稀缺的是配对,不是人数
它没有第二版,Release Notes 只有一行「Initial release」,却仍然值得用,原因是它占着一个别人不愿再占的坑:数月尺度的日级生理序列,与同一批人逐日的自报问卷和检测结果对齐。新增这样的数据需要重新招几千人、让他们戴几个月手表、并且天天填问卷——在疫情紧急期过去之后,几乎不可能再复制。只要这个配对仍然稀缺(§4.1),它在这两类问题上的价值就不会被新数据替代。
§8 生态位与历史
8.1 历史沿革
CovIdentify 起步于疫情最緊急的阶段。2020 年 4 月 2 日,杜克大学在伦理批件 2020-0412 下启动研究,目标是把消费级可穿戴设备变成公共卫生监测的前哨。这与当时一批同类研究(包括斯坦福的体温与心率预警工作)属于同一波浪潮:共同假设是,消费级设备虽然精度有限,但胜在覆盖广、连续、无需额外成本,也许能换来「比症状更早」的预警窗口。
研究进行中发生了两件影响数据形态的事。第一,探索性分析发现入组人群的构成与美国新冠阳性及死亡人群、以及 2020 年人口普查的整体构成差异明显,于是项目在研究期间通过向代表性不足人群提供可穿戴设备来做缓解——这是一次主动的偏差修正,但也是一次非随机的人群结构调整,做分层分析时要意识到人群构成随时间变化。第二,2021 年 2 月起每日问卷加入疫苗接种问题,这既反映了研究重心的转移,也让问卷字段在时间上不统一。
数据发布则晚了三年半。方法学论文 2022 年发表,数据 2024 年 11 月才在 PhysioNet 上线。这个顺序在数字健康领域不算罕见——数据去标识、协议审查、许可谈判都要时间——但它带来一个实际后果:论文里的数字与发布数据的口径存在 §7.4 所述的差异。
8.2 与挑战赛的关系
它与 PhysioNet 的挑战赛体系没有直接关系。库内若干心电数据集是各类 CinC 挑战赛的官方数据源,那些数据集因此带上了「标准划分、标准指标、排行榜」的赛事属性;CovIdentify 没有对应的挑战赛,也没有官方划分与排行榜。
这对使用者意味着两件事。好处是没有「官方榜单」带来的路径依赖,研究问题可以更自由。代价是没有标准划分——每个人都要自己定义训练集与测试集的切分方式、自己定义评价指标,跨论文比较时口径不一致的风险更高。写论文时必须把划分方式与指标定义写清楚,否则结果不可复现。
8.3 生态位:方法学验证场,不是筛查产品的训练集
| 角色 | 产品级训练集 | 方法学验证场 |
|---|---|---|
| 典型用法 | 训练可部署的模型 | 验证方法假设、做策略仿真 |
| 需要的前提 | 标签可靠、样本足够、人群代表 | 结构完整、变量齐备、口径清楚 |
| 代表资源 | 有实验室确诊标签的大规模队列 | 本数据、其他纵向自报配对数据 |
| 失败模式 | 标签噪声进入模型 | 把验证结论当成产品性能 |
CovIdentify 坐在右边这一列。它的标签来自自报,样本量在无症状亚组上很小,人群不具代表性——这三条任何一条都足以让它无法充当产品级训练集。但它的结构完整:客观序列、主观问卷、填答状态、检测结果四层齐全,且口径有据可查,正好适合回答「方法假设成不成立」这类问题。把验证场当训练集用,会把自报噪声固化进模型;把训练集当验证场用,则会在标签可靠性上过度乐观。
8.4 谁在用,用来做什么
官方在 Usage Notes 里直接给出了两类建议用途:一是纵向数字健康研究中的参与者填答行为研究,二是把参与者的可穿戴设备数据与自报的新冠检测结果做匹配。这两条是官方口径,不是推测。除此之外,官方列出的参考文献里还有一篇关于数字健康研究依从性与留存的影响因素研究(SSRN 预印本),以及配套的方法学代码库。
由此可以判断使用者的构成:做数字健康研究方法学的研究组(关心依从性与留存)、做可穿戴数字生物标志物的工程组(关心信号与结局的配对)、做公共卫生决策建模的团队(关心检测配额下的阳性率)。第三类最少,但正是这份数据最不可替代的地方。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一天 | 第一周 | 注意事项 |
|---|---|---|---|
| 数字健康研究方法学者 | 读官方 Methods 与 Data Description,理清五层人数 | 用 survey_filled 建填答状态序列 | 2 与 3 语义不同,别合并 |
| 可穿戴算法工程师 | 拿到权限后先列目录,核对实际文件名 | 建基线窗口与偏差特征,跑单品牌基线 | 明确用设备上报值还是统一重算值 |
| 公共卫生建模者 | 读论文摘要,明确阳性率提升倍数的定义 | 复现「只能测 X% 人口」的仿真 | 基线对照必须是随机分配 |
9.2 一条最短的可用流程
#-- 1. 完成前置:凭证化 + CITI 培训 + 签署 DUA(缺一不可,目录会返回 403)
#-- 2. 下载整个版本目录
physionet login
physionet download covidentify/1.0.0 ./covidentify
#-- 3. 列目录,核对实际文件名与官方描述是否一致
ls -lh ./covidentify
import pandas as pd
#-- 4. 载入问卷与两个可穿戴文件
survey = pd.read_csv('covidentify_survey_upload.csv', low_memory=False)
rhr = pd.read_csv('rhr.csv')
ste = pd.read_csv('steps.csv')
#-- 5. 只保留报告过检测结果的参与者,其余保持未知
lab = survey[survey['covid_test_result'].notna()][['hash_id', 'covid_test_result']]
lab = lab.drop_duplicates('hash_id')
#-- 6. 组日级宽表,并按人划分
daily = rhr.merge(ste, on=['hash_id', 'day'], how='outer').merge(lab, on='hash_id', how='left')
ids = daily['hash_id'].drop_duplicates()
tr = set(ids.sample(frac=0.7, random_state=0))
daily['split'] = daily['hash_id'].map(lambda h: 'train' if h in tr else 'test')
#-- 7. 检查分组后两侧的人不重叠
assert set(daily.loc[daily.split == 'train', 'hash_id']).isdisjoint(
set(daily.loc[daily.split == 'test', 'hash_id']))
print(daily.groupby('split')['hash_id'].nunique())
第 7 步的断言是这段流程里最容易被省掉、也最不该省掉的一行。按人划分这件事,写的时候觉得理所当然,出错的时候却毫无征兆——模型会给出一个漂亮的成绩,而错误要等到与别的结果对比时才暴露。
9.3 引用方式
| 引用对象 | 内容 |
|---|---|
| 数据集 | Cho, P., Shandhi, M. M. H., Roghanizad, A., & Dunn, J. (2024). CovIdentify Dataset (version 1.0.0). PhysioNet. RRID:SCR_007345. https://doi.org/10.13026/ncq1-vp79 |
| 原始论文 | A Method for Intelligent Allocation of Diagnostic Testing by Leveraging Data from Commercial Wearable Devices: A Case Study on COVID-19. npj Digital Medicine(2022),https://doi.org/10.21203/rs.3.rs-1490524/v1 与 https://www.nature.com/articles/s41746-022-00672-z |
| 平台 | PhysioNet 平台综述论文(2026 年发表于 Nature Health),按官方页面 Cite 按钮生成 |
| 代码库 | CovIdentify GitHub Repository: https://github.com/Big-Ideas-Lab/CovIdentify |
官方页面明确要求同时引用数据集本身与原始论文,引用平台论文也是 PhysioNet 的惯例。写论文时建议额外注明:使用的版本号(1.0.0)、用的是设备上报值还是统一重算口径、以及未报告检测结果者如何处理。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方项目页(含摘要、方法、数据描述、使用说明、伦理、参考文献各段)与官方引用的论文摘要 |
| 文件核验 | 项目页完整抓取并逐段阅读;文件目录为受限访问,未登录状态返回 403,故文件级内容以官方描述中点名的文件为准 |
| 不一致说明 | 论文摘要中的分析样本(1,265 人有手表数据、126 人阳性)与发布数据描述(1,289 人报告结果、132 人阳性)不一致,已在 §7.4 说明 |
| 论文信息 | 仅读取官文论文摘要与官方列出的预印本链接,未逐节核对全文方法细节 |
| 未核验内容 | 三个 CSV 的确切列名清单与行数、各文件体积、按品牌分层的样本量、原始高频数据的覆盖范围、是否存在字段说明文件 |
| 图像 | 无配图;封面为生成式提示词,不含真实数据内容 |
| 免责 | 本文不构成临床建议;数据使用须遵守 PhysioNet Credentialed Health Data License 1.5.0 与 DUA 1.5.0 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它是一份音频数据集」 | 没有音频通道;采集物是智能手表的日级心率与步数加问卷 | 官方 Abstract 与 Data Description |
| 「它有七千多人的可穿戴数据」 | 同意 7,348 人、入组 6,765 人、接手表 2,887 人 | 官方 Data Description 逐层给出 |
| 「没报检测结果的就是阴性」 | 未报告不等于阴性,官方只说 1,289 人报告过至少一次结果 | 官方描述中 1,289 / 132 / 1,157 三个数字 |
| 「检出结果是实验室确认的」 | 全部自报,官方明写没有外部验证 | 官方 Usage Notes 的 Limitations 句 |
| 「静息心率就是全天平均心率」 | Value 是设备上报的当日静息心率;统一口径为午夜到早 7 点无步数时段 |
官方 Data Description 与官方代码库说明 |
| 「日期列可以转成日历日期」 | 绝对日期已删除,只剩相对入组的天数,负数为检测前 | 官方 Data Description |
| 「按行随机切分就行」 | 同一人有多天记录,必须按 hash_id 分组 | 官方说明参与者以 hash_id 去标识并按日配对 |
| 「三个品牌可以混在一起训模型」 | 论文最好成绩来自单一品牌加分钟级数据 | 官方论文摘要 |
| 「survey_filled 的 2 和 3 都是缺失」 | 2 = 未填,3 = 退出研究,语义不同 | 官方 Data Description |
| 「问卷字段全程一致」 | 2021 年 2 月起才加入疫苗接种问题 | 官方 Methods 段 |
| 「它能直接用于临床筛查产品」 | 标签自报、人群不具代表性、阳性仅 132 人 | 官方 Limitations 与 Data Description |
FAQ
Q1:CovIdentify 到底有没有音频或影像数据?
没有。它是可穿戴加问卷的数据集:客观侧是智能手表采集的日级静息心率与日级步数,主观侧是入组问卷与每日问卷的自报答案。新冠相关的音频数据集在库内另有其人(剑桥新冠声音库、Coswara、COUGHVID),它们是不同来源、不同机构、不同采集物的独立数据集,与本数据不构成新旧版本或变体关系,不能互相替代。检索时用「声音」「咳嗽」「呼吸音」会落到那几条,用「可穿戴」「智能手表」「步数」才会落到这一条。
Q2:七千多人同意,能用的到底有多少人?
要分层看。7,348 人通过 REDCap 完成电子知情同意,6,765 人完成了入组问卷,2,887 人把智能手表接进了平台(1,689 块 Garmin、1,091 块 Fitbit、107 块 Apple),5,859 人填过每日问卷,1,289 人报告过至少一次诊断检测结果,其中 132 人阳性、1,157 人阴性。做可穿戴分析时用 2,887 这一层,做检测结局分析时用 1,289 这一层,两层不要混。
Q3:检测结果可信吗?能不能当金标准用?
不能。官方在使用说明里直接写明:参与者的报告可能不可靠,因为没有对其检测结果做过外部验证,这一局限同样适用于问卷里的其他任何问题。数据里没有实验室确认层,也没有专家复核层。合理做法是把标签当作「自报结果」而非「确诊结果」,在结论里明确写出标签来源,并就标签错误率做敏感性分析。
Q4:为什么官方论文里的数字和发布数据的描述对不上?
论文摘要报告的分析样本包含两项研究:CovIdentify 的 6,765 名参与者与另一项研究(MyPHD)的 8,580 名参与者,其中有智能手表数据的是 1,265 人、126 人检测阳性;而本次发布的 CovIdentify Dataset 描述里,报告至少一次检测结果的是 1,289 人、132 人阳性。两组数字接近但不同,原因是分析样本与发布数据的口径不一致。此外论文的最好成绩来自单一品牌加分钟级数据的子集。
Q5:拿到数据后第一步该做什么?
先列目录。这份资源是受限访问的,需要先完成凭证化、通过 CITI「Data or Specimens Only Research」培训并签署 DUA,否则文件目录返回 403。拿到权限后,第一步是核对磁盘上的实际文件名与官方描述中点名的文件是否一致,第二步是按 hash_id 建立分组表并固定划分,第三步才是建模。跳过前两步直接按行切分,是最常见的翻车方式。
术语表
| 术语 | 解释 |
|---|---|
| 数字生物标志物 | 由数字设备连续采集、可量化生理或行为状态的指标,如静息心率、步数 |
| 静息心率(RHR) | 身体处于安静状态时的心率;本数据给出设备上报值与统一口径重算值两套 |
| 智能检测分配(ITA) | 官方提出的方法:用数字生物标志物给人群排序,优先检测排名靠前者以提高阳性率 |
| 阳性率 | 所做检测中呈阳性的比例;本数据的核心评价指标,而非准确率 |
| REDCap | 研究电子数据采集系统,本研究的知情同意与问卷在此完成 |
| 电子知情同意 | 在线完成的知情同意流程,本研究共 7,348 人完成 |
| hash_id | 去标识化并随机分配后分配给每位参与者的唯一哈希标识 |
| 相对天数 | 以入组为原点的天数偏移;官方定义负数为检测之前的天数 |
| 分支逻辑 | 问卷根据前序答案跳题,导致不同人题数不同(本研究 37–61 题) |
| survey_filled | 问卷填答状态:1 已填、2 未填、3 退出研究 |
| redcap_event_name | 问卷事件类型,如 consent_arm_1(同意当天)、baseline_arm_1(入组第二天) |
| 凭证化用户 | 在 PhysioNet 完成身份验证与培训、并签署数据使用协议的用户 |
| DUA | 数据使用协议;本数据适用 PhysioNet Credentialed Health Data Use Agreement 1.5.0 |
| CITI 培训 | 人体研究伦理与合规培训;本数据要求「Data or Specimens Only Research」课程 |
| 去标识化 | 移除可直接识别个人的信息并以随机标识替代 |
| BYOD | 自带设备研究,参与者使用自己的消费级设备而非研究专用设备 |
| HealthKit | 苹果的健康数据框架,Apple Watch 数据经此接入本研究 |
| 偏差指标(delta 系列) | 官方特征工程中的四类指标:delta、归一化 delta、标准化 delta、z 分数 |
| Benjamini-Hochberg | 多重假设检验的校正方法,官方在特征选择中使用 |
附录 A:核心数字核对表
| 数字 | 出处 |
|---|---|
| 7,348 人电子知情同意 | 官方 Abstract 与 Data Description |
| 6,765 人完成入组问卷 | 官方 Data Description |
| 入组问卷 37–61 题(分支逻辑) | 官方 Data Description |
| 2,887 人接入智能手表 | 官方 Abstract 与 Data Description |
| 1,689 Garmin / 1,091 Fitbit / 107 Apple | 官方 Abstract 与 Data Description |
| 5,859 名不重复参与者完成每日问卷 | 官方 Data Description |
| 362,108 份每日问卷 | 官方 Data Description |
| 每人完成份数:均值 62、中位数 37 | 官方 Data Description |
| 1,289 人报告至少一次检测结果 | 官方 Data Description |
| 132 阳性 / 1,157 阴性 | 官方 Data Description |
| 入组窗口 2020-04-02 至 2021-05-25 | 官方 Abstract 与 Data Description |
| 伦理批件号 2020-0412 | 官方 Methods 与 Ethics 段 |
| 2021 年 2 月加入疫苗接种问题 | 官方 Methods 段 |
| 捐赠 12 个月回顾 + 12 个月前瞻数据 | 官方 Methods 段 |
| 版本 1.0.0,发布日期 2024-11-25 | 官方页面版本区 |
| DOI(v1.0.0)10.13026/ncq1-vp79 | 官方 Discovery 区 |
| DOI(latest)10.13026/fxah-ha58 | 官方 Discovery 区 |
| 许可 PhysioNet Credentialed Health Data License 1.5.0 | 官方 Access 区 |
| 协议 PhysioNet Credentialed Health Data Use Agreement 1.5.0 | 官方 Access 区 |
| 所需培训 CITI Data or Specimens Only Research | 官方 Access 区 |
| 心率更早区分阳阴性:检测前 10 天(心率)/ 5 天(步数) | 官方论文摘要 |
| 加入步数使 AUC-ROC 提高 7–11% | 官方论文摘要 |
| 加入心率使 AUC-PR 提高 38–50% | 官方论文摘要 |
| 最佳 AUC-ROC 0.73±0.14(交叉验证)/ 0.77(独立测试) | 官方论文摘要 |
| 阳性率提升最高 6.5 倍(交叉验证)/ 4.5 倍(独立测试) | 官方论文摘要 |
| 无症状者占比最高 27% | 官方论文摘要 |
| 论文分析样本 1,265 人有手表数据、126 人阳性 | 官方论文摘要 |
| 项目页浏览量 104(当前版本与全部版本) | 官方页面 Project Views |
附录 B:数字的来源分层
第一层:官方项目页。 同意人数、入组人数、设备接入数与品牌构成、每日问卷总量与完成者数、检测结果报告人数与阳性阴性数、入组窗口、伦理批件号、字段语义(survey_filled、redcap_event_name、Ethnicity、Value 与各心率统计量)、相对天数的方向定义、许可与访问要求、版本与 DOI。这些来自项目页的摘要、方法、数据描述、使用说明、伦理与发现区。
第二层:官方引用的论文摘要。 早期偏离天数、AUC-ROC 与 AUC-PR 的提升幅度、最佳成绩、阳性率提升倍数、无症状占比、论文分析样本量。这些是论文报告的结果,不是数据集本身的属性,复现时受口径影响(§7.4)。
第三层:官方代码库。 静息心率的统一计算口径(午夜到早 7 点、无步数记录时段的高频心率点汇总)与步数的 24 小时求和口径。这是方法定义,不是数据规模。
第四层:未核实。 三个 CSV 的确切列名清单、行数与体积,按品牌分层的样本量,原始高频数据的实际覆盖范围,是否存在字段说明文件。文件目录为受限访问,未登录状态返回 403,这些只能由获得访问权的使用者自行核对。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | CovIdentify Dataset v1.0.0 | https://physionet.org/content/covidentify/1.0.0/ | 全部规模、结构、边界数据的来源 |
| 2 | A Method for Intelligent Allocation of Diagnostic Testing by Leveraging Data from Commercial Wearable Devices: A Case Study on COVID-19 | https://doi.org/10.21203/rs.3.rs-1490524/v1 | 方法学背景与性能数字 |
| 3 | 同上,正式发表版(npj Digital Medicine 2022) | https://www.nature.com/articles/s41746-022-00672-z | 摘要与方法细节 |
| 4 | Data-Driven Approaches Uncover Key Factors in Digital Health Study Adherence and Retention | https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4473136 | 依从性与留存用途 |
| 5 | CovIdentify GitHub Repository | https://github.com/Big-Ideas-Lab/CovIdentify | 静息心率与步数的统一计算口径 |
| 6 | PhysioNet 平台综述(2026,Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
| 7 | CovIdentify 研究官网 | https://covidentify.covid19.duke.edu/ | 项目背景 |
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本数据集共享多个主题标签的相关数据集,按相关度降序排列:
- covid-19-sounds — 共享标签:公共卫生监测 / 传染病 / 自报问卷
- coswara — 共享标签:公共卫生监测 / 传染病 / 自报问卷
- coughvid — 共享标签:公共卫生监测 / 传染病
- bigideaslab-step-hr-smartwatch — 共享标签:可穿戴数据 / 生理时序
- big-ideas-glycemic-wearable — 共享标签:可穿戴数据 / 纵向队列
- flatten-covid-survey — 共享标签:传染病 / 自报问卷
- ppg-dalia — 共享标签:可穿戴数据 / 生理时序
- globem — 共享标签:可穿戴数据 / 纵向队列
- tiles-2018-sleep — 共享标签:可穿戴数据 / 纵向队列
- consumer-grade-wearables — 共享标签:可穿戴数据 / 生理时序
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

