ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

NHANES数据库入门指南:从下载XPT文件到权重处理与多周期合并

NHANES数据库入门指南:从下载XPT文件到权重处理与多周期合并 2018年我写第一篇SCI的时候导师丢给我一句话“NHANES这个数据库免费数据量大你自己去挖。”那时候我连NHANES全称都念不顺下载数据全靠看英文页面硬啃XPT文件用什么打开都不知道权重怎么处理更是一头雾水。前前后后折腾了两个月才跑通一个最简单的分析。这两年带着不少师弟师妹重复同样的过程问来问去还是那几个问题数据在哪下、文件怎么读、权重要不要管、多个周期怎么合并。所以这篇文章就想把NHANES数据库从入门到基本操作讲清楚作为系列第一篇先解决“它是什么、怎么拿数据、数据怎么组织”这三件事。如果你是第一次接触NHANES或者下了数据但不知道怎么处理这篇文章能帮你少走一半弯路。1. NHANES数据库到底是什么1.1 从一次全国调查说起NHANES全称National Health and Nutrition Examination Survey翻译过来是“全国健康与营养状况调查”。它的数据由美国国家卫生统计中心NCHS负责管理运作上归在疾病控制与预防中心CDC体系下。很多人刚听到“美国”两个字就以为只能用来研究美国人群其实这是一个误区。NHANES的公开数据没有任何国别限制全球研究者都能免费下载国内用NHANES发SCI的文章也早就非常多内分泌、营养、心血管、职业暴露、精神卫生各个方向都在用。这个调查的历史最早可以追溯到1960年代最初是隔几年做一次全国性调查比如NHANES I、NHANES II、NHANES III样本周期不连续。1999年开始它改成“连续调查”模式每年采集一整年的数据每两年作为一个发布周期对外公布。到现在NHANES已经积累了二十多年、十余个周期的连续数据每个周期大约覆盖五千到一万人所有周期加起来是几万甚至十几万人的规模。我一开始对NHANES的定位理解偏了——我以为它是一个纯粹的“营养调查数据库”。实际上它的范围远超营养。问卷部分涵盖吸烟、饮酒、慢性病史、用药、睡眠、抑郁筛查、性行为、饮食频率体检部分包括身高体重、血压、腰围、握力、体成分化验部分更是涵盖了血常规、血脂、血糖、糖化血红蛋白、维生素、重金属、炎症指标、性激素等等。等于说它是一个“健康百科型”的横断面数据库。1.2 抽样设计决定了数据不能当普通调查用NHANES的样本不是随便找一群人填问卷而是采用分层多阶段概率抽样。直观理解就是先按地理区域分层抽县再在县里抽街区街区里抽住户住户里抽个人。整个抽样的目标是让最终受访者能够代表美国非住院平民人口的整体情况。这里面有个关键设计为了更好地估计特定亚组NHANES会对老年人、青少年、墨西哥裔美国人、非裔美国人等群体做“过采样”。也就是说这些人群被抽中的概率比他们在总人口中的比例要高。这样做的目的是保证每个亚组都有足够的样本量做统计分析。但这种设计带来的直接后果就是——样本是“偏”的不能直接拿原始样本量算比例而必须用权重调整。这一点在第4部分会专门展开。NHANES的数据采集也分为两大块。第一块是家庭访谈问卷由经过培训的访谈员入户完成问的都是主观报告信息比如有没有确诊过糖尿病、过去30天有没有吸烟。第二块是在移动体检中心通常缩写为MEC里完成的身体检查和实验室采样这是硬数据血压是当场测的血是当场抽的不是靠受访者回忆。这也是NHANES最有价值的卖点——很多数据库只有问卷自报数据而NHANES有一大批客观实测指标。1.3 “连续NHANES”是你最常接触的概念如果你在文献里看到“continuous NHANES”或“NHANES 1999-2018”说的就是1999年之后连续开展、每两年一个周期发布的数据。1999年之前的数据则叫NHANES I/II/III或者其他主题调查使用方式不太一样现在绝大多数研究用的都是连续NHANES的数据。周期命名也需要记牢1999-2000是一个周期2001-2002又是一个周期依此类推。每个周期发布一套独立的数据文件。需要特别注意的是2020年这个节点由于疫情原计划的2019-2020周期实际只调查到2020年3月就中断了官方把2019-2020的数据文件和2017-2018合并成一个发布包叫“2017-March 2020 Pre-Pandemic Data”。所以如果你找“NHANES 2019-2020”可能会发现它和2017-2018放在一起这不是文档错误而是官方的处理方式。合并多年份周期做分析是NHANES的常规操作。单个周期样本量只有几千到一万人做某些亚组分析会很吃力所以大家经常把多个周期合并成一个大样本。比如研究维生素D与全因死亡的关系可能直接把1999-2018十个周期全合并样本量直接到数万人。合并的具体操作稍后讲。2. 为什么值得花时间研究它2.1 免费、开源、样本量大最直接的吸引力就是免费。注册NHANES账号完全免费下载数据不需要付费不需要机构授权不需要审批。这对学生和刚起步的研究者特别友好。不像有些数据库要申请、要授权费用、要伦理审查NHANES的数据公告里明确说明开放给全球研究者使用。样本量方面单看一个周期似乎不大但合并多年份以后优势就出来了。比如研究肥胖或高血压这类常见问题合并近20年数据后人数可以上万甚至十万级别病例组和对照组都绰绰有余。而且这些数据是统一的调查方案、统一的实验室标准、统一的数据字典体系合并的逻辑一致性比你把几个独立小数据库硬拼在一起要可靠得多。还有一点是发表认可度。NHANES系列数据在国际期刊上的接受度一直很高因为它代表性强、变量公开可查、方法学文档完善审稿人通常不会质疑数据的质量。你只需要把调查周期、抽样设计、权重处理、排除标准写清楚方法学部分就立得住。2.2 变量覆盖广客观指标是亮点这是NHANES区别于很多问卷类数据库的核心优势。做临床研究的人都有体会如果只有自报“我有没有高血压”误差很大而NHANES直接给你一个用标准血压计测出来的收缩压和舒张压再配合是否服用降压药的问题就能比较准确地定义高血压状态。实验室指标更是丰富。血常规里白细胞、血红蛋白、血小板都有生化指标里总胆固醇、高密度脂蛋白、低密度脂蛋白、甘油三酯、空腹血糖、糖化血红蛋白营养指标里有维生素D、叶酸、铁蛋白环境暴露领域还有血铅、血汞等重金属指标部分周期还测了炎症指标、性激素、甲状腺功能。近几年的周期还增加了更多新指标比如某些有机污染物。研究什么方向就能在数据字典里找对应的化验变量。问卷部分覆盖的是“生活方式”和“主观健康”信息。我常用的有吸烟是否吸过100支烟、目前每天吸多少支、饮酒、体力活动、睡眠时长、抑郁量表PHQ-9、疼痛、牙齿健康、用药记录。用药这一块很有价值它包含了处方药的通用名、药物类别编码可以研究特定药物使用与化验指标的关系。还有家族史、收入水平、教育程度、婚姻状况、保险情况这些重要的协变量做调整分析基本够用。2.3 和其他数据库比优势在哪很多人会问NHANES和MIMIC、SEER、CHARLS这些数据库到底怎么选。我做了个简单对比NHANES全国性横断面调查覆盖一般人群主打健康营养和慢性病含体检和实验室实测指标适合做患病率、关联性研究。MIMIC重症监护病房的大数据包含生命体征、入出院记录、医嘱、检验结果、护理记录适合做ICU患者预后、临床决策方向属于纵向患者数据。SEER肿瘤登记数据覆盖大量癌症病例包含肿瘤分期、病理、生存随访适合做癌症流行病学和生存分析。CHARLS中国中老年健康养老调查纵向面板自报信息和部分体检数据适合研究中国中老年人群的衰老和慢性病。对比起来NHANES的独特位置其实是“一般人群实测指标多年份可合并”。如果你需要的是一个能代表全人群、又有客观生化指标的数据源NHANES几乎是首选。如果你研究的是ICU患者、肿瘤发病趋势或中国老龄化问题那就要考虑其他数据库。不过也别过度神化它。第一NHANES是横断面设计变量和结局同时采集做因果推断比较吃力第二它代表的是美国非住院平民人口结论外推到其他国家或住院患者时要谨慎第三部分变量在不同周期的定义、编码甚至单位都可能变化这给多周期合并埋了坑。3. 正式使用前的下载与准备工作3.1 注册官网账号虽然不是必须但建议做NHANES的官方网站是cdc.gov/nchs/nhanes/。打开后你看到的页面风格很朴素没有花哨的交互但资料非常全。绝大多数数据文件的下载都不要求登录直接点击就能下载。那我为什么还建议注册因为注册后有几点实际好处一是可以下载部分限制访问的数据比如含更细地理信息的文件二是官方发布新周期数据或文档更新时会有公告三是你在做研究时要引用官方文档登录状态下载和查询记录更方便。注册流程很简单填邮箱、设置密码、验证邮件就可以不需要机构邮箱也不需要审批。注册免费这点不用担心。3.2 XPT文件到底是什么格式怎么打开这是新手最容易卡壳的地方。我在指导别人时十个里有八个第一反应是用Excel打开下载好的文件结果要么打不开要么打开一片乱码。原因是NHANES提供的主要数据下载格式是SAS Transport Version 8文件后缀是.XPT。这不是Excel能直接处理的格式而是一种由SAS发明的跨平台数据传输格式专门用来在不同统计软件之间交换数据。为什么要用这个格式因为XPT文件能保留变量名、变量标签、格式说明这些元信息。比如一个变量叫RIAGENDRXPT文件里还带有一个标签“Gender of the participant”读入统计软件后你能看到这个变量的含义。如果转成CSV标签就丢了。读取XPT最常用的工具组合R语言用haven包的read_xpt()或foreign包的read.xport()Python用pandas.read_sas()SPSS和SAS本身也能直接读取。我个人的建议是如果你以后要长期用NHANES做分析直接学R配合survey、dplyr、tableone这些包处理NHANES数据非常顺。Python也能做但统计描述和加权分析这一块生态没有R成熟。3.3 动手下载第一个数据文件以人口学文件为例演示一下完整流程你后面下其他文件照葫芦画瓢就行。第一步在官网首页找到“Questionnaires, Datasets, and Related Documentation”入口点进去之后按年份选择调查周期。假设你要下载1999-2000周期的Demographics数据就选“1999-2000”。页面会列出一堆文件类别常见的有Demographics、Dietary、Examination、Laboratory、Questionnaire、Limited Access等。不同周期的页面布局会有一点差别但整体逻辑差不多。第二步点开Demographics类别会看到对应表格列里面有“Demographics (DEMO)”字样旁边标明数据文件大小后缀是XPT。同时还有一份HTML格式的数据字典Codebook和一份文档Documentation。下载XPT文件是你拿数据的第一步但一定记得把代码本也下载或在线保留下来。你后面分析时查变量就靠它。第三步把XPT文件放到工作目录用R读取library(haven) demo - read_xpt(DEMO.XPT) dim(demo) colnames(demo)第一次读取成功后你应该能看到一个几千行、几十列的数据框。其中每一行对应一个受访者每一列对应一个变量。比如RIAGENDR是性别RIDAGEYR是年龄按年记录RIDRETH1是种族。这些变量名看起来有些奇怪但NHANES的变量命名有一定的规律前缀常常是模块缩写比如RI开头多半是“interview/exam”相关的人口学变量LB开头一般是实验室laboratory变量MCQ开头是慢性病问卷medical conditions questionnaire。读到这一步你已经有能力下载任何NHANES数据文件了。核心步骤就是选周期、找类别、下XPT、读进来。但下载只是开始真正的难点是理解数据内部的逻辑关系尤其是变量关联方式和权重。4. 数据结构里的关键逻辑变量、权重与合并4.1 认识三个核心变量NHANES数据文件很多但所有文件之间并不是孤立的它们靠几个关键变量串起来。你必须在心里刻住三个变量名。第一个是SEQNrespondent sequence number受访者序列号。这是每个受访者在当个周期内唯一的编号可以理解成数据库里的主键。所有数据文件——人口学、体检、化验、问卷——都用这个编号来标识同一个人。你要把化验数据和人口学数据合并就是按SEQN匹配。就好比两个Excel表格都有“学号”这一列你按学号VLOOKUP一样。第二个是调查周期标识。早期周期里常见的是SDDSRVYR比如1999-2000周期值为12001-2002周期值为2依此类推。当你合并多个周期的文件时这个变量能帮你区分每个样本来自哪个周期做分层描述或亚组分析时非常有用。近年的周期里这个变量可能用别的名字或位置需要查代码本确认。第三个是权重变量。人口学文件里通常有WTMEC2YR、WTMEC4YR分别代表2年体检权重和4年体检权重。MEC就是指移动体检中心也就是完成体检部分的人群权重。为什么要体重这是整个NHANES分析最核心也最容易被忽视的一环。4.2 权重变量为什么绕不开先打个比方。假设你要估算全班同学的早餐习惯但你调查时故意多问了一些女生那么班级原始数据里女生比例比真实比例高如果你直接拿这个数据算“全班女生比例”结果一定是偏的。NHANES也是这个逻辑它为了确保特定亚组有足够样本故意让某些人群的入样概率更高。要找回“全美国非住院平民人口”的真实比例就必须对每个样本按它的入样概率做加权。具体怎么用如果只是描述性统计比如全人群的糖尿病患病率就要加权否则结果会明显偏离CDC官方报告的数字。做回归分析时学术界有两种观点严格派认为在所有估计中都应该考虑抽样设计务实派认为当模型是研究关联而非估计总体水平时可以不加权。我个人的操作习惯是描述性统计必须加权建模时会把加权模型和未加权模型都跑一下敏感性分析里报告两种结果这样审稿人也不会挑毛病。R里面处理NHANES数据我一般用survey包。基本流程是先定义调查设计对象library(survey) nhanes_design - svydesign( id ~SDMVPSU, strata ~SDMVSTRA, weights ~WTMEC2YR, nest TRUE, data demo )这里的SDMVPSU和SDMVSTRA是NHANES专门提供的伪抽层和伪单元变量官方建议在做方差估计时使用。定义了设计对象以后可以用svymean、svytotal、svyglm等函数做加权均数、加权总数和加权回归。这一套东西做完你的结果才是“有代表性”的。4.3 多周期合并的策略当你决定合并多个周期时数据合并本身并不复杂把不同周期的文件按同样的变量结构用rbind或者bind_rows拼起来就行。麻烦的是两个问题变量名和编码的一致性以及权重的调整。先说变量一致性。NHANES不同周期的变量名在多数情况下是一致的但也不是没有例外。比如某些实验室指标早期用旧方法检测后来换了检测方法变量名可能不同单位也可能从mg/dL变成mmol/L。还有些问卷问题改变了措辞或选项变量的编码就从0/1变成了1/2/3。所以合并前一定要逐个周期查看代码本确认你要的变量在每个周期都存在而且定义一致。如果不一致就需要做映射或转换。这一步非常耗费时间但跳过去后面就是坑。再说权重调整。如果你合并了两个周期可以直接使用人口学文件里提供的4年权重WTMEC4YR。如果你合并了三个或更多周期官方给出的常用做法是新建一个权重变量把原始的2年权重除以合并的周期数。比如合并1999-2018共10个周期新权重就是WTMEC2YR / 10。为什么是除以10而不是乘以因为每个2年周期权重代表的是当年那个周期总人口的近似合并10个周期以后如果不调整权重总和相当于放了10倍的人口结构性放大。除以周期数后合并样本的加权总和才回到一个合理的人口量级。这个处理虽然不是唯一方案但操作简单、被广泛接受写文章时注明“combined weights were constructed by dividing the 2-year weights by the number of cycles”就行。我自己的习惯是合并前先做一个检查单独看2017-2018周期的加权平均年龄和官方发布的人口特征是否一致再和1999-2000周期对比确认权重使用正确。如果算出来的均值和官方报告差得太离谱八成是权重用错或变量单位有问题。5. 新手最容易踩的坑与排查技巧5.1 常见问题速查表这几年的指导经验里大家翻车的场景高度相似。我整理了一张速查表你如果卡住了可以直接对号入座。现象可能原因解决办法下载的XPT文件Excel打不开XPT是SAS传输格式不是Excel表格用R的read_xpt()或Python的read_sas()读取变量名和代码本对不上下载了错误的周期或错误的文件核对文件前缀和周期年份重新下载对应文件合并后样本量异常大或异常小不同周期的样本筛选条件不一致逐周期检查数据字典确认排除条件一致算出的患病率/均值和官方差异很大没有使用权重用survey包定义调查设计对象并加权分析同一变量在不同周期编码不一致各周期独立维护变量定义合并前建立变量映射表统一编码后再合并SEQN匹配后大量缺失两个文件中的SEQN不在同一周期确认匹配的两个文件都来自同一调查周期5.2 几个容易翻车的细节第一个细节是实验室文件的变量后缀。NHANES实验室数据经常为同一个检测项目提供多个版本比如原始值、排除异常的值、甚至按不同单位重编码的版本。变量名后面可能带L或M这样的后缀含义在代码本里有注释。很多人读进R以后用原始列名直接跑回归发现结果完全对不上就是因为没注意选的是哪个版本。第二个细节是缺失值的编码。NHANES的缺失不是只用一个NA表示代码本里常见编码有7、8、9分别对应“拒绝回答”“不知道”“不适用”。还有.D表示无法检测.R表示拒绝这些符号在读取时会被识别为缺失但如果你用SAS或其他软件直接导入某些软件可能把它们当成字符型数据处理导致数值变量变字符分析报错。读取后要检查列的属性必要时用haven包已经自动处理好的labelled类数据做转换。第三个细节是饮食数据的周期问题。NHANES的饮食回顾数据体积非常大包含几十个食物组分变量而且早期周期和近期的饮食数据组织方式有差别。如果你要做膳食成分或营养摄入研究建议先确认目标周期是否有饮食数据以及用什么调查工具采集的。我见过有同学想分析维生素D摄入下载了实验室文件里的血清维生素D又把饮食问卷里的维生素D摄入当成同一个东西其实一个代表体内水平一个代表膳食摄入两者概念完全不同。第四个细节是限定访问数据。有些变量比如更精细的地理信息、某些直接标识信息是限制访问的普通下载拿不到需要申请并获得批准。很多新手下到一半发现某个变量不在XPT文件里以为是下载错误实际是因为它属于受限数据。官方页面会明确标注“Restricted Data”字样。如果研究确实需要可以去走申请流程但不建议第一篇研究就依赖这些变量。第五个提醒是多周期合并时的变量标签。bind_rows合并多个周期的数据框时R会自动按列名匹配。如果两个周期的同一变量在SAS格式里标签不同合并后可能变成带差异的对象。我在实操中最稳妥的做法是先选取需要的变量子集统一列名再把每个周期转成普通data.frame最后合并。不要一上来就全变量合并那会让数据框庞大且脆弱。5.3 资料与学习路径建议如果你刚入门我最推荐的学习路径不是看论文而是先用一个具体的研究问题去“跑通全流程”。比如“美国成年人血清维生素D水平与代谢综合征的关系”这个方向非常适合做NHANES第一篇。你要做的步骤是第一步下载1999-2018所有周期的Demographics文件合并保留年龄、性别、种族、教育、收入、权重等变量。第二步下载对应的实验室变量文件找到血清25(OH)D的变量按SEQN合并。第三步定义代谢综合征变量可能需要腰围、血压、空腹血糖、甘油三酯、高密度脂蛋白这些分布在体检文件和化验文件里。第四步用survey包定义加权设计做描述统计再做加权多因素回归。这一套流程下来你基本就把NHANES的数据下载、变量定位、数据合并、加权分析全练了一遍。之后再换到骨质疏松、睡眠、抑郁或者其他方向只需要换变量而已。我个人在实际操作中还有一个习惯每下载一个数据文件都顺手把代码本的HTML另存一份到本地按周期和类别归档。这个习惯在写文章时回报特别大因为你在写方法学部分时要精确报告变量名、周期、检测方法没有代码本光靠记忆会崩溃。另一个建议是早期不要贪多不要试图一次下载几十个文件研究“全宇宙”先锁定一个临床问题控制变量数量跑出结果后你自然会对数据有什么、数据缺什么有感觉。NHANES看起来复杂但它的逻辑其实很统一样本是按周期组织的文件之间靠SEQN连接所有统计推断都要回到权重。把这三点刻在脑子里数据大门就算真正打开了。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表