CDC WONDER — 美国公共卫生统计查询平台 AI-Ready Wikipedia | 千方病案医数集

30+ 公共卫生数据库 · 1999-2020 死因统计 · 免费 XML API

来源 U.S. Centers for Disease Control and Prevention (CDC) / National Center for Health Statistics (NCHS) url: https://wonder.cdc.gov/发布时间: 2026-09-08最后更新: 2026-09-08 阅读 4

信息速览

数据集名称CDC WONDER — 美国公共卫生统计查询平台 AI-Ready Wikipedia | 千方病案医数集
数据类型30+ 在线数据库,1999-2020 死因聚合,XML API 免鉴权,公共领域免费
规模全美死亡证书聚合(2020 年 3,383,729 例)
接入方式U.S. Centers for Disease Control and Prevention (CDC) / National Center for Health Statistics (NCHS) url: https://wonder.cdc.gov/
AI 就绪度

数据集封面

CDC WONDER — 美国公共卫生统计查询平台 AI-Ready Wikipedia


INFOBOX

数据集名称 CDC WONDER
英文全称 Wide-ranging ONline Data for Epidemiologic Research
别名/简称 WONDER Online Databases、CDC WONDER Online Database、D76(Underlying Cause of Death 库 ID)
疾病分类 全死因谱(ICD-11 全部死亡相关章节;示例:BA41 急性心肌梗死 / 8B11 脑梗死 / 2A00-2F9Z 恶性肿瘤,详见 §2.1)
SNOMED CT 419099009 Dead (finding) / 414545008 Ischemic heart disease / 363346000 Malignant neoplastic disease(死因统计以 ICD 编码为主,详见 §2.1b)
数据模态 结构化聚合统计(计数与率)、死因编码(ICD-10)、人口学分层数据
AI 任务类型 死亡率趋势分析与预测、空间统计/小区域估计、健康不平等量化、公共卫生监测、时间序列预测、流行病学基准
样本总数 30+ 在线数据库;UCD 库 1999-2020 全美死亡证书聚合,2020 年死亡 3,383,729 例
数据大小 在线查询按需生成,无整体批量下载(单次查询结果为 XML/TSV 报表)
数据格式 HTML 报表 / Tab 分隔文本 / XML(API)
许可证 公共领域(美国政府作品,17 U.S.C. §105)+ NCHS 数据使用限制(42 U.S.C. 242m(d))
访问级别 开放(无注册、无 API key、免费)
DUO 标签 NRES
语言 英文
首发日期 1991-08(首批 24 个数据库)
最后更新 持续年度更新:MCD 最终数据 2018-2024(截至 2026-09 检索)
发布机构 U.S. Centers for Disease Control and Prevention(CDC)/ National Center for Health Statistics(NCHS)
官方主页 https://wonder.cdc.gov/
下载地址 https://wonder.cdc.gov/ucd-icd10.html(UCD 查询入口)
DOI 10.2105/ajph.83.9.1289(系统论文 Friede et al. 1993)
引用次数 150+(OpenAIRE 选集引文,截至 2026-08,针对系统原始论文)
AI 就绪度评分 ⭐⭐⭐(3/5)— 免费开放、API 可编程、1999 年起死因口径连续;扣分项:仅 XML 输出、官方建议 2 分钟/次的限速、抑制与不可靠标记需自行处理、API 端死因库仅返回全国级数据
页面状态 published

§0 E-E-A-T 与审核声明

  • 医学审核:本条目由[千方病案医学编辑部]完成医学与流行病学交叉审核:§2 医学背景(死因登记制度、ICD 编码体系与 2020 年全美主要死因)、§7 偏倚分析(种族错分、死因误判与抑制偏倚)。
  • 数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 数据结构与 DAIMS 数据字典、§5 数据切分策略、§6 预处理 Pipeline 与 8 个坑点。
  • 审核日期:2026-09-05

医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。

技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。CDC WONDER 数据本身属公共领域,但 NCHS 依据《公共卫生服务法》(42 U.S.C. 242m(d))施加数据使用限制:仅可用于卫生统计分析,禁止发布 9 例及以下的死亡数或基于 9 例及以下死亡的率,违者将被剥夺访问权。本页面的 DUO 标签仅供参考,具体使用限制以 CDC WONDER 官方数据使用声明为准。


§1 数据集概览

§1.0 📌 30 秒速览

这是什么? CDC WONDER 是美国疾控中心(CDC)旗下的公共卫生统计在线查询平台,1991 年上线,目前聚合 30 余个在线数据库。其中最核心的是死亡数据:全美每一张死亡证书上的根本死因(Underlying Cause of Death,UCD)与最多 20 个多重死因(Multiple Cause of Death,MCD)都以 ICD-10 编码入库,可按年份、州、县、年龄、性别、种族、西班牙裔等维度自由组合统计出死亡数、粗死亡率与年龄调整死亡率。(wonder.cdc.govFriede et al. 1993)

为什么重要? 它是美国死因统计的事实标准:几乎所有"美国某年某病死亡率是多少、哪个州更高、哪个种族差距更大"的公开数字,追根溯源都出自 WONDER 的查询结果或其背后的 NCHS NVSS 文件。数据免费、无需注册、可通过 XML API 程序化获取,且 1999 年起统一使用 ICD-10 编码,多年份口径一致。(API 文档)

我能用它做什么? 典型用途包括:绘制疾病负担时间趋势(如 1999-2020 阿片类药物过量死亡曲线)、做州/县间健康不平等比较与年龄调整、构建流行病学教学与建模数据集、用贝叶斯小区域估计补全被抑制的小县率值,以及为公共卫生 AI 应用提供权威的"真值"参照。注意:这不是个体级数据集,聚合单元格与率的使用受 NCHS 保密条款约束。

§1.1 摘要

CDC WONDER(Wide-ranging ONline Data for Epidemiologic Research)由美国 CDC 于 1991 年 8 月建成上线,首年即提供 24 个数据库,定位是"把及时、可行动的信息交到公共卫生专业人员手中"(Friede et al., Am J Public Health 1993)。历经三次架构演进后,现行系统以 ad-hoc 查询为核心:用户在网页表单中选择分组变量、过滤条件与统计量,平台对底层全美死亡证书等行政登记数据实时聚合,返回计数、粗率与按 2000 年美国标准人口直接标准化的年龄调整率,并附 95% 置信区间、标准误及脚注。数据来源为 50 个州与哥伦比亚特区的生命登记系统,由 NCHS 通过 Vital Statistics Cooperative Program 统一编码为 ICD-10(1999 年起)后发布最终版文件,另提供临时(Provisional)死亡数据以支持近实时监测。平台同时开放 XML 格式的 HTTP 查询 API(无鉴权 POST),使全部查询可编程复现——这正是其 AI-Ready 的核心:免费公共领域 + API 可编程 + 多年份一致口径,代价则是 XML-only 输出、2 分钟/次的建议限速与小样本单元格抑制带来的左删失问题(详见 §6.5)。

§1.2 战略价值

维度一:公共卫生 AI 的"地面真值"层。 医疗 AI 模型若声称"降低某病死亡率",其评估终点必须锚定权威统计。CDC WONDER 提供的县级/州级死因聚合是可直接程序化获取的最高权威参照——无需申请、无需付费、口径与官方发布完全一致。对训练数据集构建者而言,它可用于校准队列选择偏差(某县的真实疾病死亡率 vs 你的队列抽样率)、生成疾病流行率先验,以及为合成数据设定现实约束。

维度二:健康不平等与政策研究的公共基础设施。 WONDER 允许按种族、西班牙裔、年龄、性别、城市化水平多维切分死亡率,使 AI 研究者能定量刻画模型性能可能放大的结构性差距(如美国印第安人/阿拉斯加原住民药物过量死亡率在部分年份的急剧上升)。2020 年起人口分母从 Bridged-Race 转向 Single-Race 口径(2018+ 数据库已用 Single-Race),理解这一口径切换对跨期比较至关重要(见坑点 4 与坑点 7)。

维度三:教学与可复现科学。 每个数据库自带在线文档、官方引用格式与查询示例,API 响应自带脚注与警告信息,天然适合作为"数据治理良好实践"的教学样本。同时它的限制条款(禁止发布 ≤9 例数据)本身就是差分隐私之外的另一类披露控制(disclosure control)范式,值得 AI 治理研究者研读。

维度四:跨平台数据治理的对照实验场。 与商业健康数据(理赔、EHR 二手数据)相比,WONDER 的口径全部公开可查、变更全部留痕——码表变更公告、人口序列修订说明、release 年份引用规范一应俱全。当你不确定某商业数据库的"2019 年心脏病死亡"是否可信时,同口径的 WONDER 查询就是裁决基准;这种"可对照性"本身在医疗 AI 数据治理中是稀缺属性。

§1.3 同类数据集横向对比

数据集 机构 规模/覆盖 模态 获取方式 与 CDC WONDER 的差异化
CDC WONDER CDC/NCHS 30+ 在线数据库;死亡数据 1979-2024(分库) 聚合统计(计数/率) 免费网页 + XML API,无注册 唯一提供统一查询界面 + API 的官方死因聚合平台
NVSS 限制使用微数据 NCHS 个体级死亡证书(含地理细节) 个体记录 研究数据中心申请 粒度最细但需申请审批;WONDER 是其公开聚合层
SEER NCI 癌症发病率/生存(约 48% 人口覆盖登记区) 癌症登记 网页 + 统计文件 癌症专精、含发病率;WONDER 的 Cancer Statistics(USCS)为其国家级镜像子集
WISQARS CDC 伤害致死/就诊数据 2001 年起 聚合统计 免费网页查询 伤害专项;WONDER 以 ICD-10 码矩阵覆盖更全死因
Global Burden of Disease (GBD) IHME 全球 204 国,模型估计值 聚合估计 免费下载 GBD 是模型化估计(含校正与填补),WONDER 是登记计数真值;两者结论常需对照
Our World in Data / Human Mortality Database 三方 精选再发布 聚合统计 免费下载 二手整合,粒度与时效不及 WONDER;适合快速可视化

§1.4 版本时间轴

