信息速览
月经周期被当成 28 天的标准件,是过去几十年里医学教育、手机应用与门诊问诊共同造成的一个简化。真实情况松散得多:同一个人的相邻两个周期可以差好几天,卵泡期与黄体期各有多长因人而异,而"哪天排卵"这件事,除非连续测激素,否则没人能凭日历说准。可穿戴设备的普及似乎给了另一条路——腕温、心率、睡眠、呼吸率每天都在采,厂商也乐于给出预测排卵日的功能;但这些模型绝大多数训练在自我报告的月经日期上,而自报日期本身就有偏差。真正缺的是把三样东西摆在同一条时间轴上的数据:连续采集的生理信号、接近实验室级别的激素真值、以及同一天的自我感受。mcPHASES(menstrual cycle Physiological, Hormonal, and Self-Reported Events and Symptoms)就是朝这个缺口做的:多伦多大学团队让 42 名加拿大年轻受试者在两个各三个月的区间里同时戴 Fitbit Sense 智能手表、贴 Dexcom G6 连续血糖监测仪、每天用 Mira Plus 做尿检激素,并逐日填写日记,最后整理成 23 张按信号分类的结构化表,于 2025 年 9 月 9 日以 1.0.0 版本发布在 PhysioNet。它的门槛同样明确:不是开放下载库,要签署数据使用协议才能取文件;样本是大多伦多地区的年轻人群,第一区间年龄均值 20.9 岁;第二区间只剩 20 人,且不再采集血糖。它给的是由激素真值锚定的纵向多模态,不是拿来就能训练的大表。
一屏速览
| 维度 | 内容 |
|---|---|
| 全名 | mcPHASES: A Dataset of Physiological, Hormonal, and Self-reported Events and Symptoms for Menstrual Health Tracking with Wearables |
| 简称 | mcPHASES 月经周期库 |
| 托管平台 | PhysioNet(MIT 计算生理实验室维护) |
| 贡献机构 | 多伦多大学(作者均署名 University of Toronto) |
| 版本与发布日期 | 1.0.0,2025 年 9 月 9 日 |
| 受试者数 | 42 名(第一区间,2022 年);其中 20 名完成第二区间(2024 年);入组 50 名 |
| 观察长度 | 每人一个三月区间,20 人另有一个三月区间;第二区间时间轴约从第 905 天续接 |
| 表数量 | 23 张结构化表:1 张人口学 + 1 张自报与激素 + 1 张血糖 + 20 张 Fitbit 派生表 |
| 主键 | 受试者标识 id 与研究日 day_in_study;跨夜事件另有起止研究日字段 |
| 激素指标 | 黄体生成素、雌酮-3-葡萄糖醛酸苷、孕二醇葡萄糖醛酸苷,均为每日尿检 |
| 设备 | Fitbit Sense 智能手表、Dexcom G6 连续血糖监测仪(仅第一区间)、Mira Plus 尿检仪、自研日记应用 |
| 相位标签 | 四个:月经期、卵泡晚期、排卵期、黄体期,由 Mira 的激素判读给出 |
| 文件格式 | 按信号分类的结构化表;官方示例仓库使用的文件为 CSV |
| 访问方式 | 受限访问,仅签署数据使用协议的注册用户可取文件 |
| 许可 | PhysioNet Restricted Health Data License 1.5.0;配套数据使用协议 1.5.0 |
| DOI | 10.13026/zx6a-2c81(v1.0.0);10.13026/5b8h-jx61(最新版) |
| 伦理批件 | 多伦多大学研究伦理委员会,协议号 41568 |
| 典型用途 | 可穿戴信号到月经相位的映射、周期变异刻画、激素与生理交互、排卵与症状预测模型 |
§1 它要解决的具体麻烦
1.1 月经研究卡在两个"没有"上
月经健康研究长期缺的不是想法,是数据形态。第一个"没有"是没有激素真值:绝大多数可穿戴研究只有腕温、心率、睡眠这类派生指标,而"受试者此刻处于周期的哪个阶段"只能靠自报的月经开始日反推。自报本身有回忆偏差,且一旦周期不规律,日历法推出的排卵窗口基本不可信。第二个"没有"是没有日常场景下的纵向激素:临床内分泌研究当然会测激素,但通常在门诊、单次或稀疏采样,受试者不是在正常生活,测出来的曲线解释不了"昨天加班到两点,今天周期怎么样"。
两个"没有"叠加出的后果是,一边有大量可穿戴信号却缺标签,另一边有标签却没有与之同步的生理信号,中间的接缝处几乎无人研究。mcPHASES 的做法是把三支数据源钉在同一批人、同一段时间上:尿检激素提供激素维度的日更真值,智能手表提供连续生理信号,日记提供主观体验。这不是把三种数据放在一起,而是让它们在 id 与 day_in_study 两个键上逐日对齐。
1.2 三条常见的错误期待
第一条,期待它是"大样本"。42 人、20 人两个区间,规模在任何机器学习意义上都偏小。它能支撑的是机制性、方法学与小规模验证工作,不是训练一个能落地的排卵预测模型所需的样本量。
第二条,期待它两个区间对称为"同一批人的重复测量"。第二区间只有 20 人,且官方明确写了:第二区间不采集血糖,日记改为可选。设备固件与算法在两个区间之间也有更新,导致部分变量的增加、删除或修改。把两个区间直接拼起来当"两倍数据"用,会引入口径不一致。
第三条,期待它的人群能代表更广的年龄层。样本是大多伦多地区的年轻成年人,第一区间年龄均值 20.9 岁(标准差 2.8),第二区间 22.0 岁(标准差 2.3)。围绝经期、青少年初潮后早期、以及内分泌疾病人群基本不在覆盖范围内。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 用激素真值定义周期相位 | 每日尿检三项激素,加四相位标签 | 够,这是它最不可替代的部分 |
| 可穿戴信号能否反映排卵 | 同一批人的腕温、心率、睡眠与激素同步 | 够做关联与小规模建模 |
| 血糖是否随周期波动 | 第一区间的连续血糖数据 | 够,但仅第一区间,样本更小 |
| 症状与周期阶段的关系 | 日记逐日自报症状、压力、睡眠、活动强度 | 够,第二区间日记为可选,覆盖度会降 |
| 训练可落地的排卵预测产品模型 | 42 人、最多两个周期序列 | 不够,样本量是硬天花板 |
| 跨年龄、跨种族的泛化验证 | 单一地区、年轻人群、族裔构成集中在东亚与东南亚 | 不够 |
| 药物或干预效果研究 | 无用药、无干预、无结局变量;入组已排除近三个月使用激素类避孕者 | 不够,且排除标准本身就是限制 |
| 糖尿病或代谢病人群的周期研究 | 入组排除了糖尿病诊断者 | 不够,这是明确的入组排除项 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在做可穿戴排卵检测,缺带激素标签的数据 | 提供激素判读出的四相位标签与同步的腕温、心率、心率变异 | 先按受试者划分训练与测试,再报告相位级指标而非只看日期误差 |
| 你在评估消费设备的派生指标可信度 | 同一设备同时给出静息心率、睡眠分期、呼吸率、压力分等,可交叉比对 | 把派生指标当作"厂商算法输出"处理,论文里写明设备型号与区间 |
| 你想刻画周期长度的个体差异 | 提供逐日激素与相位序列,可定义完整周期 | 用官方的四相位连续出现作为完整周期的定义,别自造规则 |
| 你在做症状预测 | 日记里有经期状态、疼痛、情绪、压力、睡眠、活动强度 | 注意第二区间日记可选,缺失程度高于第一区间 |
| 你在做血糖与周期的代谢研究 | 第一区间连续血糖加每日激素 | 只在第一区间内做,且要明确写出样本量下降 |
| 你想做一个能直接上线的模型 | 不适用 | 换更大规模的队列;本库适合做标签质量的参照 |
1.5 一句话判断
它不适合当"训练粮仓",而适合当"带激素真值的标尺":用它来判断一个只靠腕温或日历的预测方法到底差多少,而这个差值正是消费级产品最不愿意公开的东西。
1.6 不适合谁:四条边界
不适合拿来做大规模训练。 42 名受试者、最多两个三月区间,任何有容量的模型几轮就能记住全部个体特征。用它训练再在同库上测试,得到的成绩没有外部意义。
不适合拿来做临床诊断工具的验证。 尿检激素是家庭自测设备给出的值,官方也承认商业设备使用了自有算法处理部分数据。它提供的是"接近真值"的锚,不等于临床检验科的血激素结果。
不适合拿来做疾病队列研究。 入组排除了糖尿病与近期激素类避孕使用者,样本是健康的年轻月经者。多囊卵巢综合征、子宫内膜异位症等临床队列的结论无法由此推出。
不适合拿来做跨年趋势或绝对日期分析。 绝对日期已被替换成相对研究日,第二区间从约第 905 天续接,只保留了工作日与周末的指示。需要与外部真实事件对齐的设计不成立。
§2 数据构成与规格
2.1 二十三张表与四个来源
官方把 23 张表按数据来源分成四组:入组前问卷给出的人口学表(1 张)、日记与 Mira 转抄合成的自报与激素表(1 张)、Dexcom 给出的血糖表(1 张)、以及 Fitbit 派生的 20 张表。这个划分不是随意的,它直接对应四种采集节奏:人口学是一次性的,日记与激素是每日的,血糖是高频连续的,Fitbit 各项则按指标本身的粒度分布,从逐分钟的步数与心率到每晚一次的睡眠分与腕温都有。
把 20 张 Fitbit 表拆开而不是合成一张宽表,是官方刻意的选择。官方说明写明每张表对应"少量紧密相关的指标,基本保持原始导出形式"。好处是保留了厂商导出的字段结构与时间戳精度,代价是使用方要自己做跨表对齐——二十张表各有各的时间粒度,强行外连接会立刻产生行数爆炸或时间错位。
2.2 二十三张表的完整清单
下表按官方数据描述符中表 2 的分组与描述整理,表名为该表对应的信号类别;文件的具体命名以官方目录为准,本节不虚构文件名。
| 序号 | 来源 | 表名(信号类别) | 官方描述要点 | 时间粒度 |
|---|---|---|---|---|
| 1 | 入组前问卷 | Demographic | 基线信息:出生年份、性别、教育程度、初潮年龄等 | 静态,一人一行 |
| 2 | 自报与 Mira | Self-Report and Hormone | 逐日自报的经期相关症状(情绪波动、痛经、经量)与三项激素水平 | 每日 |
| 3 | Dexcom | Glucose | 血糖值、变化速率与事件子类型 | 高频连续 |
| 4 | Fitbit | Active Minutes | 全天活动强度分档:久坐、轻度、中度、高强度各自的分钟数 | 日级汇总 |
| 5 | Fitbit | Active Zone Minutes | 按心率区间统计的时长,含各区间分钟数与心率区间标识 | 日级汇总 |
| 6 | Fitbit | Altitude | 海拔,含时间戳与高程值 | 带时间戳 |
| 7 | Fitbit | Calories | 消耗热量,含时间戳 | 带时间戳 |
| 8 | Fitbit | Computed Temperature | 睡眠期间温度,含夜间均值、标准差与睡眠窗口时间戳 | 每晚 |
| 9 | Fitbit | Demographic VO2 Max | 心肺适能估计值,含数值、误差及各自的滤波版本 | 低频 |
| 10 | Fitbit | Distance | 行走距离,含时间戳 | 带时间戳 |
| 11 | Fitbit | Estimated Oxygen Variation | 血氧变异,用红外与红光信号比值估计 | 带时间戳 |
| 12 | Fitbit | Exercise | 记录的活动:名称、时长、消耗热量、平均心率 | 事件级 |
| 13 | Fitbit | Heart Rate | 心率读数,含时间戳与置信度 | 带时间戳 |
| 14 | Fitbit | Heart Rate Variability Details | 心率变异:RMSSD、低频功率、高频功率等 | 日级或更细 |
| 15 | Fitbit | Height and Weight | 第一区间与第二区间开始时各自的身高体重 | 每区间一次 |
| 16 | Fitbit | Respiratory Rate Summary | 分睡眠阶段的呼吸率,含快速眼动期呼吸率与标准差 | 每晚 |
| 17 | Fitbit | Resting Heart Rate | 静息心率,含日期、时间与误差估计 | 每日 |
| 18 | Fitbit | Sleep | 睡眠分期与时序:起止时间、时长、入睡分钟数、卧床时长 | 每晚,跨夜 |
| 19 | Fitbit | Sleep Score | 夜间睡眠分,含恢复分与静息心率等分量 | 每晚 |
| 20 | Fitbit | Steps | 步数,含时间戳 | 带时间戳 |
| 21 | Fitbit | Stress Score | 每日压力分,由睡眠、反应性与体力负荷合成 | 每日 |
| 22 | Fitbit | Time in Heart Rate Zones | 按心率区间统计的分钟数 | 日级汇总 |
| 23 | Fitbit | Wrist Temperature | 夜间腕温相对基线的偏移,含时间戳 | 每晚 |
需要强调两处容易误读的地方。其一,第 5 项 Active Zone Minutes 与第 22 项 Time in Heart Rate Zones 都涉及心率区间,但前者来自 Fitbit 的活动区间分钟体系、后者是按心率区间定义的分钟数,两者不是同一口径的重复表。其二,第 9 项 Demographic VO2 Max 虽带 Demographic 字样,却属于 Fitbit 派生表而非人口学表,它给出的是心肺适能估计值及其误差。
2.3 主键与时间轴:两个键撑起全部连接
所有表共享受试者标识 id 与相对时间变量 day_in_study。这一设计同时解决了三件事:跨表对齐、去标识、以及跨区间的纵向续接。
跨表对齐靠 id 加 day_in_study 的组合。不同表的时间粒度不同,日级汇总表与研究日是一一对应的,带时间戳的高频表则需要在研究日内再按时间戳排序或聚合。
去标识靠"相对化"。官方写明绝对日历日期被替换为相对的研究日值,并额外加入了工作日与周末的指示变量。这意味着星期几的效应仍然可分析,而"这一天是几月几日"不可知。
纵向续接靠一条约定:每个受试者的时间轴从第一区间参与的第 1 天开始;第二区间返回的受试者,数据从大约第 905 天重新开始,以反映真实世界流逝的时间。905 这个数字不是间隔天数,而是从第一区间起点算起的偏移。
2.4 跨夜事件为什么要另起字段
睡眠是最典型的跨日历日事件:晚上十一点上床,早上七点起床,这段记录落在两个研究日之间。官方为此在睡眠相关表里加入了 sleep_start_day_in_study 与 sleep_end_day_in_study,用起止两个字段记下完整时长。
这个设计有一条使用上的硬要求:归日不能用开始日。若按开始日归并,凌晨入睡的那部分记录会被算到前一天,夜间生理量与当天的激素、症状就错开了一天。对月经周期研究来说,这一天之差足以让相位与生理量的对应关系整个偏移。
2.5 字段字典:能确定的与不能确定的
官方页面给出的是表级描述与顶层键名,没有逐列列出全部变量名。下表把能确定与不能确定的部分分开写清,避免把推测当事实。
| 层次 | 项 | 是否由官方明示 | 说明 |
|---|---|---|---|
| 键 | id |
明示 | 受试者标识,跨表共享 |
| 键 | day_in_study |
明示 | 相对研究日 |
| 键 | sleep_start_day_in_study |
明示 | 睡眠事件的起始研究日 |
| 键 | sleep_end_day_in_study |
明示 | 睡眠事件的结束研究日 |
| 变量 | 黄体生成素 | 明示 | 尿检测得,在自报与激素表内 |
| 变量 | 雌酮-3-葡萄糖醛酸苷 | 明示 | 雌激素尿代谢物 |
| 变量 | 孕二醇葡萄糖醛酸苷 | 明示 | 孕激素尿代谢物 |
| 变量 | 经期状态与症状自报 | 明示 | 由自研日记应用采集 |
| 变量 | 血糖值与变化速率 | 明示 | 血糖表内 |
| 变量 | 心率及其置信度 | 明示 | 心率表内 |
| 变量 | RMSSD、低频功率、高频功率 | 明示 | 心率变异表内 |
| 变量 | 夜间腕温相对基线偏移 | 明示 | 腕温表内 |
| 变量 | 各表逐列列名 | 未明示 | 官方未逐列列出;需取得文件后自行核对 |
| 变量 | 各表行数 | 未明示 | 需取得文件后才知道,本文不涉及 |
| 变量 | 文件体积与总行数 | 未明示 | 受限访问,本文未核验 |
2.6 两个区间不是同一套设备口径
官方在方法部分明确写了:两个区间之间设备有更新,导致部分被测变量的增加、删除或修改。这句话的分量很重——它意味着把两个区间纵向拼接时,同一变量在两个区间可能不是同一定义。
配套的处理方式是"留空":两轮数据被纵向堆叠,某一轮没有采集的字段留空,官方明确不做插补,也不做额外清洗,以保留数据的真实世界属性。这是本库最重要的一条使用约定。它带来两个直接后果:其一,任何聚合之前必须先确认该字段在该轮是否被采集;其二,缺值不能当作"测得为零"或"正常",只能当作未采集。
§3 它是谁的数据
3.1 贡献者与署名
作者共五人,均署名多伦多大学:Blue Lin、Jin Yi Li、Kaavya Kalani、Khai Truong、Alex Mariakakis。配套的数据描述符论文以 Georgianna Lin 为第一作者,署名同为多伦多大学。通讯作者信息需登录 PhysioNet 才能查看。
资助方为加拿大自然科学与工程研究理事会的两项发现基金(编号 RGPIN-2021-03457 与 RGPIN-2021-04268)、一项 Google 博士奖学金,以及 Google 的一项无限制研究捐赠。官方声明作者不存在竞争性的财务或非财务利益。
3.2 时间线
| 时间 | 事件 |
|---|---|
| 2022 年 1 月至 4 月 | 第一区间数据采集,50 人入组 |
| 第一区间结束后 | 单独的知情同意流程,授权公开去标识数据;42 人同意公开 |
| 2024 年 7 月至 10 月 | 第二区间数据采集,20 人参加 |
| 第二区间结束后 | 20 人全部同意公开其第二区间数据 |
| 2025 年 9 月 9 日 | 1.0.0 版本在 PhysioNet 发布 |
| 2026 年 | 数据描述符论文发表于 Scientific Data 第 13 卷,文章编号 411 |
第二区间与第一区间相隔约两年,这也是时间轴从第 905 天续接的来源。间隔两年带来的不只是样本流失,还有设备固件、应用版本与研究团队工具链的变化。
3.3 采集场景与入组条件
采集完全在自由生活场景下进行,不在门诊、不住院、无监督。受试者从大多伦多地区的女性健康倡导组织运营的社群媒体群组与工作空间招募而来。
入组条件与排除条件如下:
| 类别 | 条件 | 影响 |
|---|---|---|
| 纳入 | 有月经的成年人,年龄 18 岁以上 | 未成年人不在覆盖范围 |
| 纳入 | 研究期间不打算长时间离开大多伦多地区 | 保证随访与设备回收 |
| 排除 | 糖尿病诊断 | 代谢病相关的周期研究无法开展 |
| 排除 | 研究开始前三个月内使用过激素治疗或避孕 | 排除了最常见的激素干预人群 |
| 退出 | 妊娠或未遵守方案者退出 | 官方说明实际无人符合该条件 |
第三条与第四条排除标准值得单独提示。它们保证了激素曲线是自然周期,但也把结果的外推范围限制在"未使用激素类避孕的健康年轻人"之内。
3.4 数据来源的四个层次与去标识处理
| 层次 | 内容 | 处理 |
|---|---|---|
| 第一层:原始设备导出 | 制造商门户导出的 Fitbit、Dexcom、Mira 数据 | 官方称基本保持原始形式 |
| 第二层:自报 | 日记应用中的症状、经期状态、压力、睡眠、活动强度 | 逐日填写,第二区间改为可选 |
| 第三层:厂商算法派生 | 睡眠分期、压力分、睡眠分、心肺适能估计等 | 由厂商算法给出,官方承认可能存在算法偏差 |
| 第四层:研究方加工 | 四相位标签由 Mira 的激素判读给出 | 月经期、卵泡晚期、排卵期、黄体期 |
去标识按 HIPAA 标准执行:姓名、邮箱、设备标识被移除;设备账户使用唯一的字母数字标识注册;绝对日期替换为研究日;加入工作日与周末指示。两轮数据堆叠后未做插补与额外清洗。
§4 它最独特的东西
4.1 稀缺性:激素真值与可穿戴信号在同一条时间轴上
本库最不可替代的一点,是把"每日尿检激素"与"连续可穿戴信号"放在同一批人、同一段时间上。现有的可穿戴研究绝大多数只有信号没有激素;现有的激素研究绝大多数在门诊且稀疏采样。两边各自成熟,中间那一层——激素波动如何调制日常生理信号——此前几乎没有可用的公开数据。
官方在使用说明里把这一层拆成四条研究线索:把可穿戴信号映射到月经相位、刻画周期变异与影响因素、研究激素与生理的交互、以及开发预测模型。前三条都依赖激素真值,第四条则是它面向工程的应用出口。
4.2 差异化证据:同一批人身上的三把尺子
| 尺子 | 测什么 | 粒度 | 由谁给出 |
|---|---|---|---|
| 尿检激素 | 黄体生成素、雌激素代谢物、孕激素代谢物 | 每日 | Mira Plus 家用分析仪 |
| 可穿戴生理 | 心率、心率变异、腕温、呼吸率、睡眠分期、活动 | 每分钟到每晚 | Fitbit Sense |
| 主观体验 | 症状、疼痛、情绪、压力、睡眠感受、活动强度 | 每日 | 自研日记应用 |
三把尺子在同一人身上的分歧本身就是研究对象:激素显示已排卵而本人毫无感觉、自报压力大而设备压力分不高、腕温偏移明显而激素曲线平坦——这些不一致恰恰是消费级产品最容易出错的地方。
4.3 一个具体的研究写法
假设要回答"腕温能否替代尿检判断排卵"。用本库可以这样做:从自报与激素表取出每位受试者的激素序列与四相位标签,以连续出现四个相位定义一个完整周期;从腕温表取出每晚相对基线的偏移;把两者按 id 与 day_in_study 对齐;只在第一区间内做,以避开设备更新带来的口径变化;按受试者划分训练与测试集,而不是按行随机划分。
这个设计的每一步都对应本库的一条约束:周期定义用官方的四相位而非自造规则,区间限制用官方的设备更新说明,划分方式用受试者标识而非行号。任何一步省掉,结果都会偏。
4.4 标注粒度:日级激素配多粒度生理
标注的粒度是不对称的。激素是每日一次,腕温与睡眠分是每晚一次,心率和步数是带时间戳的高频值,人口学是一次性静态值。这个不对称决定了能做与不能做的事:
| 目标粒度 | 可用的锚 | 限制 |
|---|---|---|
| 日级 | 激素、自报症状、静息心率、压力分 | 最稳的一层,跨表对齐简单 |
| 夜级 | 腕温、睡眠分、睡眠分期、呼吸率 | 需处理跨夜归日问题 |
| 分钟级 | 心率、步数、热量、距离、海拔 | 有信号但无同粒度激素锚 |
| 相位级 | 四相位标签 | 相位跨度因人而异,需按周期归一化 |
分钟级的分析没有同粒度的激素锚,这是硬限制:可以研究分钟级信号在相位内的模式,但不能声称某个分钟的读数对应某个激素水平。
4.5 边界条件:什么情况下它不再适用
一旦要求大样本,它就不适用。 42 人与 20 人的规模决定了它只能做机制与方法学研究。
一旦要求绝对时间,它就不适用。 日期已相对化,第二区间以第 905 天续接。
一旦要求第二区间的血糖,它就不适用。 血糖只在第一区间采集。
一旦要求两个区间口径一致,它就不适用。 设备更新导致变量增删改,且第二区间日记为可选。
一旦要求厂商算法的可解释性,它就不适用。 睡眠分期、压力分等是商业设备的派生输出,官方承认其处理过程不可见。
§5 怎么拿到
5.1 目录结构与本文的核验边界
本库是受限访问资源。官方页面在文件一节明确写道:要取得文件,必须签署该项目的数据使用协议。未授权请求访问文件目录会被拒绝,因此本文没有看到实际的文件清单与目录树,也不掌握各表的行数、列数、体积与逐列变量名。
下表把已知的与未核验的分开列出,避免把推测写成事实。
| 项目 | 状态 | 依据 |
|---|---|---|
| 表数量 23 张与四组划分 | 已核实 | 官方数据描述一节 |
| 23 张表各自对应的信号类别与官方描述 | 已核实 | 官方数据描述符的表 2 |
| 主键 id 与 day_in_study | 已核实 | 官方数据描述一节 |
| 跨夜事件的起止研究日字段 | 已核实 | 官方数据描述一节 |
| 第二区间约从第 905 天续接 | 已核实 | 官方数据描述一节 |
| 文件格式 CSV | 已核实(间接) | 官方示例仓库使用的三个文件名均为 CSV |
| 目录树、子目录划分 | 未核验 | 受限访问 |
| 各表行数与列数 | 未核验 | 受限访问 |
| 逐列变量名 | 未核验 | 官方未逐列列出 |
| 数据字典文件是否存在 | 未核验 | 受限访问 |
5.2 申请与下载
| 步骤 | 动作 | 注意 |
|---|---|---|
| 1 | 注册 PhysioNet 账号并完成平台要求的培训与凭证化流程 | 受限资源的通用前置条件 |
| 2 | 在项目页签署数据使用协议 | 官方文件一节给出的唯一硬性要求 |
| 3 | 登录后访问文件目录 | 未授权请求会被拒绝 |
| 4 | 下载全部表或按需下载子集 | 官方示例仓库只需三张表即可跑通 |
| 5 | 记录版本号 1.0.0 | 论文引用必须写版本号 |
签署协议后,数据仍受 PhysioNet 受限健康数据许可 1.5.0 约束:不得再分发、不得尝试重新识别受试者、研究成果的使用范围限于协议允许的研究用途。
5.3 加载三张表的最小骨架
官方示例仓库给出的入门路径只用了三张表:自报与激素、静息心率、计算温度。下面的写法按官方示例仓库中的文件名为准。
import pandas as pd
#-- 官方示例仓库使用的三个文件名
sr = pd.read_csv('hormones_and_selfreport.csv', low_memory=False)
rhr = pd.read_csv('resting_heart_rate.csv', low_memory=False)
tmp = pd.read_csv('computed_temperature.csv', low_memory=False)
#-- 主键是 id 与 day_in_study,不要用行号对齐
KEY = ['id', 'day_in_study']
for name, df in [('selfreport', sr), ('rhr', rhr), ('temp', tmp)]:
print(name, df.shape, [k for k in KEY if k in df.columns])
第一段只做一件事:确认三张表都有 id 与 day_in_study 两列。任何一张表缺列,后续的合并都要先补出研究日,而不是靠行数对齐。
5.4 跨夜事件的归日处理
import pandas as pd
sleep = pd.read_csv('sleep.csv', low_memory=False)
#-- 睡眠跨夜,按结束研究日归日;按开始日归日会让夜段错开一天
sleep['day_in_study'] = sleep['sleep_end_day_in_study']
#-- 与研究日合并前先去重:同一人同一夜只保留一条
sleep = sleep.sort_values(['id', 'sleep_end_day_in_study'])
sleep = sleep.drop_duplicates(subset=['id', 'sleep_end_day_in_study'], keep='last')
上面这段里的去重规则是防御性的:睡眠表可能同时存在主记录与分段记录,合并前必须确认每人每晚只有一条,否则激素与睡眠的对应关系会一对多地膨胀。
5.5 周期切分与相位标签
import pandas as pd
sr = pd.read_csv('hormones_and_selfreport.csv', low_memory=False)
#-- 官方定义:连续出现全部四个相位才算一个完整周期
PHASES = ['menstruation', 'late-follicular', 'ovulation', 'luteal']
def complete_cycles(g):
g = g.sort_values('day_in_study')
seq, out = [], []
for _, row in g.iterrows():
ph = row.get('phase')
if seq and ph == PHASES[0]:
out.append(seq)
seq = []
seq.append(row['day_in_study'])
return out
cycles = {pid: complete_cycles(g) for pid, g in sr.groupby('id')}
相位标签由 Mira 的激素判读给出,不是研究方人工标注,也不是从激素阈值重算的。把它当作厂商算法输出处理,是论文方法部分应当交代的一点。
5.6 五个最容易出错的地方
| 坑 | 现象 | 正确处理 |
|---|---|---|
| 按行随机划分数据集 | 同一人的多个周期分别落入训练与测试 | 按 id 分组划分,同一个人不跨两侧 |
| 跨夜睡眠按开始日归日 | 夜段与当日激素错开一天 | 用 sleep_end_day_in_study 归日 |
| 把两个区间直接拼接 | 血糖与日记在第二区间缺采集或改为可选 | 分区间分析,或明确写出缺值来源 |
| 把缺值当零或做插补 | 官方明确未采集即留空,且未做插补 | 保留缺失,在方法部分说明处理方式 |
| 把派生指标当物理量 | 睡眠分期、压力分来自厂商算法 | 写明设备型号与区间,标注其为算法输出 |
§6 与库内条目的关系
6.1 关系图谱
| 站内词条 | 与本库的关系 | 分工判据 |
|---|---|---|
| ki-endolist | 同为月经相关症状的逐日自报随访,但人群为临床诊断人群 | 要看自然周期与激素真值,用本库;要看疾病人群的症状负担,用 ki-endolist |
| endometrium-scrna-atlas | 同为月经周期相关的女性健康数据,但层次在单细胞与组织 | 宏观纵向用本库,微观机制用单细胞图谱 |
| wearable-device-dataset | 同为腕戴设备的多模态生理采集 | 需要激素锚与纵向周期设计,用本库;只要设备信号质量评估,用腕带库 |
| sleep-accel | 同含腕部睡眠相关信号 | 睡眠算法评测用睡眠库;睡眠与周期相位的关系用本库 |
| d1namo | 同含连续血糖与可穿戴多模态 | 糖尿病人群的血糖建模用 d1namo;健康人群周期与血糖用本库第一区间 |
| globem | 同为多年的可穿戴纵向感知 | 心理健康与行为感知用 globem;内分泌与周期用本库 |
| ppg-dalia | 同为日常活动下的腕戴光电容积信号 | 心率估计的信号级评测用 ppg-dalia;周期相位相关用本库 |
| tiles-2018-sleep | 同为消费级腕戴设备的长周期真实世界采集 | occupational 队列与睡眠用 TILES;月经健康用本库 |
6.2 检索路径
| 你想找什么 | 该往哪走 |
|---|---|
| 带激素真值的周期数据 | 本库,以及站内女性健康标签下的其他月经相关资源 |
| 疾病人群的症状随访 | ki-endolist 一类的临床随访库 |
| 腕戴信号质量的评测基准 | ppg-dalia、wearable-device-dataset 一类 |
| 连续血糖的多模态采集 | d1namo 与本库第一区间 |
| 组织与细胞层的月经周期机制 | endometrium-scrna-atlas 一类 |
6.3 分工判据
判断标准只有一条:你是否需要激素真值。需要激素真值来定义相位、验证信号、或评估预测误差的,本库是站内目前唯一同时提供每日尿检激素与连续可穿戴信号的资源;不需要激素真值、只要生理信号本身的,本库的受限访问门槛与 42 人规模都不划算,应当转向规模更大的可穿戴库。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
本节不评价研究做得好不好,只描述数据形态带来的使用限制。本库未做插补与额外清洗,官方把这一点当作特性而非缺陷写出来;对使用者而言,这意味着所有缺值处理都必须自己做,且必须在论文里交代。
7.1 五维评分
| 维度 | 评价 | 理由 |
|---|---|---|
| 稀缺性 | 高 | 同时具备每日激素真值与连续可穿戴信号的公开资源极少 |
| 时间深度 | 中 | 三月一个区间,20 人有第二个区间;不足以支撑多年趋势 |
| 人群广度 | 低 | 单一地区、年轻人群、族裔与年龄跨度有限 |
| 字段完整度 | 中 | 表级描述清晰,逐列字典未公开,缺值不插补 |
| 获取门槛 | 偏高 | 受限访问,需签署数据使用协议 |
7.2 质量的两层:设备度量与厂商派生
第一层是设备给出的原始读数与其直接衍生量,例如血糖值、心率读数带置信度、海拔与距离带时间戳。这一层的可信度取决于设备本身的准确性与佩戴依从性。
第二层是厂商算法派生的量,例如睡眠分期、睡眠分、压力分、心肺适能估计。官方明确承认商业设备可能使用自有算法处理部分数据,并承认存在算法偏差的可能。这一层不能当作物理量使用,只能当作"某型号设备在某固件版本下的输出"。
把两层混在一张特征表里喂给模型,是本研究领域最常见的错误。正确做法是分层建模或在方法部分显式区分。
7.3 已知的、可枚举的偏差
| 偏差来源 | 机制 | 影响 |
|---|---|---|
| 同意偏差 | 入组 50 人,只有 42 人同意公开数据 | 公开样本是同意公开者的子集 |
| 流失偏差 | 第二区间只剩 20 人 | 第二区间的结论基于更愿意坚持的人群 |
| 地区偏差 | 全部来自大多伦多地区 | 气候、生活方式与医疗可及性高度同质 |
| 年龄偏差 | 均值 20.9 岁与 22.0 岁 | 不适用于青少年与围绝经期 |
| 排除偏差 | 排除糖尿病与近期激素类避孕使用者 | 无法研究最常见的干预场景 |
| 设备版本偏差 | 两区间之间设备更新导致变量增删改 | 跨区间拼接存在口径风险 |
| 依从性偏差 | 每日尿检与日记需要受试者主动完成 | 缺值不是随机的,与受试者状态相关 |
第三行到第七行的每一条都不是猜测,都能在官方页面的方法部分找到对应说明。
7.4 外部验证矩阵
| 待验证命题 | 本库能给出的证据强度 | 缺口 |
|---|---|---|
| 腕温随周期相位变化 | 中:有激素锚,样本 42 人 | 单设备单型号,无法跨设备验证 |
| 心率变异与激素相关 | 中 | 心率变异为厂商派生量 |
| 血糖随周期波动 | 中偏低:仅第一区间 | 样本更小,且无第二区间复现 |
| 消费设备的压力分可信 | 弱:缺乏独立的压力参照 | 只有同源自报可对照 |
| 周期长度个体差异 | 中:有逐日激素序列 | 三月区间内完整周期数有限 |
7.5 它为何能持续
官方在采集阶段做了几件维持数据质量的事:要求受试者在采样前至少两小时不摄入液体、并安排在晨起后不久完成尿检;要求每天为手表短时间充电以减少电量耗尽造成的缺采;要求按厂商建议约每十天更换一次血糖传感器;要求受试者每日报告是否完成采集,并用自建看板比对完整性;每两周做一次缺数据的人工核查并联系受试者;同时把自报激素值与手机上 Mira 应用记录的值做核对。
这些措施解释了为什么本库的每日激素序列相对完整,也解释了它的天花板:这一类依从性维护高度依赖人力,规模难以扩大。
§8 生态位与历史
8.1 沿革:从人机交互研究到公开数据
本库的作者群体来自人机交互与可穿戴计算方向。配套的系列论文围绕月经追踪的使用体验、多模态数据的意义建构、腕温与激素的关系、以及血糖在周期中的变异展开。这个出身决定了它的设计取向:优先保证"日常场景下的多模态对齐",而不是优先扩大样本量。
数据描述符论文于 2026 年发表在 Scientific Data 第 13 卷,把采集协议、质控流程与表结构固化成了可引用的方法文本。
8.2 与挑战赛:它没有被任何挑战赛采用
公开页面没有显示本库与任何 PhysioNet 挑战赛关联。这本身就是信息:它缺少挑战赛所需的两样东西——足够大的样本与统一的评测任务。它的定位是探索性资源,不是基准。
8.3 生态位:激素锚而非训练源
在月经健康的公开数据版图里,本库占据的是"激素锚"这个位置。更大的队列可以提供更多人的周期长度分布,却无法提供同步的每日激素;更小的机制研究可以提供精细的实验室激素,却无法提供自由生活场景下的连续生理。本库在两者之间,代价是规模与门槛。
8.4 谁在用它,用来做什么
官方在使用说明里列出了四类用途:把可穿戴信号映射到月经相位、刻画周期变异与影响因素、研究激素与生理的交互、开发预测模型。前三类是学术用途,第四类是工程用途。
官方页面显示的项目浏览量为 1532(当前版本与全部版本一致)。这个数字只说明关注度,不说明使用深度。
§9 使用指引
9.1 三种角色的路径
| 角色 | 建议路径 | 重点注意 |
|---|---|---|
| 可穿戴算法工程师 | 先只做第一区间,用腕温与静息心率对四相位做小规模验证 | 派生指标是厂商输出,别当物理量 |
| 月经健康研究者 | 从自报与激素表出发,定义完整周期,再挂接生理表 | 完整周期用官方的四相位连续出现定义 |
| 数字健康与人机交互研究者 | 关注自报与设备信号的不一致,以及缺值模式 | 第二区间日记可选,缺值本身是研究素材 |
9.2 一条最短的可用流程
| 步骤 | 动作 | 产出 |
|---|---|---|
| 1 | 签署数据使用协议并取得文件 | 本地的 23 张表 |
| 2 | 读官方数据描述符的表 2,把 23 张表按来源分组 | 一张表级清单 |
| 3 | 加载自报与激素、静息心率、计算温度三张表 | 官方示例的最小集合 |
| 4 | 确认主键 id 与 day_in_study 存在 | 可合并的前提 |
| 5 | 按结束研究日给睡眠归日并去重 | 夜级数据对齐 |
| 6 | 在第一区间内定义完整周期 | 相位级标签 |
| 7 | 按受试者划分训练与测试 | 无泄漏的评估 |
| 8 | 报告版本号、区间、设备型号与缺值处理方式 | 可复现的方法描述 |
9.3 引用方式
| 引用对象 | 内容 |
|---|---|
| 数据集 | Lin, B., Li, J. Y., Kalani, K., Truong, K., & Mariakakis, A. (2025). mcPHASES: A Dataset of Physiological, Hormonal, and Self-reported Events and Symptoms for Menstrual Health Tracking with Wearables (version 1.0.0). PhysioNet. RRID:SCR_007345. doi:10.13026/zx6a-2c81 |
| 平台 | PhysioNet 平台综述论文,Pollard 等,2026 年发表于 Nature Health,doi:10.1038/s44360-026-00096-z |
| 配套论文 | Lin 等,A longitudinal dataset of physiological, hormonal, metabolic, and self-reported menstrual health data,Scientific Data 第 13 卷,文章编号 411,2026 |
| 示例仓库 | chai-toronto/mcphases,官方示例分析与脚本 |
写论文时建议额外注明四件事:使用的版本号 1.0.0;使用的是第一区间还是两个区间;选用了哪几张表与哪些派生指标;以及缺值的处理方式。第二项尤其重要——两个区间的设备口径不一致,不写明区间等于没交代方法。官方示例仓库还提醒了一条:已发表的相关论文基于全部参与者的数据,而只有一部分人同意公开,因此用本库重跑的结果可能与那些论文不同。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字全部来自 PhysioNet 官方页面的摘要、背景、方法、数据描述、使用说明、伦理与致谢各节;表级清单与周期特征数字来自配套数据描述符论文 |
| 文件核验 | 未核验:本库为受限访问资源,官方文件目录对未授权请求返回拒绝响应,23 张表的目录结构、行数、列数与逐列变量名均无法直接访问 |
| 不一致说明 | 官方页面使用"Interval"与"Round"两种说法指代同一组采集区间(第一区间、第二区间),本文统一写作"区间",不改动任何数字 |
| 不一致说明 | 官方摘要写"两个三月期间采集了 42 名加拿大年轻成年月经者的数据",方法部分写"50 人入组,第一区间 42 人同意公开,其中 20 人完成第二区间"。两个 42 的含义一致,指同意公开的第一区间人数;本文按方法部分的口径表述 |
| 论文信息 | 数据描述符论文通过摘要与表格页面核对,未逐节读全文;人口学与周期特征数字取自该文表 1 与技术验证部分 |
| 未核验内容 | 目录树、各表行数与列数、逐列变量名、文件体积、数据字典文件的有无、第二区间实际完成日记的天数、四相位标签在各人身上的具体取值、睡眠表是否存在分段记录 |
| 图像 | 无配图;封面为生成式提示词,不含任何真实受试者图像与可识别个体 |
| 免责 | 本文不构成临床建议;数据使用须遵守 PhysioNet Restricted Health Data Use Agreement 1.5.0 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 它可以开放下载 | 受限访问资源,须注册并签署数据使用协议 | 官方页面访问策略与文件一节 |
| 有 50 名受试者的数据 | 入组 50 人,同意公开的为第一区间 42 人 | 官方方法部分 |
| 两个区间各 42 人 | 第二区间为 20 人 | 官方方法部分与数据描述符表 1 |
| 两个区间的数据口径一致 | 设备更新导致部分变量增删改;第二区间不采血糖、日记改可选 | 官方方法部分 |
| 缺值已被补齐 | 官方明确不做插补,未采集即留空 | 官方去标识与处理一节 |
| 四相位标签是研究方人工标注 | 由 Mira 的激素判读给出 | 官方去标识与处理一节 |
| 睡眠按开始日归日就行 | 跨夜事件需用结束研究日归日 | 官方数据描述一节的起止字段 |
| 有绝对日期可以做季节分析 | 绝对日期已替换为研究日,只保留工作日与周末指示 | 官方去标识一节 |
| 可以研究糖尿病人群 | 入组排除糖尿病诊断者 | 官方参与者一节 |
| 可以研究激素类避孕使用者 | 入组排除研究前三个月内使用者 | 官方参与者一节 |
| 23 张表都是 Fitbit 的 | 只有 20 张是 Fitbit 派生,另有 Demographic、Self-Report and Hormone、Glucose 各一张 | 官方数据描述一节 |
| 用它训练的模型可以直接上线 | 42 人规模,机制与方法学用途为主 | 官方规模说明与本文 §1.6 |
FAQ
Q1:42 人是不是太少了?
对于回答"可穿戴信号能否反映激素定义的相位"这类机制性问题,42 人配每日激素真值是够用的;对于训练要落地的预测模型则远远不够。这个库的入组门槛极窄:要求有月经、18 岁以上、研究期间不长期离开大多伦多地区,还要排除糖尿病与近三个月内使用过激素治疗或避孕的人。每一条都在优先保证激素曲线是自然周期。可以说它的设计取向是宁窄勿杂。
Q2:两个区间能不能合并成一份数据用?
能合并,但必须分口径。官方写明两个区间之间设备有更新,导致部分被测变量增加、删除或修改;第二区间还取消了血糖采集、把日记改为可选。做法是分区间分析,或在合并时显式标注每一列在哪个区间被采集,并在方法部分写明。直接把两轮堆叠后当两倍样本用,是最常见的错法。
Q3:四相位标签是怎么来的,能不能信?
它由 Mira 的激素判读给出,四个相位为月经期、卵泡晚期、排卵期、黄体期,不是研究方人工标注,也不是从激素阈值重算的。作为真值锚,它强于日历法与自报法;作为厂商算法输出,它不等于临床检验结果。论文里应当写明标签来源,而不是笼统写"激素确认的相位"。
Q4:缺值应该怎么处理?
官方的立场是保留真实世界属性:两轮数据堆叠,未采集的字段留空,不做插补、不做额外清洗。这意味着缺值不能当零,也不能用均值填。更重要的是,缺值与受试者状态相关——忘记做尿检、忘记写日记、忘记给手表充电,本身都不是随机事件。把缺值模式当噪声丢掉,会丢掉一部分信息。
Q5:能不能做季节、年份或绝对日期相关的分析?
不能。绝对日历日期已被替换成相对的研究日值,只额外保留了工作日与周末的指示变量。第二区间从大约第 905 天续接,反映的是真实流逝的时间,不是真实日期。可以做的都是相对时间:同一受试者内部的前后关系、间隔、相位顺序。
Q6:官方示例仓库提到的三个文件,是不是就是全部数据?
不是。那三张表只是入门示例所需的最小集合,分别覆盖自报与激素、静息心率、计算温度。完整数据有 23 张表。示例仓库的存在价值在于它给出了一条官方认可的对齐与分析路径,包括完整周期的定义方式。
Q7:已发表的那些论文结论,能用本库复现吗?
可能复现不了,而且这不是数据有问题。官方示例仓库明确提醒:相关论文的分析基于全部参与者的数据,而只有一部分人同意公开到 mcPHASES,因此用公开数据得到的结果可能与已发表结果不同。引用本库的研究应当报告自己这一份样本的规模与区间,而不是直接对照原始论文的数字。
术语表
| 术语 | 解释 |
|---|---|
| mcPHASES | menstrual cycle Physiological, Hormonal, and Self-Reported Events and Symptoms 的缩写,本数据集名称 |
| 黄体生成素(LH) | 垂体分泌的促性腺激素,排卵前的峰值是判断排卵窗口的关键指标 |
| 雌酮-3-葡萄糖醛酸苷(E3G) | 雌激素的尿代谢物,家用尿检常以它代表雌激素水平 |
| 孕二醇葡萄糖醛酸苷(PdG) | 孕激素的尿代谢物,排卵后上升,用于确认是否排卵 |
| 卵泡晚期 | 排卵前的卵泡发育后段,官方四相位之一 |
| 黄体期 | 排卵后到下次月经前的阶段,官方四相位之一 |
| 完整周期 | 官方定义:连续出现全部四个相位的一段序列 |
| day_in_study | 相对研究日;每个受试者的第 1 天为第一区间的起始日 |
| 心率变异(HRV) | 逐拍间期的变异程度;本库给出 RMSSD、低频功率、高频功率等派生量 |
| RMSSD | 相邻心跳间期差值平方和的均方根,心率变异的常用时域指标 |
| 腕温偏移 | 夜间腕部皮肤温度相对个人基线的差值,消费设备常用的周期信号 |
| 连续血糖监测(CGM) | 皮下间质葡萄糖的连续测量;本库用 Dexcom G6,仅第一区间 |
| 派生指标 | 由厂商算法从原始信号算出的量,如睡眠分期、压力分、睡眠分、心肺适能估计 |
| 受限访问 | 需注册、完成平台要求并签署数据使用协议后才能取文件的访问级别 |
| DUA | 数据使用协议;本库为 PhysioNet Restricted Health Data Use Agreement 1.5.0 |
| HIPAA 去标识 | 美国健康保险流通与责任法案规定的去标识标准;本库按其执行 |
| 同意偏差 | 只有同意公开者的进入公开样本,导致样本不是入组人群的随机子集 |
| 依从性 | 受试者按要求完成每日尿检、佩戴与日记的程度;直接影响缺值模式 |
附录 A:核心数字核对表
| 项 | 值 | 出处 | 核验层级 |
|---|---|---|---|
| 全称 | mcPHASES: A Dataset of Physiological, Hormonal, and Self-reported Events and Symptoms for Menstrual Health Tracking with Wearables | 官方页面标题 | 官方页面 |
| 版本 | 1.0.0 | 官方页面版本区 | 官方页面 |
| 发布日期 | 2025 年 9 月 9 日 | 官方页面 | 官方页面 |
| 入组人数 | 50 名 | 官方方法部分 | 官方页面 |
| 第一区间公开人数 | 42 名 | 官方方法与摘要 | 官方页面 |
| 第二区间人数 | 20 名 | 官方方法与摘要 | 官方页面 |
| 观察长度 | 每人一个三月区间,20 人另有一个三月区间 | 官方摘要与方法 | 官方页面 |
| 区间时间 | 第一区间 2022 年 1 至 4 月;第二区间 2024 年 7 至 10 月 | 数据描述符表 1 | 配套论文 |
| 表数量 | 23 张 | 官方数据描述一节 | 官方页面 |
| 表构成 | 1 张人口学 + 1 张自报与激素 + 1 张血糖 + 20 张 Fitbit 派生 | 官方数据描述与描述符表 2 | 官方页面与配套论文 |
| 主键 | id 与 day_in_study | 官方数据描述一节 | 官方页面 |
| 跨夜字段 | sleep_start_day_in_study、sleep_end_day_in_study | 官方数据描述一节 | 官方页面 |
| 第二区间起始日 | 约第 905 天 | 官方数据描述一节 | 官方页面 |
| 相位类目 | 月经期、卵泡晚期、排卵期、黄体期,共 4 个 | 官方去标识与处理一节 | 官方页面 |
| 激素指标 | 黄体生成素、雌酮-3-葡萄糖醛酸苷、孕二醇葡萄糖醛酸苷,共 3 项 | 官方方法部分 | 官方页面 |
| 设备 | Fitbit Sense、Dexcom G6(仅第一区间)、Mira Plus | 官方方法部分 | 官方页面 |
| 日记量表 | 活动强度 5 级;压力与睡眠问题 6 级 | 数据描述符方法部分 | 配套论文 |
| 第一区间年龄 | 20.9 ± 2.8 岁 | 数据描述符表 1 | 配套论文 |
| 第二区间年龄 | 22.0 ± 2.3 岁 | 数据描述符表 1 | 配套论文 |
| 完整周期数 | 合计 192 个,其中第一区间 135 个、第二区间 57 个 | 数据描述符技术验证部分 | 配套论文 |
| 平均相位天数 | 月经期 6.2 天、卵泡晚期 7.7 天、排卵期 7.3 天、黄体期 10.4 天 | 数据描述符技术验证部分 | 配套论文 |
| 自报周期规律性 | 规律 29 人(69.0%)、不规律 13 人(31.0%),第一区间 | 数据描述符表 1 | 配套论文 |
| 入组排除项 | 糖尿病诊断;研究前三个月内使用激素治疗或避孕 | 官方参与者一节 | 官方页面 |
| 缺值处理 | 留空,不做插补与额外清洗 | 官方去标识与处理一节 | 官方页面 |
| 许可 | PhysioNet Restricted Health Data License 1.5.0 | 官方页面许可栏 | 官方页面 |
| 数据使用协议 | PhysioNet Restricted Health Data Use Agreement 1.5.0 | 官方页面访问栏 | 官方页面 |
| DOI,v1.0.0 | 10.13026/zx6a-2c81 | 官方页面发现栏 | 官方页面 |
| DOI,最新版 | 10.13026/5b8h-jx61 | 官方页面发现栏 | 官方页面 |
| 伦理批件 | 多伦多大学研究伦理委员会,协议号 41568 | 官方伦理一节 | 官方页面 |
| 资助编号 | NSERC RGPIN-2021-03457、RGPIN-2021-04268 | 官方致谢一节 | 官方页面 |
| 项目浏览量 | 1532(当前版本与全部版本一致) | 官方页面发现栏 | 官方页面 |
附录 B:数字的来源分层
第一层,官方页面。 入组与公开人数、区间设置、表数量与四组划分、主键与跨夜字段、第二区间起始日、四相位标签来源、三项激素指标、设备型号、缺值处理方式、许可与协议版本、两个 DOI、伦理批件号、资助编号、项目浏览量。这些是本文正文使用的主要依据。
第二层,配套数据描述符论文。 23 张表的逐表描述与来源分组、人口学构成与年龄均值、区间具体月份、完整周期数与平均相位天数、日记量表级数、以及采集阶段的质量控制措施。这一层用于补充官方页面未展开的表级结构与技术验证信息,凡与官方页面冲突处一律以官方页面为准。
第三层,未核验。 需要打开文件才能得到的数字:目录树结构、各表行数与列数、逐列变量名、文件体积、是否存在数据字典文件、第二区间日记实际完成天数、四相位标签在个体层面的取值序列。这些都需要先取得授权再统计,本文按数字纪律的要求不予涉及。
附录 C:任务代码
任务一:检查各表的时间粒度,避免跨粒度强行外连接
import pandas as pd
import glob
#-- 逐表检查主键列与每人的行数,判断粒度是日级、夜级还是高频
for path in sorted(glob.glob('*.csv')):
df = pd.read_csv(path, low_memory=False)
cols = [c for c in ['id', 'day_in_study'] if c in df.columns]
per = df.groupby('id').size() if 'id' in df.columns else None
print(path, cols, 'median rows per id:', None if per is None else int(per.median()))
这段代码的目的不是统计分布,而是判断粒度:每人行数接近区间天数的是日级表,明显更多的高频表,明显更少的是静态或事件表。粒度判断错了,后面所有的合并都会错位。
任务二:只在一个区间内做,并把区间写进结果
import pandas as pd
sr = pd.read_csv('hormones_and_selfreport.csv', low_memory=False)
#-- 第二区间约从第 905 天续接,据此切出第一区间
INT1 = sr[sr['day_in_study'] < 500].copy()
INT2 = sr[sr['day_in_study'] >= 500].copy()
#-- 分区间报告,不要合并后一起算
for name, part in [('interval1', INT1), ('interval2', INT2)]:
print(name, 'ids:', part['id'].nunique(), 'days:', part['day_in_study'].max())
阈值 500 只是把两段明显分开的时间轴切开的便利取值,不是官方给出的分区规则;官方只说明第二区间从大约第 905 天开始。严谨的做法是先按每人画出时间轴,再按人判断断点。
附录 D:完整参考链接
| 编号 | 名称 | 链接 | 用途 |
|---|---|---|---|
| 1 | mcPHASES 官方页面 v1.0.0 | https://physionet.org/content/mcphases/1.0.0/ | 全部规模、结构、边界数字的主要来源 |
| 2 | 数据描述符论文 | https://www.nature.com/articles/s41597-026-06805-3 | 23 张表的表级描述、人口学与周期特征 |
| 3 | 官方示例分析仓库 | https://github.com/chai-toronto/mcphases | 入门脚本与三个示例文件名 |
| 4 | 数据集 DOI,v1.0.0 | https://doi.org/10.13026/zx6a-2c81 | 引用与版本定位 |
| 5 | PhysioNet 平台综述,2026 | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与平台引用惯例 |
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 42 人、23 张表、两个三月区间、四相位标签 | 这四个数字定义了它的全部用法与限制 |
| 2 | 激素真值是它最不可替代的部分 | 别的可穿戴库只有信号没有锚 |
| 3 | 两个区间口径不一致,缺值不插补 | 直接堆叠会引入设备版本与采集范围的偏差 |
| 4 | 跨夜事件按结束研究日归日 | 按开始日归日会让夜段与当日激素错开一天 |
| 5 | 它是机制参照,不是训练粮仓 | 用它训练的论文会立刻遇到样本天花板 |
编辑说明
本文的核验时间为 2026 年 10 月 28 日。核对方式为直接访问 PhysioNet 项目页,逐节读取摘要、背景、方法、数据描述、使用说明、伦理、致谢与利益冲突部分,并尝试访问文件目录;文件目录因受限访问返回拒绝响应,故 23 张表的目录结构、行数、列数与逐列变量名未能核验,这一点已写入 §5.1 与 §10。表级结构、人口学构成与周期特征数字来自配套数据描述符论文的表 1、表 2 与技术验证部分,通过摘要页与表格页核对,未逐节读全文。本文未做任何自行计算得出的分布性统计,所有数字限于规模、结构、边界三类,并尽量标注官方出处。官方页面内部存在的两处措辞差异(Interval 与 Round 混用、摘要与方法部分对 42 人的表述口径),已在 §10 显式列出而未做择一。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- ki-endolist,共享标签:月经健康 / 每日自报 / 症状随访
- endometrium-scrna-atlas,共享标签:女性健康 / 月经周期 / 组学数据
- wearable-device-dataset,共享标签:可穿戴设备 / 腕戴信号 / 多模态生理
- sleep-accel,共享标签:可穿戴设备 / 睡眠 / 腕部加速度
- d1namo,共享标签:连续血糖 / 可穿戴多模态 / 代谢
- globem,共享标签:可穿戴感知 / 纵向数据 / 行为健康
- ppg-dalia,共享标签:光电容积脉搏波 / 日常活动 / 心率估计
- tiles-2018-sleep,共享标签:消费级腕戴 / 真实世界采集 / 纵向
- cps-dataset-sleep,共享标签:睡眠分期 / 多模态生理 / 标注密集
- slpdb,共享标签:睡眠 / 生理信号 / 长时程记录
- consumer-grade-wearables,共享标签:消费级可穿戴 / 认知状态 / 腕戴传感
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