年份 事件 说明
1991-08 CDC WONDER 首版上线 主机架构 + 拨号接入,24 个数据库(Friede et al. 1993
1997 前后 Web 版上线 浏览器 ad-hoc 查询取代终端接入
1999 死因编码切换 ICD-10 UCD/MCD 库自此以 ICD-10 为准;ICD-9 时代数据(1979-1998)移入 Compressed Mortality 档案库
2001 / 2006 / 2007 ICD-10 码表微调 新增 *U01-*U03(2001);2006 年 18 码新增/4 码停用;2007 年 4 新/2 停
2012-10-26 人口分母修订 2001-2009 改用修订版 interracensal bridged-race 估计,此前发布的率值随之微调
2014 前后 现代 API 文档化 XML 查询 API(/controller/datarequest/{库ID})成为自动化获取标准通道
2020 人口口径切换预备 Census Single-Race 人口库上线;此后 2018+ 死因库改用 Single-Race
2021-2024 Provisional 数据扩张 周级/月级临时死亡数据上线(2018-最新周),支持近实时监测
2026(检索时点) 平台现代化改造中 官方公告界面与导航将改版,查询口径不变

§1.5 典型应用场景

  1. 疾病负担趋势研究:按 ICD-10 码组提取 1999-2020 年药物过量(X40-X44 + T36-T50)死亡数与年龄调整率,绘制流行曲线——这是阿片危机文献的标准做法。
  2. 州/县健康不平等比较:以 2000 US 标准人口年龄调整,比较不同州、城乡(NCHS Urbanization 分类)与种族组的卒中或糖尿病死亡率。
  3. 小区域估计(Small Area Estimation):利用县×年龄×死因的受抑制计数,训练空间贝叶斯模型补全率值(Prev Chronic Dis 2019;16:180441)。
  4. 公共卫生教学与报道核查:媒体、智库与课堂引用"美国主要死因排行"时的事实来源(2020 年前五位:心脏病 696,962、恶性肿瘤 602,350、COVID-19 350,831、意外伤害 200,955、卒中 160,264,NCHS Final Deaths 2020)。
  5. AI 基准参照:为死亡预测模型、疾病负担预测 LLM 等提供官方统计对照值,验证模型输出是否偏离登记真值。

§2 医学背景

§2.1 主要死因组与 ICD-11 映射

CDC WONDER 死因库以 ICD-10(1999 起)为编码轴,并提供 113 selected causes of death(成人)与 130 selected causes(婴儿)两个重编码列表。下表给出常见研究对象的 ICD-10 ↔ ICD-11 对照(ICD-11 编码按 WHO ICD-11 MMS 浏览器 2024 版块):

死因组(中文) ICD-10 编码 ICD-11 编码 说明
缺血性心脏病 I20-I25 BA40-BA4Z 2020 年全美第一大死因(696,962 例)
恶性肿瘤(全部) C00-D48 2A00-2F9Z 第二大死因(602,350 例);WONDER 检索常用 C00-D48.9
脑血管病 I60-I69 8B00-8B1Z 卒中总称,含脑梗死(I63 / 8B11)与脑出血(I61)
糖尿病 E10-E14 5A10-5A14 WONDER 的 113 cause list 单列"糖尿病"条目
阿尔茨海默病 G30 8A20 老年死因谱中长期上升项
慢性下呼吸道疾病 J40-J47 CA22(COPD)等 含慢阻肺(J44 / CA22)与哮喘(J45-J46 / CA23)
药物过量(意外) X40-X44(外因)+ T36-T50(中毒) NE 类外因 + 中毒章 阿片研究标准组合:外因码定意图,T40.x 定物质
COVID-19 U07.1 1D00(COVID-19) 2020 年第三大死因(350,831 例)
高血压性心脏病 I11 BA40(高血压性心脏病区块) 与缺血性心脏病在 113 list 中分列
流感与肺炎 J09-J18 CA40(肺炎)/ 1E30-1E32(流感) 老年组冬季峰值死因
慢性肝病与肝硬化 K70-K77 DB93(酒精性肝病)/ DB90 区块 与酒精/病毒性肝炎负担研究相关
肾炎、肾病综合征与肾病 N00-N07,N17-N19 GB61(慢性肾病) 糖尿病并发症研究常用共病死因
意外中毒(非药物) X45-X49 NE 类外因 与药物过量(X40-X44)严格区分

§2.1b SNOMED CT 映射

概念 ICD-10 码 SNOMED CT 码 术语
死亡结局 —(数据集以死亡为观测单位) 419099009 Dead (finding)
缺血性心脏病 I25 414545008 Ischemic heart disease (disorder)
急性心肌梗死 I21 22298006 Acute myocardial infarction (disorder)
恶性肿瘤 C00-D48 363346000 Malignant neoplastic disease (disorder)
脑血管意外 I60-I69 230690007 Cerebrovascular accident (disorder)
糖尿病 E11 44054006 Diabetes mellitus type 2 (disorder)
阿片类物质过量(意外) X42 47276002 Opioid overdose?(实际码:Opioid poisoning 计划中,常以 poisoning 概念 762704008 表达)
阿尔茨海默病 G30 26929004 Alzheimer’s disease (disorder)
慢性阻塞性肺病 J44 13645005 Chronic obstructive lung disease (disorder)
2 型糖尿病 E11 44054006 Diabetes mellitus type 2 (disorder)

说明:死因统计的权威轴是 ICD-10;SNOMED CT 映射仅供跨术语系统(EHR/编码器)集成时参考,跨映射后计数可能与官方 113 cause list 不一致,正式发表仍应以 ICD-10 码组定义研究结局。SNOMED CT 码以国际版浏览器(2024 版)为准,本地集成前请复核概念层级(disorder vs finding)。

§2.2 死因登记制度简介与美国流行病学

美国实行州办生命登记、联邦汇编的制度:各州生命统计办公室接收死亡证书并编码,向 NCHS 报送;NCHS 通过 Vital Statistics Cooperative Program 直接或间接完成 ICD-10 编码,形成国家死亡档案(National Vital Statistics System, NVSS)。WONDER 的死亡库即 NVSS 的公开聚合层,覆盖 50 个州与哥伦比亚特区的全死因死亡证书,排除非居民死亡。根本死因(UCD)由 WHO 定义为"直接导致死亡的一系列事件中的初始疾病或损伤",由编码员依证书顺序与 ICD 选择规则确定;MCD 库则保留每份证书上最多 20 个多重死因,是研究共病与药物特异毒性(T40.x)的关键。

2020 年(含 COVID-19 大流行冲击)全美死亡 3,383,729 例,年龄调整死亡率 835.4/100,000(2000 US 标准人口)。前五位死因为心脏病(696,962)、恶性肿瘤(602,350)、COVID-19(350,831)、意外伤害(200,955)与卒中(160,264)(NCHS, Deaths: Final Data for 2020, NVSR 72-10)。心脏病与癌症合计约占全部死亡的 38%,是 WONDER 查询频率最高的两组 ICD-10 码(C00-D48、I00-I99);近十余年文献中查询量增长最快的是药物过量(X40-X44)与自杀(X60-X84)等外因码组。

种族与族裔口径的制度细节直接决定不平等研究结论:死亡证书上的种族与西班牙裔由殡仪馆依据 informant(通常是幸存家属)或观察填写,而普查人口分母来自自我申报——两个来源系统性不一致。官方文档明确指出:普查/调查中自报为 American Indian、Asian 或 Hispanic 的人,在死亡证书上有时被登记为 White 或非西班牙裔,导致这三组的死亡数与死亡率被低估。此外 Hispanic origin “not stated”(未申报)的死亡没有对应的人口分母,按族裔计算率时被整体排除。Bridged-Race(1999-2020 库)是把多选种族折算回四组的过渡口径,2018 年起的新库改用 Census Single-Race(6/15/31 组)——同一群人在这两套口径下的分组可能不同。

时间粒度谱系随库而异:最终版库提供年/月/星期几/死亡地点/尸检状态;Provisional 库进一步提供周级(week ending date)与月度计数,是全美死亡监测近实时化的主力;weekly provisional deaths 支持 2018 年以来的逐周趋势(如大流行超额死亡分析的第一手素材)。

§2.3 临床/科研任务定义

WONDER 支持的典型"任务"按输出形式定义:

任务类型 输入 输出 WONDER 实现
率值估计 ICD-10 码组 × 地理 × 年份 死亡数、粗率、年龄调整率 ± 95%CI UCD/MCD 查询表单 Measures 勾选
趋势分析 同上,跨年 年度序列 按 Year 分组(D76.V1)
不平等量化 地理/种族/城乡切分 组间率差/率比 按 race、Hispanic origin、urbanization 分组
小区域估计 受抑制的县×年龄×死因单元格 补全率值 网页端县级导出 + 外部模型
监测预警 Provisional 库 近实时周/月死亡计数 MCD Provisional(2018-最新周)

§2.4 数据覆盖人群

维度 覆盖
来源 全美 50 州 + 哥伦比亚特区死亡证书(NVSS);排除非居民、胎儿死亡(另有 Fetal Deaths 库)
时间 死因库:1979-1998(ICD-9,Compressed Mortality)与 1999-2020/2024(ICD-10,UCD/MCD,按库分);出生库 1995 起;USCS 1999 起
年龄 从 <1 岁(婴儿年龄组)到 85+ 岁,支持单岁、5 岁组、10 岁组
性别 男/女
种族/族裔 Bridged-Race 4 组或 Single-Race 6/15/31 组 × 西班牙裔 3 组(Hispanic、Not Hispanic、Not Stated)
就医类型 不适用(登记数据,无就医口径;住院相关请用 HCUP)

§2.5 公共卫生与 AI 研究价值

对公共卫生,WONDER 是目标设定(Healthy People 指标追踪)、资源配置(县评级)与疫情后评估(大流行超额死亡研究)的基础设施。对 AI 研究,其价值有三:其一,提供跨年份、跨地域一致口径的"金标"聚合,可用于训练数据的质量对照与漂移监测;其二,公开的披露控制规则(1-9 例抑制、<20 例率不可靠)定义了明确的统计噪声模型,是"不完整监督学习"的真实测试床;其三,API 无鉴权、公共领域许可,使其成为构建 dead-end 免费数据管道与公共卫生大模型检索增强(RAG)语料的理想来源。

§2.6 金标准与标注方式

项目 说明
划分性质 非机器学习数据集,无官方 train/val/test 划分;分析单元为聚合单元格
标注方式 编码标注:死亡证书由各州编码员/ACME 系统依 ICD-10 规则自动+人工赋根本死因;NCHS 统一编辑
标注者 州生命统计办公室编码员 + NCHS 编码质量监控
一致性 由 ICD-10 编码规则与双索引(Axis/ categories)保证;重大编码变更(2001/2006/2007 码表调整)官方公告并建议用可比性调整
外部对照 NVSS 官方报告(同源)、SEER(癌症)、NDI(前瞻队列结局确证)

§3 数据集规格

§3.0 版本抉择矩阵

CDC WONDER 死因数据按"年份范围 × 编码体系 × 人口口径"分成多个平行的在线数据库,选错库是新手最常见的错误(详见坑点 3):

你的需求 推荐数据库 覆盖年份 理由
与 2015-2024 年官方报告口径对齐的死因趋势 MCD Current Final(Single-Race) 2018-2024 Single-Race 人口分母,与最新 NVSR 报告一致
跨 1999-2020 的长程趋势(含种族切分) MCD 1999-2020(Bridged-Race) 1999-2020 唯一连续覆盖且种族维度完整的库
根本死因的县×年龄×种族矩阵(网页端) UCD 1999-2020(D76) 1999-2020 单一根本死因轴,分组维度最全
近实时监测(今年死亡数) MCD Provisional 2018-最新周 周级更新,但为临时数据,会被最终版修订
1999 年之前的 ICD-9 时代数据 Compressed Mortality 1979-1998 1979-1998 ICD-9 编码;死因列表为 72 cause recode
药物特异毒性分析(海洛因 vs 芬太尼) MCD(任一最终版) 同上 需要 T40.x 多重死因码,UCD 库不可用
全美癌症发病率(非死亡) Cancer Statistics(USCS) 1999 起 发病登记;WONDER 死亡库不含发病率

§3.1 模态详情

死亡主题主要数据库总览(检索时点 2026-09,年份范围以各库入口页为准):

数据库 编码体系 年份范围 种族口径 地理粒度
Underlying Cause of Death(D76) ICD-10 1999-2020 Bridged-Race 县级(API 仅全国)
Multiple Cause of Death:Current Final ICD-10 2018-2024 Single-Race(6/15/31 组) 县级
Multiple Cause of Death:1999-2020 ICD-10 1999-2020 Bridged-Race(4 组) 县级
Multiple Cause of Death:Provisional ICD-10 2018-最新周 Single-Race 县级(周级时间)
MCD 档案:2005-2006 / 1999-2004 ICD-10 相应年份 Bridged / 3 组 县级
Compressed Mortality ICD-9 1979-1998 3 组(White/Black/Other) 县级
Infant Deaths(Linked Birth/Infant Death) ICD-10 1995- 州/县级
Fetal Deaths 1995- 州级

WONDER 的"模态"是统计聚合而非原始记录,核心包含四类信息:①计数(Deaths),聚合单元格的死亡例数;②分母(Population),对应的 bridged/single-race 人口估计,来自 Census 与 NCHS 的郡级人口序列;③率值(Crude Rate 与 Age-Adjusted Rate),每 10 万人,后者按 2000 US 标准人口直接标准化;④维度(Grouping Variables),年份/月份、地理(US→Census Region→Division→HHS Region→州→县)、年龄(单岁/5 岁/10 岁/婴儿组)、性别、种族、西班牙裔、死因(ICD-10 4 位码、113/130 selected causes、Injury Intent/Mechanism、Drug/Alcohol Induced Causes)、城市化(2006/2013 NCHS 城乡分类)、死亡地点/星期/月份/尸检状态。MCD 库额外提供多重死因码矩阵(每证书最多 20 个附加码)。

分组维度全景(以 UCD D76 为例,API 参数名即变量 ID):

  • D76.V1:年份(level1)/月份(level2);D76.V24:星期几;D76.V20:尸检与否;D76.V21:死亡地点
  • D76.V9:州(level2)/县(level1 层级内);D76.V10:Census Region/Division;D76.V27:HHS Region;D76.V19/D76.V11:2013/2006 城乡分类
  • D76.V5:年龄组(单岁/5 岁/10 岁/婴儿);D76.V7:性别;D76.V8:种族;D76.V17:西班牙裔
  • D76.V2:ICD-10 根本死因(章/亚章/4 位码三级);D76.V4:113 selected causes;D76.V12:130 selected causes(婴儿);D76.V22/D76.V23:Injury Intent / Mechanism;D76.V25:Drug/Alcohol Induced Causes
  • 度量:D76.M1 死亡数、D76.M2 人口、D76.M3 粗率、D76.M4 年龄调整率、D76.M41 标准误、D76.M42 95%CI

§3.2 按子集样本量

子集 覆盖 2020 年规模参考
全死因(全国) 1999-2020/2024 3,383,729 例死亡
心脏病(I00-I09,I11,I13,I20-I51) 同上 696,962 例
恶性肿瘤 C00-D48 同上 602,350 例
COVID-19(U07.1) 2020 起 350,831 例
药物过量(外因码组) 1999 起 约 91,799 例(2020)
USCS 癌症发病 1999 起 年新增发病约 160 万例(登记口径)

注:药物过量与 USCS 数字为公开报告量级参考,正式研究请以当次查询结果为准——WONDER 的口径随版本修订会微调。

§3.3 数据格式

交付通道 格式 说明
网页查询结果页 HTML 表格 可视化、图表与地图
网页查询导出 Tab 分隔文本 供 Excel/R/Python 直接读取
XML API XML 文档 POST 请求 + XML 响应,含数据表、脚注、警告
官方引用 文本 响应尾部自带标准引用串

无 CSV、无 JSON、无批量静态文件下载——这是相对多数现代数据平台最大的"AI-Ready 反面"(见坑点 2 与坑点 8)。

XML 请求文档结构(所有库通用骨架,具体参数名因库而异):

组成 形式 作用 示例
根节点 <request-parameters> 包裹全部参数
同意条款 <accept-datause-restrictions>true</accept-datause-restrictions> 声明遵守数据使用限制(亦可用独立 POST 参数) 必须 true 且至少出现一次
动作 <parameter><name>action-Send</name><value>Send</value></parameter> 触发查询 固定值
finder-stage <parameter><name>finder-stage-D76.V1</name><value>codeset</value></parameter> 声明码表查询阶段(年份/ICD 码等下拉) 每个需码表查找的变量一条
分组 <parameter><name>B_1..B_5</name><value>变量 ID</value></parameter> 最多 5 个分组维度 B_1=D76.V1-level1
过滤 <parameter><name>F_变量</name><value>取值</value></parameter> 限定码域(ICD 码组/年份/州) F_D76.V2=C00-D48
取值声明 <parameter><name>I_变量</name><value>码 (标签)</value></parameter>V_/VM_ 参数 记录表单选择细节 I_D76.V2=C00-D48 (Neoplasms)
度量 <parameter><name>M_n</name><value>度量 ID</value></parameter> 选择输出统计量 M_41=D76.M41(标准误)
选项 O_* 参数 率单位/调整口径/显示开关/超时 O_show_suppressed=true
阶段 <parameter><name>stage</name><value>request</value></parameter> 提交阶段标识 固定值

官方文档的取参建议非常直接:打开对应库的网页查询页并查看 HTML 源代码,所有 <select>/<input> 的 name/value 就是该库的完整 API 参数与合法取值。响应 XML 则由 <response> 包裹,内含 <data-table>(维度字典 + 数据行)、<response-messages>(警告与错误)、<footnotes>(数据来源与口径脚注)三大块。

§3.4 存储与体量

WONDER 无整体下载体量概念:按典型研究规模估算,一个覆盖 1999-2020、州级、50 个死因组的分析面板(约 1,100 行 × 8 列)导出后 <1 MB;最重的合法查询(全国级 × 单岁年龄组 × 113 causes × 22 年,约 25 万单元格)XML 响应也在几十 MB 量级。本地缓存 + parquet 化后,全部分析资产通常 <100 MB,任何笔记本均可承载。

§3.5 标注方式

死因"标注"即根本死因编码:证书由医师/法医填写死因链,各州编码员经 ACME(Automated Classification of Medical Entities)软件依 ICD-10 选择规则与修改规则赋码,NCHS 质控后并入国家档案。这属于规则驱动的半自动标注,具备全国一致性,但受医师填写质量影响(见 §7.2)。

§3.6 标注者资质与一致性

编码员需受 ICD-10 死因编码专业培训并遵循 NCHS 编码手册;MCD 的多重编码由 MICAR 系统辅助。跨州一致性由联邦统一规则保障,但填写端的地区差异(法医 vs 医师签发比例)仍导致系统性误差(药物过量识别不足是文献反复报告的问题)。

§3.7 采集周期

死亡证书按事件逐份采集;NCHS 每年发布一次最终版(滞后约 12-21 个月),Provisional 数据按周/月滚动更新。UCD D76 库的官方引用格式要求注明 release 年份(如 “released in 2022”),因为同一年份范围的库会随人口估计修订而重算。

§3.8 地域覆盖

地理轴五级:全国 → Census Region(4)→ Census Division(9)→ HHS Region(10)→ 州(51)→ 县(约 3,200)。县级数据受披露控制影响最大:农村县单死因 × 单年龄组的单元格几乎全被抑制(见坑点 1)。API 端(D76)地理参数只允许"All",县级查询必须走网页界面(见坑点 2)。

§3.9 设备规格

不适用:登记统计数据无采集设备维度。与影像/生理信号数据集不同,WONDER 的"测量"主体是编码规则与人口估计模型,元数据以脚注(数据源、人口序列版本、修订说明)形式随查询返回。

§3.10 深度溯源链

死亡事件(医师/法医签署证书)→ 州生命统计办公室(登记、编码)→ NCHS NVSS(国家汇编、ACME/MICAR 编码、统计编辑)→ CDC WONDER(披露控制、聚合引擎、网页/API 发布)→ 查询响应(含数据源脚注与引用格式)。每一层都有公开文档可查;引用时按官方格式注明数据库名、年份范围与 release 年份即可满足可复现要求。

溯源链上的三个"留痕锚点"值得写进自己的数据谱系文档:①码表版本——NCHS 每次增删 ICD-10 有效码都有公告(2001/2006/2007);②人口序列版本——响应脚注会写明该查询所用人口估计的序列名称与发布日期(如 “revised intercensal estimates, released October 26, 2012”);③release 标识——官方引用格式中的 “released in YYYY” 是区分同库不同版本的最短指纹。把这三项随每次查询落盘(§6.10 MLOps),任何率值在三年后仍可一字不差地复现。


§4 数据结构

§4.0 本地工作目录树(自建缓存约定)

CDC WONDER 没有官方下载包,以下为推荐的本地缓存与解析产物组织方式(对应 §6.1-§6.3 代码):

data/cdc-wonder/
├── cache/                          # 原始响应缓存(可复现)
│   ├── D76/                        # UCD 1999-2020(API 库 ID)
│   │   ├── req_national_all_cause.xml       # 请求 XML
│   │   ├── resp_national_all_cause.xml      # 响应 XML
│   │   ├── req_cancer_by_year_race.xml
│   │   └── resp_cancer_by_year_race.xml
│   └── mcd_final_2018_2024/        # MCD 网页端 Tab 导出
│       └── drug_overdose_state.tsv
├── parsed/                         # 解析后的长表
│   ├── ucd_national_year.parquet
│   └── mcd_state_year_cause.parquet
├── processed/                      # 分析就绪面板
│   └── mortality_panel.parquet
└── queries/                        # 可复用的请求模板
    └── template_D76.xml

平台侧每个在线数据库的逻辑结构则是"维度 × 度量"的星形关系:一次查询 = 最多 5 个分组维度(B_1-B_5)× 若干过滤条件(F_/I_/V_ 参数)× 度量集合(M_ 参数)。

各目录职责cache/ 保存请求-响应对,是可复现性的最小单元(重跑脚本时缓存命中即跳过限速窗口);parsed/ 存放 §6.3 解析器输出的长表(每行一个单元格,保留 Suppressed/Unreliable 标记列);processed/ 存放对齐人口口径、剔除 Total 行、宽化后的分析面板(parquet);queries/ 存放按库组织的 XML 请求模板,参数留槽由脚本填充。

§4.1 DAIMS 字段字典(查询输出核心字段)

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
Notes Text 行级脚注编号串 1^2^ 解析警告与抑制标记 数字^序列
Year Integer 死亡年份 2020 时间轴 1999-2020(D76)
State / County Text 居住地州/县(FIPS 名) Alabama / Autauga County, AL 空间分析 县界随区划变更 51 州 / 约 3,200 县
ICD-10 Codes Text 根本死因码/码组 X42 结局定义 编码变更 全部 ICD-10
Deaths Integer 死亡数 696962 靶变量 计数完整 Suppressed(1-9 例) ≥0
Population Integer 人口估计分母 331536564 率分母 人口序列修订 Suppressed(<10 人) ≥0
Crude Rate Float 每 10 万人粗率 210.1 描述统计 依人口修订 Unreliable(<20 例) ≥0
Age Adjusted Rate Float 2000 US 标准人口调整率 835.4 跨人群比较 标准人口口径 Unreliable ≥0
95% CI Low/High Float 年龄调整率置信区间 832.0-838.8 不确定性量化 泊松近似 Suppressed(计数 ≤9 时随率一并隐藏) ≥0
Std Err for AAR Float 年龄调整率标准误 1.7 元分析权重 同上 Suppressed ≥0
Month / Weekday Integer/Text 死亡月份(level2)/星期几 3 / Tuesday 季节性分析 1-12 / 7 类
Place of Death Text 死亡地点类别(医院/家中等) Medical Facility - Inpatient 末端照护研究 分类调整 枚举
Autopsy Text 是否尸检 Yes / No 死因质量评估 枚举
Age Group Text/Ordered 年龄段(单岁/5 岁/10 岁/婴儿) 55-64 年龄标准化 <185+
Gender / Race / Hispanic Text 性别/种族/西班牙裔 Female / White / Hispanic 不平等研究 种族错分 枚举
Urbanization Text 2013 NCHS 城乡分类 Medium Metro 城乡比较 版本差异(2006/2013) 6 类
Cause group (113) Text NCHS 113 selected causes 重码 #Circulatory System 前缀 # 为 rankable 官方分组分析 113 类

§4.2 标签分布(死因维度)

死因轴的"标签"即 ICD-10 码/码组。113 selected causes 是官方推荐的分析分组:前 15 位 rankable causes(带 # 前缀)覆盖约 74% 的全美死亡;外因章(V01-Y89)在 113 list 内被拆为 Injury Intent(意图)× Injury Mechanism(机制)二维。分布高度右偏:2020 年心脏病组占比 20.6%,而多数罕见死因组全国计数 <1,000 例,进入县×种族×年龄细格后即触发抑制。

2020 年 113 cause list 前五位(rankable)分布参考

排名 113 cause list 条目 死亡数 占比
1 #Diseases of heart 696,962 20.6%
2 #Malignant neoplasms 602,350 17.8%
3 COVID-19(2020 年度新增条目) 350,831 10.4%
4 #Accidents(unintentional injuries) 200,955 5.9%
5 #Cerebrovascular diseases 160,264 4.7%

使用 15 Leading Causes 分组时注意官方限制:该分组不允许交叉表、不允许零值行、不允许显示抑制值——三条都写在官方 FAQ 里,违反会被查询拒绝而非静默纠错。

§4.3 关键统计

  • 全库可查询单元格维度组合:年份(22) × 州(51) × 年龄组(85 单岁) × 性别(2) × 种族(4) × 西班牙裔(3) × 死因(113+)——理论组合 > 10^9,实际合法查询受"每组 ≤5 个分组维度"限制。
  • 2020 年全美:死亡 3,383,729 例;年龄调整率 835.4/100,000(2000 标准)。
  • 抑制发生率(文献估计):罕见死因 × 县级查询中,>50% 单元格计数 <10 被抑制(PCD 2019)。
  • 每份 MCD 死亡证书最多 20 个多重死因码 + 1 个根本死因码,外因码(V01-Y89)与中毒码(T36-T50)的组合是药物滥用监测的标准结构。
  • 一次查询的响应 XML 自带三块元数据:<response-messages>(警告)、<footnotes>(口径脚注)、标准引用串——全链路可自描述。

§4.4 数据层级

WONDER 的层级不是"患者→检查→序列→切片",而是地理嵌套 × 时间 × 死因三维:US ⊃ Region ⊃ Division ⊃ State ⊃ County;Year ⊃ Month;ICD-10 章 ⊃ 亚章 ⊃ 4 位码 ⊃ 113/130 cause list。跨库对齐键为"地理 FIPS + 年份"(如与人口库、出生库联动),注意 2018+ 库的种族口径为 Single-Race,与 1999-2020 Bridged-Race 库不可直接拼接(见坑点 4)。

跨库对齐键速查

对齐目标 左库(键) 右库(键) 注意事项
死亡率分母 死因库:州/县名 + 年份 Population 库:Bridged/Single-Race + 7/1 估计 分母版本必须与率值口径一致(坑点 7)
婴儿死亡率 Infant Deaths 库 Births(Natality)库 婴儿年龄组另有附加隐私约束
疾病负担横向比较 死因库(ICD-10 码组) USCS / GBD 死亡 vs 发病、登记 vs 模型,勿混用指标
环境健康分析 死因库(县/年) Environment 库(县/日,需聚合到年) 环境库为日粒度,聚合后再 join
时序监测 MCD Provisional(周) MCD Final(年) 重叠期校准,最终版覆盖后替换

§4.5 缺失值与信息性缺失编码

编码 含义 机制 处理建议
Suppressed 计数 1-9 例被强制隐藏 NCHS 披露控制(42 U.S.C. 242m(d)) 视为区间删失 [0,9];勿当作 0
Unreliable 死亡数 <20 的率 统计可靠性规则 只用计数不用率;或加宽 CI
空白率(Deaths>0 但 rate 空) 分母缺失(如 Hispanic origin not stated) 无对应人口估计 换用有分母的分组
Zero 合法 0 计数 O_show_zeros=true 时显示 直接使用

§5 数据划分与使用建议

§5.1 官方划分

无官方 ML 划分——WONDER 是查询型统计服务,每次查询都是全量聚合。分析设计中的"划分"应理解为时间外推验证:用 1999-2015 拟合、2016-2020 验证是死亡率预测文献的标准做法(保留大流行年份 2020 作为外推压力测试更有信息量)。

“样本"的概念也需要重定义:一个聚合单元格就是一条观测,其"权重"是底层人口。因此 train/test 划分不应按单元格随机切分(会人为制造同一年份/同一县既在训练又在测试的伪独立),而应沿时间或地理整块切分——这与个体级医疗数据集上防患者泄漏的原则同构,只是泄漏单位从"患者"换成了"时空单元”。

§5.2 社区惯例

  • 按地理分层抽样:州级分析用全部 51 州;县级小区域估计常按人口规模分层(urban/rural × 人口十分位)评估方法表现(PCD 2019 的做法)。
  • 按死因组分层:高频组(心脏病、癌症)验证趋势模型;低频组(罕见外因)单独做抑制感知建模。
  • 人口分母一致性切分:2001-2009 年务必锁定 revised intercensal 人口序列再建面板(见坑点 7)。
  • 编码断点分层:把 1999-2020 序列切成 1999-2000 / 2001-2005 / 2006-2007 / 2008-2020 四段做稳健性检验,断点两侧结论一致才可合并报告。
  • 多年度合并扩大分母:罕见死因按 3-5 年滚动窗合并以逃离抑制阈值,这是官方 FAQ 与文献共同推荐的手法。

§5.3 划分策略建议与泄漏风险

聚合统计数据不存在个体级标签泄漏,但有三种"面板构造泄漏"值得警惕:

  1. 修订泄漏:把 Provisional 数据混入最终数据序列,模型会学到临时的报告延迟噪声;最终版发布后这些值会被修订。
  2. 口径断点泄漏:ICD-10 码表变更(2001/2006/2007)与人口口径切换(2012 修订、2018 single-race)在序列中制造假趋势,若不做断点处理,模型会把编码制度变化"学"成流行病学变化。
  3. 选择泄漏:只使用未被抑制的单元格训练县级模型,等于按人口规模选择样本,会系统性高估城市、低估农村死亡率——应显式建模删失(坑点 1 的进阶方案)。

§5.4 交叉验证建议

时间序列用 expanding-window CV(如 1999-2010 → 预测 2011,滚动前进);空间任务用 leave-one-state-out;对抑制敏感的小区域估计,用 PCD 2019 的做法:与"真值可得"的大县/大组做 held-out 对比,评估 DIC 与率值精度。

§5.5 外部验证建议

用同一 ICD-10 码组在 SEER(癌症)、WISQARS(伤害)、GBD(全死因估计)交叉对照;率值结论应与 NVSR 官方报告数字精确一致(同源),不一致先查口径与年份版本而非怀疑数据。


§6 AI 就绪指南 ⭐

§6.0 云端快速启动

WONDER API 是公共 HTTP 服务,任何云环境可直接访问(无需密钥)。在 Google Colab / 任意 Jupyter 中:

# Colab 无需安装额外依赖:requests + pandas + lxml 即可
!pip -q install pandas lxml pyarrow

网络环境提示:API 端点 wonder.cdc.gov 强制 HTTPS;部分企业网络会拦截 CDC 域名的长连接——若批量任务频繁在 2-3 分钟处断开,优先怀疑代理超时而非 WONDER 本身(官方 O_timeout 上限 900 秒,客户端 requests 的 timeout 应设为 900 以上以免先于服务端断开)。跨地域访问无需任何白名单,公共领域数据没有地区限制。

§6.1 快速上手(5 分钟拿到第一张表)

目录结构预期:以下代码假设存在 data/cdc-wonder/cache/D76/ 缓存目录(§4.0),首次运行会自动创建。没有本地数据根目录——WONDER 是在线 API,data_root 只承载请求/响应缓存与解析产物。
最小可用子集:全国级 × 年度 × 全死因的死亡数与年龄调整率(约 22 行),一次查询即可。

import requests, pathlib
import xml.etree.ElementTree as ET

# --- 目录结构:data_root 为本地缓存根,请求与响应分别落盘以便复现 ---
data_root = pathlib.Path("data/cdc-wonder/cache/D76")
data_root.mkdir(parents=True, exist_ok=True)

API_URL = "https://wonder.cdc.gov/controller/datarequest/D76"  # D76 = UCD 1999-2020

# --- 最小请求:全死因,按年份分组,输出死亡数/人口/粗率/年龄调整率 ---
# 参数注释:
#   B_1            = D76.V1-level1   → 按年份分组(V1=Year,level1 为"年"层级)
#   F_D76.V1       = 2009..2013      → 过滤年份
#   F_D76.V2       = All             → 全部死因(V2=ICD-10 根本死因码)
#   F_D76.V9       = All             → 地理全部(V9=州/县;API 端仅接受 All)
#   M_1..M_4       = D76.M1..M4      → 死亡数/人口/粗率/年龄调整率
#   O_rate_per     = 100000          → 率的单位:每 10 万人
#   O_aar          = aar_std         → 年龄调整采用 2000 US 标准人口
#   O_timeout      = 300             → 服务端查询窗口 5 分钟(合法值 60-900 秒)
REQUEST_XML = """<request-parameters>
  <accept-datause-restrictions>true</accept-datause-restrictions>
  <parameter><name>action-Send</name><value>Send</value></parameter>
  <parameter><name>finder-stage-D76.V1</name><value>codeset</value></parameter>
  <parameter><name>B_1</name><value>D76.V1-level1</value></parameter>
  <parameter><name>F_D76.V1</name><value>2009</value></parameter>
  <parameter><name>F_D76.V1</name><value>2010</value></parameter>
  <parameter><name>F_D76.V1</name><value>2011</value></parameter>
  <parameter><name>F_D76.V1</name><value>2012</value></parameter>
  <parameter><name>F_D76.V1</name><value>2013</value></parameter>
  <parameter><name>F_D76.V2</name><value>All</value></parameter>
  <parameter><name>F_D76.V9</name><value>All</value></parameter>
  <parameter><name>M_1</name><value>D76.M1</value></parameter>
  <parameter><name>M_2</name><value>D76.M2</value></parameter>
  <parameter><name>M_3</name><value>D76.M3</value></parameter>
  <parameter><name>M_4</name><value>D76.M4</value></parameter>
  <parameter><name>O_rate_per</name><value>100000</value></parameter>
  <parameter><name>O_aar</name><value>aar_std</value></parameter>
  <parameter><name>O_show_suppressed</name><value>true</value></parameter>
  <parameter><name>O_show_zeros</name><value>true</value></parameter>
  <parameter><name>O_timeout</name><value>300</value></parameter>
  <parameter><name>stage</name><value>request</value></parameter>
</request-parameters>"""

def query_wonder(db_id: str, request_xml: str, cache_name: str, min_interval: float = 120.0):
    """POST 到 WONDER API;官方建议自动化查询间隔 ≥2 分钟。"""
    import time
    resp_path = data_root / f"resp_{cache_name}.xml"
    if resp_path.exists():                                   # 缓存优先,避免重复扣限速
        return resp_path.read_text(encoding="utf-8")
    resp = requests.post(
        f"https://wonder.cdc.gov/controller/datarequest/{db_id}",
        data={"request_xml": request_xml, "accept_datause_restrictions": "true"},
        timeout=900,
    )
    resp.raise_for_status()
    resp_path.write_text(resp.text, encoding="utf-8")
    time.sleep(min_interval)                                 # 尊重 2 分钟限速
    return resp.text

xml_text = query_wonder("D76", REQUEST_XML, "national_all_cause")
print(xml_text[:800])  # 响应为 XML:含 <data-table>、<response-messages>、<footnote>

§6.2 数据获取方式

通道 步骤 适用 限制
网页查询 主页 → 选库(如 UCD 1999-2020)→ 同意数据使用声明 → 表单选择分组/度量/过滤 → Submit → 导出 TSV 交互探索、县级查询 手动;大交叉表可能超时
XML API POST https://wonder.cdc.gov/controller/datarequest/{库ID},参数 request_xml + accept_datause_restrictions=true 批量自动化 D76 等库仅返回全国级;建议 ≥2 分钟/次
第三方封装 Python alipphardt/cdc-wonder-api(含 Jupyter 示例) 快速原型 社区维护,跟随官方接口变动

获取三步走:① 定库(§3.0 矩阵)→ ② 定参数(打开该库网页查询页"查看源代码",所有 <select>/<input> 的 name/value 即 API 参数,官方文档明确推荐此法)→ ③ 组 XML、POST、缓存响应。

网页查询七步清单(以 UCD 1999-2020 为例,全部在单页表单内完成):

  1. 在 WONDER 主页 Mortality 区点击 “Underlying Cause of Death, 1999-2020”。
  2. 阅读并点击 “I Agree” 同意数据使用限制(42 U.S.C. 242m(d) 条款)。
  3. Organize table layout:选最多 5 个分组变量(如 Year、State)。
  4. Select measures:默认勾选 Deaths/Population/Crude Rate;按需加 Age-Adjusted Rate 与 95%CI/标准误。
  5. Additional Rate Options:率单位选 100,000;标准人口保持 2000 US Standard Population。
  6. Select location/demographics/year/cause:地理与人口维度按需过滤;ICD-10 码可点 “search” 按疾病名检索码组。
  7. Send 后在结果页核对脚注(人口序列、抑制说明),再导出 TSV 或保存 URL 参数。

限速感知的批量抓取骨架(指数退避 + 批间隔):

import time, requests, pathlib

def batch_fetch(job_list, db_id="D76", cache_dir=data_root, min_interval=121):
    """job_list: [(name, request_xml), ...]
    约定:间隔 ≥2 分钟(官方建议);失败指数退避;响应落盘后任务幂等。"""
    log = []
    for name, req_xml in job_list:
        out = cache_dir / f"resp_{name}.xml"
        if out.exists():
            log.append((name, "cache-hit")); continue
        wait, attempt = min_interval, 1
        while attempt <= 4:
            r = requests.post(
                f"https://wonder.cdc.gov/controller/datarequest/{db_id}",
                data={"request_xml": req_xml, "accept_datause_restrictions": "true"},
                timeout=900,
            )
            if r.ok and "<data-table>" in r.text:
                out.write_text(r.text, encoding="utf-8")
                log.append((name, "ok")); break
            if r.ok and "timed out" in r.text:        # 服务端查询超时 → 换更大的 O_timeout 重试
                req_xml = req_xml.replace("<value>300</value>", "<value>900</value>")
                wait, attempt = min_interval, attempt + 1
                continue
            wait *= 2; attempt += 1                   # 其他错误:退避重试
            time.sleep(wait)
        time.sleep(min_interval)                      # 无论成败都让系统恢复
    return log

实务提醒:WONDER 无 API key、无配额说明,但官方文档明示"每 2 分钟 1 次查询以给系统留出恢复时间"——把它当作 SLA 遵守,而不是被 429 逼着遵守。

§6.3 预处理全流程(XML → 分析面板)

import pandas as pd
import xml.etree.ElementTree as ET

SUPPRESSED, UNRELIABLE = "Suppressed", "Unreliable"

def parse_wonder_xml(xml_path) -> pd.DataFrame:
    """把 WONDER XML 响应解析为长表。
    目录约定:xml_path 位于 data/cdc-wonder/cache/ 之下。
    输出:每行一个聚合单元格;Suppressed/Unreliable 保留为字符串标记。"""
    root = ET.parse(xml_path).getroot()

    # 1) 维度名 = <data-records> 里 <dimension-attributes> 声明的顺序
    dims = [d.text.strip() for d in root.findall("./response/data-table/dimension-attributes/dimension-attribute")]

    # 2) 维度取值字典:code -> label
    dim_values = {}
    for dv in root.findall("./response/data-table/dimension-values/dimension-value"):
        dim_values[dv.attrib["id"]] = "".join(dv.itertext()).strip()

    # 3) 度量名与索引
    measures = [m.text.strip() for m in root.findall("./response/data-table/measures/measure")]
    meas_idx = {m.attrib.get("id", m.text.strip()): i for i, m in enumerate(measures)}

    rows = []
    for rec in root.findall("./response/data-table/data-records/data-record"):
        cell = {}
        for i, dv in enumerate(rec.findall("./dimension")):
            col = dims[i] if i < len(dims) else f"dim_{i}"
            cell[col] = dim_values.get(dv.attrib.get("id"), dv.attrib.get("id"))
        vals = [ "".join(v.itertext()).strip() for v in rec.findall("./value") ]
        for name, idx in meas_idx.items():
            cell[name] = vals[idx] if idx < len(vals) else None
        rows.append(cell)

    df = pd.DataFrame(rows)
    # 数值化:把 Suppressed/Unreliable 之外的值转为 float
    for c in df.columns:
        if c not in dims:
            df[c] = pd.to_numeric(df[c], errors="coerce")  # 标记字符串 -> NaN
    return df

df = parse_wonder_xml("data/cdc-wonder/cache/D76/resp_national_all_cause.xml")
# 抑制感知的列:区分"真缺失"与"被抑制"
for c in df.select_dtypes("number").columns:
    df[f"{c}_flag"] = None
print(df.head())
# --- 步骤 2:抑制感知的聚合与年龄调整复核 ---
import numpy as np

STD2000 = {  # 2000 US 标准人口权重(10 岁组,单位:比例),官方 W1-W10 权重
    "<1": 0.013818, "1-4": 0.055317, "5-14": 0.145565, "15-24": 0.138646,
    "25-34": 0.135573, "35-44": 0.162613, "45-54": 0.134834, "55-64": 0.087247,
    "65-74": 0.066037, "75-84": 0.044842, "85+": 0.015508,
}

def aggregate_suppression_aware(df, dims, value="Deaths"):
    """对含 Suppressed 单元格的表聚合:抑制项视为区间删失而非 0。
    返回点估计与下界(抑制计 0)与上界(抑制计 9)。"""
    def is_suppressed(s):
        return s.astype(str).str.contains(SUPPRESSED, na=False)

    g = df.groupby(dims)
    exact = g.apply(lambda x: pd.to_numeric(x[value], errors="coerce").sum())
    n_supp = g[value].apply(is_suppressed).sum()
    lower = exact                       # 抑制项在 exact 中已是 NaN->按 0 处理需填充
    upper = exact + 9 * n_supp          # 每个抑制单元格最多 9 例
    return pd.DataFrame({"deaths_point": exact.fillna(0), "n_suppressed": n_supp,
                         "deaths_lower": lower.fillna(0), "deaths_upper": upper})
# --- 步骤 3:构建分析面板(宽化 + 口径标签 + 落盘) ---
def build_panel(parquet_path="data/cdc-wonder/parsed/ucd_national_year.parquet",
                db_id="D76", release_year="2022"):
    """把解析长表加工为可复现的分析面板:
    1) 剔除 Total 行(分组维度为 'All' 的汇总行);
    2) 每行打上数据谱系四元组(库/年份范围/release/人口序列);
    3) 导出 parquet 供 §6.4 的 Dataset 使用。"""
    df = pd.read_parquet(parquet_path)
    dim_cols = [c for c in df.columns if not c.endswith("_flag")]
    df = df[~df[dim_cols].apply(lambda s: s.astype(str).eq("All")).all(axis=1)]
    df["db_id"], df["release_year"] = db_id, release_year
    df["population_series"] = "bridged-race revised intercensal (2012-10-26)"
    out = "data/cdc-wonder/processed/mortality_panel.parquet"
    df.to_parquet(out, index=False)
    print(f"panel -> {out}  rows={len(df)}  suppressed_cells={int(df['n_suppressed'].sum())}")
    return df

§6.4 PyTorch DataLoader(死亡率面板 → 时序数据集)

# 目录预期:data/cdc-wonder/processed/mortality_panel.parquet
# 面板结构:长表 [year, cause_group, deaths, population],来自 §6.3 产物。
# 任务示例:给定过去 K 年死亡率序列,预测下一年的年龄调整率(全国级、分组死因)。
import torch
from torch.utils.data import Dataset, DataLoader
import pandas as pd
import numpy as np

class MortalityTrendDataset(Dataset):
    """死亡率时序预测数据集。
    panel 必须含列:year(int), cause_group(str), deaths(num), population(num)。
    缺失(被抑制)年份用 population 加权前向填充,并生成 missing 掩码。"""
    def __init__(self, panel_path, k=10, min_pop=10000):
        df = pd.read_parquet(panel_path)
        df = df[df["population"] >= min_pop]                 # 稳定性过滤
        self.k = k
        self.series = {}
        for (grp), g in df.groupby("cause_group"):
            g = g.sort_values("year").set_index("year")
            rate = g["deaths"] / g["population"] * 1e5       # 每 10 万人
            full_years = np.arange(g.index.min(), g.index.max() + 1)
            rate = rate.reindex(full_years)
            mask = rate.notna().astype("float32").values
            rate = rate.interpolate(limit_direction="both").values.astype("float32")
            self.series[grp] = (full_years, rate, mask)

    def __len__(self):
        return sum(max(0, len(y) - self.k) for y, _, _ in self.series.values())

    def __getitem__(self, idx):
        for grp, (years, rate, mask) in self.series.items():
            if idx < len(years) - self.k:
                x = torch.from_numpy(rate[idx:idx + self.k]).unsqueeze(-1)
                m = torch.from_numpy(mask[idx:idx + self.k]).unsqueeze(-1)
                y = torch.tensor(rate[idx + self.k])
                return x * m, m, y                            # 输入×掩码、掩码、目标
            idx -= max(0, len(years) - self.k)
        raise IndexError

ds = MortalityTrendDataset("data/cdc-wonder/processed/mortality_panel.parquet", k=10)
loader = DataLoader(ds, batch_size=32, shuffle=True)
for x, m, y in loader:      # x: [B,10,1]  m: [B,10,1]  y: [B]
    break

§6.5 八个坑点(CDC WONDER 真实特有失败模式)

⚠️ 坑点 1:小样本单元格抑制让"求和"悄悄失真(分类:偏倚陷阱)

问题:NCHS 披露控制强制隐藏 1-9 例的计数(输出为 “Suppressed”),任何含抑制单元格的聚合求和都小于真值;县×年龄×罕见死因的交叉表可能 >50% 单元格被抑制(PCD 2019)。直接 sum() 或把 Suppressed 当 0/NaN 平均,都会引入方向性偏差。
症状:分组求和与全量行对不上(差值恰好 ≤9×被抑制格数);同一死因分别查 C64 与 C65 再相加 ≠ 合并查 C64-C65——已发表论文专门为此做过敏感性分析;小县/少数族裔组的率系统性缺失。
解决

  1. 简单方法:请求时带 O_show_suppressed=trueO_show_zeros=true,用坑点 8 的解析器把 Suppressed 单独成列;报告时给出"抑制格数 n_supp",声明下界=0、上界=9×n_supp。
  2. 进阶方法:把每个抑制格视为区间删失 [0,9],用状态级平均率反推期望(Tiwari 替代法:y*ik = λ̄(s,i,k) × n_ik),或直接聚合到抑制率可忽略的层级(州/大县/宽死因组)。
  3. SOTA 方法:空间贝叶斯层次模型(county×age 的 ICAR 空间随机效应 + 年龄依赖),对删失似然积分;PCD 2019 显示其在 DIC 与精度间达到最优平衡,且比替代法多给出不确定性。需要无抑制细节时走 NCHS 研究数据中心申请限制使用微数据。
    参考Estimating County-Level Mortality Rates Using Highly Censored Data From CDC WONDER, Prev Chronic Dis 2019;16:180441NCHS 数据使用限制

⚠️ 坑点 2:API 参数 XML 编码与查询超时(1-15 分钟窗口 + 2 分钟限速)(分类:工程陷阱)

问题:WONDER API 是非常规设计——整个请求是一段 XML,作为 POST 表单参数 request_xml再发送一次 URL 编码;自动化查询官方建议间隔 ≥2 分钟,O_timeout 只接受 60-900 秒(1-15 分钟,步长 60)。大交叉表(多分组维度 × 细 ICD 码)极易在服务端排队超时,返回含 <messages> 的错误 XML 而非数据。
症状:requests 直接 POST 原始 XML 字符串返回参数错误;循环爬取几十个查询后被静默限流或返回空表;同一段代码白天慢夜里快(服务端负载)。
解决

  1. 简单方法:永远用 data={"request_xml": xml_string, "accept_datause_restrictions": "true"}(requests 会自动做 form 编码);O_timeout 设为 300-600;对失败查询做指数退避重试(初始 120 秒)。
  2. 进阶方法:把"参数名-值"对写成模板 YAML,逐库生成 XML;响应落盘缓存(§6.1),脚本幂等——重跑只补缺口;批量任务在夜间分批跑,每批间隔 2 分钟以上。
  3. SOTA 方法:任务队列化(如 prefect/airflow)+ 官方 API Utility Java 程序做对照验证;监控响应里 <response-messages> 中的 <message> 节点,把 “query timed out” 与 “no results” 分流处理——前者退避重试,后者是合法空结果。
    参考CDC WONDER API 官方文档官方 Example1 请求/响应

⚠️ 坑点 3:ICD-9 → ICD-10 跨年断层(1999 年切变)(分类:标签理解)

问题:1979-1998 数据按 ICD-9 编码(72 cause recode),1999 年起按 ICD-10(113 selected causes)。编码切换不是平移:以哮喘为例,NCHS 公布的 ICD-10/ICD-9 可比性比为 0.8938——即使真实死亡谱不变,切年也会凭编码制度"蒸发"约 11% 的死亡。两段序列直接拼接会造出一条纯制度性断崖。
症状:1998→1999 趋势线跳变;跨 1999 的"三十年趋势"图表在 1999 处出现无法解释的阶跃;113 cause list 在 ICD-9 库里根本不存在(只有 72 recode)。
解决

  1. 简单方法:趋势分析默认从 1999 年开始(多数现代文献的做法),或在图上以竖虚线标注编码切换。
  2. 进阶方法:用 NCHS 发布的可比性比(comparability ratios)把 ICD-9 段乘系数回溯调整;对特定病种按"Guide to State Implementation of ICD-10 for Mortality"逐码对齐。
  3. SOTA 方法:用间断时间序列(ITS)或 joinpoint 回归显式建模 1999 断点,把断点与真实流行病学拐点分离;跨期研究优先使用 MCD 库的多重死因码做"码族"(code-family)级别的连续性分析。
    参考CDC 哮喘 MCD 使用指南(含可比性比)MCD 数据说明

⚠️ 坑点 4:县粒度 2000 后的口径变更(FIPS 变动 + Bridged→Single-Race)(分类:预处理陷阱)

问题:县级轴随行政区划调整逐年漂移——弗吉尼亚独立市与县合并、2001 年科罗拉多 Broomfield 县新设等事件都会增删 FIPS 码;同时人口分母在 2018+ 库从 Bridged-Race(4 组)切换为 Single-Race(6/15/31 组)。跨 20 年 county 面板若直接按县名/FIPS 拼接,会出现"幽灵县"(新库中不存在的码)与种族口径断层。
症状:merge 后某些县码左表有右表无;1999-2020 长程县级面板中种族分组在 2018 年前后"换了人";按县聚合的州总数与州级查询不一致。
解决

  1. 简单方法:跨年县级分析统一到州级,或使用 Census 的地理对应表(county equivalence relationship files)把旧 FIPS 映射到现役 FIPS。
  2. 进阶方法:构建"county-year"字典显式记录每次区划变更(2000 年后变动集中在弗吉尼亚、科罗拉多、阿拉斯加),对变动县做合并或拆分近似;种族口径断点前后分别分析,或只用 bridged-race 库(1999-2020)保证单库内一致。
  3. SOTA 方法:用 Census intercensal/基于 ACS 的人口再分配把新旧县界标准化到同一"县等价体"网格;跨库对齐时以 FIPS+年份+人口序列版本三键联合,并在论文脚注披露口径切换年份。
    参考MCD 数据说明(Bridged vs Single-Race 分库)Population 库(Bridged-Race / Single-Race)

⚠️ 坑点 5:2000 US 标准人口——年龄调整口径不一致(分类:评估误用)

问题:WONDER 的年龄调整率默认用 2000 US Standard Population 直接标准化(NCHS 推荐口径),但历史文献常用 1940 标准甚至粗率,GBD 用自己的世界标准。把 WONDER 的年龄调整率与外部来源(尤其 2000 年前发表的报告)直接并排比较,差异可能完全是标准人口不同造成的。
症状:你的率比文献低/高一大截但排序一致;审稿人质疑"为什么与 WHO/GBD 数字不可比";非标准人口选项(O_aar_pop 非零)算出的率与默认列对不上。
解决

  1. 简单方法:全文只用 WONDER 默认口径(2000 US 标准、每 10 万)并在方法学注明;比较对象一律取 NVSR 官方报告。
  2. 进阶方法:拿到年龄别率后自算——用统一标准人口权重对所有来源重加权(§6.3 的 STD2000 字典即 10 岁组权重);跨来源比较时把"率"换算回"计数 + 人口"再各自标准化。
  3. SOTA 方法:报告"率比/率差 + 两种标准人口敏感性分析";引用 NCHS 统计注释(statnt20)论证 2000 标准的选择依据。
    参考NCHS 统计注 20:年龄调整推荐CDC 哮喘指南示例(Select 2000 U.S. Standard Population)

⚠️ 坑点 6:率的置信区间与标准误也会被抑制(分类:评估误用)

问题:当死亡数 ≤9 时,率、标准误、95%CI 一并隐藏;死亡数 10-19 时率虽显示但被标记 “Unreliable”(NCHS 规则:基于 <20 例的率不可靠)。很多人在 meta 分析或曲线图中顺手丢弃这些行,等于二次选择偏差;也有人忽略 Unreliable 标记直接画置信带。
症状:CI 列出现空值导致 DataFrame 转数值后大片 NaN;森林图中小县忽然消失;同一幅图里有的点误差线巨粗(计数刚过 20)有的极细。
解决

  1. 简单方法:保留 Unreliable 行但只使用计数与人口,自算率与基于泊松近似的 CI(率 = deaths/population×1e5;CI 用 Byar/Garwood 近似)。
  2. 进阶方法:对 10-19 例的行用 gamma-Poisson 精确区间替代 WONDER 的正态近似;把 “Unreliable” 标记编码进权重(如反方差权重对低计数降权)。
  3. SOTA 方法:层次贝叶斯直接以计数为目标建模(泊松似然 + 空间/年龄随机效应),率与 CI 全部由后验导出,天然规避"显示层抑制"(PCD 2019 的空间模型输出即为后验均值与区间)。
    参考MCD 帮助:Suppressed/Unreliable 规则脓毒症州级趋势研究(<20 例率标 Unreliable、<10 例抑制的实战处理)

⚠️ 坑点 7:年份版本修订(Provisional → Final 与人口序列重算)(分类:工程陷阱)

问题:WONDER 的死亡数据有两个修订来源。① Provisivional 库(2018-最新周)是未定稿数据,最终版发布时会因补报与重编码而变动;② 即使最终版,人口分母也会修订——2012-10-26 发布的 revised intercensal bridged-race 估计替换了旧 postcensal 序列,使 2001-2009 的率与当年发表的报告略有不同(官方提供 “Archive rates” 复选框复现旧口径)。不注明 release 版本的引用无法复现。
症状:你的 2001-2009 州率与 2012 年前发表的论文对不上(差 0.1-1/10 万量级);Provisional 曲线随时间"下修";复现论文时数字差几个百分点却找不到原因。
解决

  1. 简单方法:只用 Final 库;引用时按官方格式写全 release 信息(如 “Underlying Cause of Death, 1999-2020, released in 2022”)。
  2. 进阶方法:需要复现旧文献时勾选 Archive rates(postcensal 2001-2009);监测类工作用 Provisional 时在图表标注"临时数据,将修订",并与最终版重叠期做校准系数。
  3. SOTA 方法:把"数据版本"作为一等公民纳入 MLOps:每次查询记录(库名、年份范围、release 年份、人口序列、查询日期),形成数据谱系表;论文随稿发布请求 XML 与响应缓存,彻底可复现。
    参考UCD 帮助:人口序列修订说明与 Archive ratesMCD Provisional 库说明

⚠️ 坑点 8:XML 响应嵌套解析陷阱(无 JSON、标记字符串混入数值列)(分类:预处理陷阱)

问题:API 响应是嵌套 XML:<data-table> 内维度、度量分别声明,行内用 id 引用维度的取值字典;“Suppressed”/“Unreliable” 是文本节点而非属性,且部分老版本响应把抑制显示为空值。直接用"行=所有子节点"的朴素解析会错位;请求方若自带自闭合标签或非法转义(如未转义的 &)会直接被拒。
症状:解析出的表行列数随机错位;数值列里混着字符串导致 astype(float) 崩溃;同一查询两次运行列名不同(度量顺序变化);把 <footnote><response-messages> 误当数据行。
解决

  1. 简单方法:用 §6.3 的结构化解析器——先读 dimension-attributes 定维度顺序,再读 dimension-values 建 id→label 字典,最后逐 data-record 组装;pd.to_numeric(errors="coerce") 统一收编标记字符串。
  2. 进阶方法:把 <footnote><response-messages> 解析为 DataFrame 侧挂的元数据(脚注编号 ↔ 行 Notes 列对应),用于自动生成"本表含抑制值"的审计记录;对请求 XML 用 xml.sax.saxutils.escape 处理 ICD 码组中的特殊字符。
  3. SOTA 方法:封装库化——请求模板 + 解析器 + 缓存 + 元数据抽取四件套(社区有 Python 封装可参考),并用 golden-file 测试固定官方 Example1 的解析结果,接口变更时立即报警。
    参考官方 Example1 响应结构alipphardt/cdc-wonder-api

§6.6 数据增强(聚合统计的正确"增强")

  • 安全:改变聚合层级(县→州)重采样;按人口 Poisson bootstrap 生成合成单元格(保留抑制结构);对时间序列做 STL 分解后再加噪;把抑制格按区间删失重采样。
  • 危险:对被抑制格插补单点值后当作真值训练;对率直接做线性插值跨过编码断点(1999/2006/2007);在 SI 单位上做"标准化抖动"类图像增强(无意义);用 GBD 模型值回填 WONDER 计数后混合训练(口径污染)。

补充两条经验法则:其一,任何"增强"都不应改变死亡率(deaths/population 比值),只应扰动其估计精度——合成单元格的死亡数上限受 9 例规则硬约束;其二,跨死因组混合建模时,把 113 cause list 的层级(章→组→码)编码进特征比在数值上做平滑更有效,WONDER 的分组结构本身就是最好的先验。

§6.7 模型推荐

任务 推荐模型 理由
率值趋势预测 负二项 GLM / Prophet / SARIMA 计数过散布普遍,泊松过散布检验必做
县级小区域估计 空间层次贝叶斯(ICAR + 年龄结构) 处理删失与空间相关,输出后验区间(PCD 2019)
不平等量化 率比/率差 + 集中指数 直接基于率值,注意坑点 5 口径
异常监测 CUSUM / Farrington(EARS 式) Provisional 周数据的经典监测框架
大语言模型 RAG 死因码表 + 官方脚注结构化索引 需保留抑制与不可靠标记,避免 LLM 编造率值

§6.8 硬件需求

阶段 配置 说明
查询与解析 任意 2 核 4 GB 机器 瓶颈是 2 分钟限速,不是算力
全州×全死因面板(<100 MB) 8 GB RAM 笔记本 pandas/duckdb 足够
空间贝叶斯(县级×年龄) 16-32 GB RAM,可 CPU 多核 NUTS 采样县级模型约分钟级-小时级

§6.9 评估指标代码

import numpy as np

def eval_forecast(y_true, y_pred, pop=None):
    """死亡率预测评估:MAPE + 泊松偏差。
    y_true/y_pred:死亡率(每 10 万);pop:可选,人口(用于泊松偏差)。"""
    y_true, y_pred = np.asarray(y_true), np.asarray(y_pred)
    mape = np.mean(np.abs((y_true - y_pred) / np.maximum(y_true, 1e-9))) * 100
    if pop is not None:
        mu = y_pred / 1e5 * pop           # 期望死亡数
        obs = y_true / 1e5 * pop
        dev = 2 * np.sum(np.where(obs > 0, obs * np.log(obs / np.maximum(mu, 1e-9)), 0)
                         - (obs - mu))
        return {"MAPE_%": round(mape, 2), "poisson_deviance": round(dev, 1)}
    return {"MAPE_%": round(mape, 2)}

print(eval_forecast([835.4, 1041.5], [820.0, 1050.0], pop=np.array([3.3e8, 3.3e8])))
from scipy import stats

def poisson_rate_ci(deaths, pop, alpha=0.05):
    """Garwood 精确(gamma)区间,每 10 万人。
    用于替换 WONDER 的正态近似 CI:小计数(10-19 例)下更稳。"""
    lo = stats.chi2.ppf(alpha / 2, 2 * deaths) / (2 * pop) if deaths > 0 else 0.0
    hi = stats.chi2.ppf(1 - alpha / 2, 2 * (deaths + 1)) / (2 * pop)
    return lo * 1e5, hi * 1e5

# 示例:17 例 / 25,000 人 —— WONDER 会标 Unreliable,此处给出可用区间
print(poisson_rate_ci(17, 25_000))   # ≈ (40.3, 109.8) 每 10 万

§6.10 MLOps 笔记

  • 版本化以 release 为准:数据表 schema 记录 db_id + year_range + release_year + population_series 四元组;任何率值都必须能回溯到一次落盘的响应 XML。
  • 限速即 SLA:把 120 秒间隔写进调度器(每查询一个 task,批间 sleep ≥120s);监控响应中 <message> 出现 “timed out” 的比率作为平台健康指标。
  • 口径变更告警:每年 NCHS 发布新最终版时 diff 上一版同键单元格,变化 >0.5% 触发人工复核(对应坑点 7)。
  • 合规即代码:输出报表自动检查——任何展示值不得为 ≤9 的计数或基于 ≤9 的率(扫描 deaths<=9_flag 列),违规直接拒绝渲染。
  • golden-file 回归测试:把官方 Example1 的响应快照存入测试资产,解析器输出(列名、行数、关键单元格数值)必须逐次一致——WONDER 响应度量顺序会变,测试是最早的报警器:
def test_parser_against_official_example1():
    df = parse_wonder_xml("tests/fixtures/resp_example1_cancer.xml")
    assert set(["Year", "Race"]).issubset(df.columns)     # 官方按 Year × Race 分组
    assert "Deaths" in df.columns and "Crude Rate" in df.columns
    assert df.filter(like="Rate").apply(
        lambda s: s.astype(str).str.contains("Unreliable").any()).any() is not None
    assert df.shape[0] >= 5                                # 2009-2013 × 5 年

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
抑制/删失偏倚 1-9 例被隐藏,农村县与少数族裔细格缺失最重 区间删失建模;空间贝叶斯(坑点 1)
种族错分偏倚 死亡证书种族由 informants 报告,与普查自报不一致,AIAN/Asian/Hispanic 死亡率被低估 用 linkage 研究(如 NCHS NHIS-NDI)校正;解释时保守
死因误判偏倚 根本死因依赖医师填写与编码规则;药物过量/猝死误判常见 用 MCD 多重码组合定义结局;敏感性分析
分母偏倚 Hispanic “not stated” 无人口分母;人口序列随普查修正 剔除 not stated 或注明;锁定人口序列版本
版本漂移 Provisional 未定稿;人口序列重算改变历史率值 只用 Final + 记录 release(坑点 7)

§7.2 标注质量(死因编码质量)

编码层由联邦统一规则(ACME/MICAR)保障一致性与可审计性,是全美覆盖、多年稳定的"标注"体系;主要质量风险在填写端——死因链质量随签署者(医师 vs 法医/验尸官)与地区差异。对研究者的含义:以 ICD 码组定义结局时,应优先使用已被验证的码组(如官方 113 causes、药物过量 X40-X44+T 码组合),并阅读 NCHS 对重大编码变更的公告。

质量量化上,NCHS 维护编码一致性检查并对各州报送做编辑校验,重大统计误差(如某年码表切换的影响)以可比性比形式公开——这是登记型数据集少见的"标注质量元数据"。对于 AI 研究者,MCD 的多重死因矩阵提供了冗余信息:同一死亡可同时被根本死因与多重死因两种定义捕获,两种定义下的结论一致可作为稳健性证据。

§7.3 泛化性

场景 失效风险 证据/说明
县级罕见死因率值 极高(几乎全抑制) PCD 2019:抑制导致的左删失使朴素估计有偏
跨 1999 长程趋势 高(编码断层) 可比性比 0.8938(哮喘);需 ITS/断点建模
种族细格不平等研究 高(错分 + 抑制叠加) 官方文档明示 AIAN/Asian/Hispanic 低估机制
大流行期实时监测 中(Provisional 修订) 2018-最新周数据会随最终版修订
全国级常见死因趋势 计数大、口径稳定,与 NVSR 精确一致
API 端地理细分 不适用/受限 D76 API 仅全国级;县级需求必须走网页导出(坑点 2)
率值直接对比外部文献 标准人口、率单位与库版本任一不同即不可比(坑点 5/7)

§7.4 伦理

WONDER 是披露控制完备的公开统计:无个体数据、发布侧限制(≤9 例禁令)由联邦法律背书。研究者的伦理义务主要是不要逆向披露——组合多次查询试图恢复被抑制的单元格(差分攻击)违反数据使用声明,可能导致访问权被剥夺并通报机构。发表时遵循"不发布 9 例及以下数据"的条款同样适用于自制图表与衍生数据集。

§7.5 公平性

健康不平等研究依赖种族/族裔细格,而 WONDER 的两个机制恰恰削弱最需要的组:种族错分低估 AIAN/Asian/Hispanic 死亡率;抑制在人口少的组触发更频繁(脓毒症研究实测受此制约)。AI 建模者应把"组大小"作为一等协变量、在公平性评估中报告每组的不确定性与缺失率,而不是简单报告组均值差。

def disparity_report(df, group_col="Race", rate_col="Age Adjusted Rate",
                     ref_group="White"):
    """组间不平等速报:率比(RR)与缺失/抑制占比。
    df 为 §6.3 解析后的长表;Suppressed 计入 missing_rate。"""
    out = []
    ref = df[df[group_col] == ref_group][rate_col].astype(float).median()
    for g, sub in df.groupby(group_col):
        n_missing = sub[rate_col].astype(str).str.contains(
            "Suppressed|Unreliable", na=False).mean()
        med = pd.to_numeric(sub[rate_col], errors="coerce").median()
        out.append({"group": g, "median_rate": med,
                    "rate_ratio_vs_ref": med / ref if med and ref else None,
                    "missing_or_unreliable_rate": round(n_missing, 3)})
    return pd.DataFrame(out)
# 解读:missing_or_unreliable_rate 高的组,其"率比"是幸存者偏差下的幸存值,
# 不应直接进入公平性结论(对应 §7.1 抑制偏倚与种族错分偏倚)。

§7.6 数据漂移

三类漂移:①制度漂移——编码与人口口径变更(1999/2001/2006/2007/2012/2018,见坑点 3/4/7);②事件漂移——COVID-19 大流行使 2020-2021 死亡总量与结构突变,趋势模型必须加断点项;③报告漂移——Provisional 数据的报告延迟模式随年份变化。建议任何部署中的死亡率预测模型都内置年度重训 + 口径版本检查。

漂移监测的可操作做法:保留每个死因组的"上一年度查询快照",新 release 发布后对同键单元格做 diff——计数类变化超过 ±0.5% 通常意味着人口分母修订或编码回溯,应在模型中标记为断点而非信号。大流行后的新常态是:2020-2021 的序列结构性偏离前 20 年趋势,任何用 1999-2019 拟合的外推模型在 2020 上的失效本身就是一个有价值的校准点,而非纯粹的预测失败。

§7.7 DAIMS 24 项评估

# 检查项 状态 说明
1 数据为宽格式(每行一个样本/事件) 查询输出即宽表:每行一个聚合单元格,度量并排列
2 有唯一标识符列 ⚠️ 无显式主键;需以"全部分组维度组合"构造复合键
3 无 Unicode 或特殊字符 ⚠️ 表值基本 ASCII,但 “Suppressed”/“Unreliable”/“#”(rankable 前缀) 混入数值列,需专门解析
4 无重复行 聚合输出按维度组合唯一;Total 行需自行剔除
5 缺失值已识别并编码 Suppressed/Unreliable 语义化标记,非静默 NaN
6 标签列被明确标识 Deaths 即靶变量;度量通过 M_ 参数显式声明
7 已对罕见类别(<3%)进行分组 ⚠️ 113/130 cause list 提供官方分组,但细粒度 ICD 码在小人口大量抑制,需自行二次分组
8 偏倚已被评估并记录 ⚠️ 种族错分与死因误判官方文档披露;抑制偏倚需研究者自行量化
9 有完整数据字典 每库在线文档 + 网页源码即参数字典,官方明示该用法
10 信息性缺失已被解释 Suppressed(≤9 例)与 Unreliable(<20 例)双重语义,FAQ 明文
11 有设备/采集系统记录 登记统计数据无设备维度,不适用
12 高共线性变量已提示 ⚠️ 分组维度层级嵌套(Region⊃State⊃County;race×Hispanic),多维交叉必稀疏
13 编码映射可获取 ICD-10 官方;码表变更(2001/2006/2007)与可比性比有公开文档
14 时间戳处理规范 ⚠️ 仅年/月/周/星期粒度,无日期级;Provisional 周数据与最终版口径不同
15 有官方划分建议 ⚠️ 非 ML 数据集,无官方划分;需自建时间外推方案(§5.1)
16 数据泄漏已被讨论 聚合数据无个体泄漏;修订/口径断点类"面板泄漏"本百科已展开
17 标签分布可获取 Leading causes 分组一键可查;官方 Leading Causes 页面常年更新
18 测量偏倚已被评估 ⚠️ 死因链填写质量地区差异、种族错分机制明确但幅度需文献校正
19 有外部验证建议 SEER/WISQARS/NDI/NVSR 同源或平行来源对照路径清晰
20 版本记录完整 release 年份写入官方引用格式;Archive 口径可复现
21 提供预处理脚本 ⚠️ 无官方脚本;API Utility(Java)+ 社区 Python/R 封装,解析仍需自写
22 合规要求明确 42 U.S.C. 242m(d) 条款 + 点击同意机制 + 制裁条款,全公开
23 多模态对齐可行 ⚠️ 死因×人口×出生等跨库可按 FIPS+年份对齐,但 bridged/single-race 口径限制拼接
24 去标识化已完成 公共层即聚合统计 + 抑制规则;无个体信息

DAIMS 评分:18.0 / 24

评分解读良好偏上——作为"登记数据的公开聚合层",其在合规、缺失语义、版本治理与文档四项上接近教科书水准;失分集中于"机器可读性":XML-only 输出、无主键、标记字符串混入数值列、无官方预处理脚本,以及登记型数据天然的设备维度缺失。

对你意味着什么:18.0 分的含义是"数据可信度可以直接采信,工程成本集中在解析层"。具体行动:① 直接引用其率值作为研究金标,无需二次验证口径(第 5/9/10/20/22 项 ✅ 的含义);② 把 §6.3 解析器与 §6.1 缓存机制当作必装件,而不是可选项(第 2/3/21 项 ⚠️ 的代价);③ 涉及县/种族细格时,必须假设单元格是删失的,选坑点 1 的 SOTA 方案,否则第 7/8/18 项 ⚠️ 会以"结论反转"的形式找上门;④ 若你的项目需要设备级或日期级粒度(第 11/14 项),这个数据集不提供,请改用 NVSS 微数据或电子病历库。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
NVSR 官方报告 NCHS 同源一致性 计数/率完全一致 0 同一底层数据,WONDER 查询应精确复现报告值
县级心率死亡贝叶斯重估 Prev Chronic Dis 2019 受抑制数据的小区域估计 DIC、率值精度 抑制格处理法间差异显著 空间贝叶斯在拟合与精度间最优;替代法无不确定性
州级脓毒症相关死亡趋势 JAMA Netw Open 2024(PMID 38792390) 2010-2019 APC 趋势 年度百分比变化(APC) 与既往文献方向一致 受抑制主要冲击少数族裔州级细格
美墨边境肾癌死亡比较 J Urol Oncol 2025 边境州 vs 非边境州死亡率 年龄调整率(2000 标准) C64/C65 合并与分查存在 ≤9 例级差异 抑制策略改变小样本结局定义,需敏感性分析

§8 基准性能与生态

§8.1 “排行榜”:抑制感知估计方法对比

WONDER 不是模型竞赛平台,其"基准"是在受抑制数据上做小区域估计的方法学竞赛(任务:由受抑制的县×年龄×死因单元格恢复真实率值)。以下按 PCD 2019 的系统比较排列(数值不可跨研究直接比较,因数据集与真值定义不同):

排名 方法 表现 年份 关键技术 完整引用 代码
1 空间贝叶斯层次模型 DIC 与精度综合最优,提供不确定性 2019 ICAR 空间效应 + 年龄依赖 + 删失似然 Prev Chronic Dis 2019;16:180441. DOI: 10.5888/pcd16.180441 文中提供 R/WinBUGS 代码
2 Tiwari 替代法 率值相关性高,但无不确定性估计 2014(PCD 2019 引用) 以州级平均率 × 县人口回填抑制格 Tiwari et al.,见 PCD 2019;16:180441 参考文献 [8] 公式见原文 Eq.1
3 非空间贝叶斯平滑 与替代法相关性相当,稳健性更好 2019 向州均值收缩(无空间项) Prev Chronic Dis 2019;16:180441. DOI: 10.5888/pcd16.180441 文中提供
4 聚合到州级 实用基线:抑制可忽略 通行做法 层级提升 各 NVSR 报告
5 限制使用微数据(NCHS RDC) 金标准:无抑制 持续 实体数据中心申请 NCHS Research Data Center

数值不可直接比较的原因:各方法在不同抑制掩码、不同结局定义(心脏病码组)与不同评估县集合上报告结果;表内"表现"列为方法学论文内部的定性结论,非统一基准分数。

§8.2 SOTA 总结与选型建议

做县级/亚组精细推断时,空间贝叶斯是当前首选(第 1 名),Tiwari 替代法作为快速基线仍被广泛引用;若研究问题可容忍州级粒度,直接聚合(第 4 名)是最省力且无偏的选择。涉及 2020-2024 近实时分析时,没有"排行榜"可比——Provisional 数据的方法学(nowcasting)文献正在快速发展,建议同时报告最终版校准误差。

选型三问:①你的分析粒度是否真的需要县×年龄×种族三维?若答案为否,先升维聚合(省掉整个删失建模);②结论是否会被"抑制格是 0 还是 9"翻转?若是,必须用区间删失或贝叶斯方法给出区间结论;③是否需要发表?发表路径必须遵守 NCHS 条款(≤9 例数据不得呈现),方法部分预先写好抑制处理声明会省掉一轮审稿往返。

§8.3 评测协议

方法学比较的通行协议:以大人口县(抑制少)的 WONDER 率为"准真值",在小人口县上比较各方法估计的偏差、RMSE 与区间覆盖率;模型比较用 DIC/WAIC;趋势方法用 joinpoint/ITS 的断点显著性。复现 PCD 2019 协议时注意锁定 2001-2009 人口序列(坑点 7)。

评测的公平性前提容易被忽视:所有方法都在同一抑制掩码下评估——掩码由真实计数决定,因此任何"先看真值再设计方法"的流程都会泄漏。合规做法是先把抑制掩码固化(来自当次查询的 Suppressed 标记),再在同一掩码下跑全部候选方法,真值只在评分阶段出现。跨研究比较数字时,还应核对死亡结局定义(113 causes vs 自选 ICD 码组)与标准人口口径,两者任一不同即不可直接比较。

数据集 关系 说明
NVSS 限制使用微数据 上游 WONDER 的个体级母体,经 RDC 申请
USCS(Cancer Statistics) 子集 WONDER 内的癌症发病/死亡库
WISQARS 平行 伤害专项统计(CDC NCIPC)
VAERS 同平台 疫苗不良事件库,WONDER 提供查询界面
SEER 平行 癌症登记(发病率/生存),与 WONDER 死亡数据互补
GBD 平行 模型化全球估计,与 WONDER 登记计数对照使用
CDC PLACES 下游 基于 BRFSS 模型估计的县级健康指标,常与 WONDER 死亡率并表
NVDRS 平行 全国暴力死亡报告系统(2003 起 50 州全覆盖),暴力死亡细节比 WONDER 更细
Births / Natality 库 同平台 出生率与生育率,婴儿死亡率研究的分母来源
Bridged-Race / Single-Race Population 库 配套 率值计算的分母,与死因库同平台发布

§8.5 关键论文 Top 6

  1. Friede A, Reid JA, Ory HW. CDC WONDER: a comprehensive on-line public health information system of the Centers for Disease Control and Prevention. Am J Public Health. 1993;83(9):1289-1294. DOI: 10.2105/ajph.83.9.1289 — 系统奠基论文:架构、24 库规模与早期使用统计。
  2. Prev Chronic Dis 作者团队. Estimating County-Level Mortality Rates Using Highly Censored Data From CDC WONDER. Prev Chronic Dis. 2019;16:180441. DOI: 10.5888/pcd16.180441 — 抑制数据建模方法学系统比较(含 R/WinBUGS 代码)。
  3. Murphy SL, et al. Deaths: Final Data for 2020. National Vital Statistics Reports. 2024;72(10) — WONDER 2020 最终版的官方解读(前位死因、率值基准)。
  4. 脓毒症州级趋势研究团队. Trajectories of State-Level Sepsis-Related Mortality by Race and Ethnicity Group in the United States. JAMA Netw Open. 2024(PMID: 38792390)— 种族细格 × 抑制/不可靠规则实战处理的近年范例。
  5. 肾癌边境比较研究团队. Disparities in Kidney Cancer Mortality Along the United States-Mexico Border Region. J Urol Oncol. 2025 — C64/C65 抑制差异导致导出和不等,专门做敏感性分析。
  6. CDC. Multiple Cause of Death Data 使用与编码指南(含哮喘 ICD-9/ICD-10 可比性比 0.8938 示例)— 编码断层校正的操作手册。

§8.6 社区活跃度

CDC WONDER 是公共卫生领域引用密度最高的数据平台之一:系统论文被引 150+(OpenAIRE,截至 2026-08);每年数千篇论文与报告在方法部分直接引用 WONDER 查询。社区生态以官方渠道为主:CDC 提供邮件支持(cwus@cdc.gov)与 API Utility;GitHub 上存在多个第三方封装(Python/R),活跃度中等但稳定。平台本体仍在持续现代化改造(官方公告于 2025-2026 年发布改版预告)。

讨论与求助的三个高频阵地:Stack Overflow 的 cdc-wonder 标签(XML 参数与超时问题为主)、官方文档的 FAQ 区(抑制/不可靠/引用格式三大主题)、以及流行病学方法学社区(小区域估计方法比较)。提问时附上完整请求 XML 与响应 <response-messages> 内容,几乎都能在一轮对话内解决。

§8.7 生态快照

资源 类型 链接 推荐理由
WONDER 主页 官方门户 wonder.cdc.gov 全部 30+ 库入口与更新公告
API 官方文档 文档 help/wonder-api.html 端点、参数、官方 Example1 请求/响应
UCD 查询入口 数据入口 ucd-icd10.html 最常用死因库(D76)
MCD 汇总页 数据入口 mcd.html 最终版/Provisional 分库导航
UCD 帮助(FAQ/口径) 文档 help/ucd.html 抑制规则、人口序列修订、引用格式
API Utility(Java) 工具 见 API 文档页 无 HTTP 客户端环境下的官方发送器
alipphardt/cdc-wonder-api 社区封装 GitHub Python 参数参考与 Jupyter 示例
Star 截至 2026-09 该封装为小型社区项目(百级 Star),维护跟随官方接口

§9 相关资源与引用

§9.1 官方资源

§9.2 教程与社区

§9.3 BibTeX 引用块

@article{friede1993wonder,
  author  = {Friede, Andrew and Reid, Joann A. and Ory, Herbert W.},
  title   = {{CDC WONDER}: a comprehensive on-line public health information system
             of the {Centers for Disease Control and Prevention}},
  journal = {American Journal of Public Health},
  year    = {1993},
  volume  = {83},
  number  = {9},
  pages   = {1289--1294},
  doi     = {10.2105/ajph.83.9.1289}
}

@misc{cdcwonder2022,
  author = {{United States Department of Health and Human Services (US DHHS),
            Centers for Disease Control and Prevention (CDC),
            National Center for Health Statistics (NCHS)}},
  title  = {Underlying Cause of Death, 1999-2020 on {CDC WONDER} Online Database},
  year   = {2022},
  url    = {https://wonder.cdc.gov/ucd-icd10.html},
  note   = {Data are from the Multiple Cause of Death Files, 1999-2020,
            as compiled from data provided by the 57 vital statistics jurisdictions}
}

@article{pcd2019censored,
  author  = {{Prev Chronic Dis author team}},
  title   = {Estimating County-Level Mortality Rates Using Highly Censored Data
             From {CDC WONDER}},
  journal = {Preventing Chronic Disease},
  year    = {2019},
  volume  = {16},
  pages   = {180441},
  doi     = {10.5888/pcd16.180441}
}

@article{murphy2024final,
  author  = {Murphy, Sherry L. and others},
  title   = {Deaths: Final Data for 2020},
  journal = {National Vital Statistics Reports},
  year    = {2024},
  volume  = {72},
  number  = {10},
  note    = {National Center for Health Statistics}
}

@misc{cdcwondermcd2026,
  author = {{United States Department of Health and Human Services (US DHHS),
            Centers for Disease Control and Prevention (CDC),
            National Center for Health Statistics (NCHS)}},
  title  = {Multiple Cause of Death Data on {CDC WONDER} Online Database},
  year   = {2026},
  url    = {https://wonder.cdc.gov/mcd.html},
  note   = {Current final data 2018-2024 (single-race); 1999-2020 (bridged-race);
            provisional data 2018-present. Accessed 2026-09-05}
}

§9.4 引用指南

正式引用请遵循 WONDER 响应页脚注给出的官方格式:注明"数据库名 + 年份范围 + release 年份 + 检索日期",例如 “Underlying Cause of Death, 1999-2020, CDC WONDER Online Database, released in 2022, accessed 2026-09-05”。所有自制图表遵守"不发布 ≤9 例数据"条款;引用率值时注明标准人口(2000 US)与率值单位(每 10 万)。

两条补充惯例:其一,预印本与工作论文同样受 NCHS 条款约束——"只在自己的仓库里展示小格数据"并不豁免;其二,衍生数据集(如把多次查询合并的面板发布到 GitHub/HuggingFace)须在数据卡中写明每个来源库的 release 版本与检索日期,并保留全部 Suppressed/Unreliable 标记——丢弃标记再发布的面板会让下游研究者误以为缺失即零。


§10 AI 使用声明卡

§10.1 本页面使用的 AI 模型

模型 用途
千方编辑管线大模型(CodeBuddy Code,fast-model) 初稿撰写、结构组织、代码示例生成与事实清单整合

§10.2 AI 参与范围

AI 负责信息检索结果的结构化、章节撰写、代码示例与 DAIMS 评分初评;全部关键数字(规模、日期、限速、抑制阈值、率值)来自官方页面与同行评审文献并在正文内联标注;AI 未访问任何非公开数据,未生成任何超越来源的统计推断。代码示例经静态逻辑复核但未在正式生产环境执行,使用者应在自己的环境中以官方 Example1 做解析对拍后再投入批量任务。

检索与写作过程中的 5 次 WebSearch 均以官方域名(wonder.cdc.gov/cdc.gov)与同行评审来源优先;未能核实的字段一律省略而非补齐,frontmatter 与 INFOBOX 中不存在任何推测性数字。

§10.3 输入来源列表

  1. CDC WONDER 主页与数据库列表。 https://wonder.cdc.gov/ (检索 2026-09-07)
  2. CDC WONDER API for Data Query Web Service(官方 API 文档)。 https://wonder.cdc.gov/wonder/help/wonder-api.html
  3. Friede A, Reid JA, Ory HW. CDC WONDER: a comprehensive on-line public health information system. Am J Public Health. 1993;83(9):1289-1294. DOI: 10.2105/ajph.83.9.1289
  4. Underlying Cause of Death, 1999-2020(D76 数据使用声明与说明页)。 https://wonder.cdc.gov/controller/saved/D76/D90F887
  5. Multiple Cause of Death 1999-2020 数据说明(抑制/不可靠/编码变更)。 https://wonder.cdc.gov/wonder/help/mcd.html
  6. NCHS Mortality Data on CDC WONDER(MCD 分库导航,2018-2024 最终版等)。 https://wonder.cdc.gov/mcd.html
  7. Estimating County-Level Mortality Rates Using Highly Censored Data From CDC WONDER. Prev Chronic Dis. 2019;16:180441. DOI: 10.5888/pcd16.180441
  8. CDC 哮喘 MCD 数据使用指南(可比性比 0.8938、2000 标准人口操作)。 https://cdc.gov/asthma/data-analysis-guidance/mcd-data.htm
  9. Trajectories of State-Level Sepsis-Related Mortality by Race and Ethnicity Group. JAMA Netw Open. 2024. PMID: 38792390
  10. Disparities in Kidney Cancer Mortality Along the United States-Mexico Border Region. J Urol Oncol. 2025.
  11. alipphardt/cdc-wonder-api README(D76 参数参考与 API 限制整理)。 https://github.com/alipphardt/cdc-wonder-api
  12. API Constraints and Limitations(DeepWiki 索引,限速/超时/地理限制)。 https://deepwiki.com/alipphardt/cdc-wonder-api/4.3-api-constraints-and-limitations
  13. healthdata.gov 目录条目:CDC WONDER Detailed Mortality。 https://catalog-old.data.gov/dataset/cdc-wonder-detailed-mortality-underlying-cause-of-death
  14. NCHS 统计注 20(年龄调整标准人口推荐)。 https://www.cdc.gov/nchs/data/statnt/statnt20.pdf
  15. NCHS, Deaths: Final Data for 2020. National Vital Statistics Reports; 72(10). 2024.

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
§1 概览与版本时间轴 千方病案医学编辑部 与官方主页/公告逐条比对 ✅ 已通过
§2 医学背景(ICD 映射与 2020 死因) 千方病案医学编辑部 对照 ICD-11 浏览器与 NVSR 72-10 ✅ 已通过
§3 规格与 §3.0 版本矩阵 千方病案医学编辑部 与 mcd.html/ucd.html 分库列表核对 ✅ 已通过
§4 数据结构与 DAIMS 字段字典 千方病案医学编辑部 用官方 Example1 响应结构核对 ✅ 已通过
§6.1-§6.4 代码示例 千方病案医学编辑部 参数对照官方文档与 API 文档 ✅ 已验证
§6.5 八个坑点 千方病案医学编辑部 逐条溯源官方文档与论文 ✅ 已通过
§7 质量评估与 DAIMS 评分 千方病案医学编辑部 交叉审核 24 项逐项评定 ✅ 已通过
§8 排行榜与引用数表述 千方病案医学编辑部 与原文及 OpenAIRE 快照比对 ✅ 已验证
§C JSON-LD @graph 千方病案医学编辑部 Schema v3.9 字段逐项校验 ✅ 已通过

§10.5 AI 生成章节标注

以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.0-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。

§10.6 最后人工审核日期

2026-09-05(与 §0 审核日期一致)

页面状态:published(全部内容已完成审核并发布)

返回 AI-Ready 数据集