NHANES数据库数据下载

article/2025/9/27 2:37:31

今天跟大家分享一下如何用R包nhanesA下载NHANES数据

以一个简单的研究目的为例:使用NHANES数据库中的数据构建一个舒张压的预测模型。

根据该研究目的,整理纳入分析的周期和变量:

①研究周期:2013-2014年;

②因变量:舒张压;

③自变量:性别、年龄、种族、婚姻状态、收缩压、吸烟和饮酒;

④抽样调查相关信息:weights、strata、psu(这部分数据比较特殊,至于为什么要下载这些数据,下一篇推文跟大家介绍权重的时候再详细说)。


目录

 0、NHANES数据库数据存储结构

1、 下载与加载包 

2、查询指定年份和指定分类中的表格

3、 查找表格中包含的字段

4、下载数据

5、选择相应变量

6、翻译分类变量

 7、下载EXAM分类中的数据

8、下载存放表格未知的变量

 9、 连表


0、NHANES数据库数据存储结构

NHANES数据库的数据主要分为五个公开数据类别和一个受限访问数据,其中五个公开数据类别分别为:

  • DEMO:人口统计学

  • DIET: 饮食

  • EXAM: 检查  

  • LAB: 实验室指标

  • Q: 问卷调查

为了方便大家理解,我们绘制了一张NHANES数据存储结构脑图

图片

1、 下载与加载包 

install.packages("nhanesA")
install.packages("knitr")
install.packages("tidyverse")
install.packages("plyr")
library(nhanesA)
library(knitr)
library(tidyverse)
library(plyr)

2、查询指定年份和指定分类中的表格

 nhanesTables()方法可查看5个分类中各有哪些表格,以2013-2014年的人口统计学资料为例:

# data_group=DEMO/DIET/EXAM/LAB/Q, year写入一个周期中的奇数年份即可
nhanesTables(data_group = 'DEMO', year = 2013)

图片

 

可以看到2013年的人口统计学资料表叫做DEMO_H,其中H代表2013年的索引,若查询的是2015年的人口统计学资料,便是DEMO_I

3、 查找表格中包含的字段

我们知道了2013年的人口统计学资料表叫做DEMO_H后,可以用以下代码查询该表格中包含了哪些字段,以及每个字段的描述

kable(nhanesTableVars(data_group = 'DEMO', nh_table = 'DEMO_H', namesonly = FALSE))

 

图片

 我们用同样的方式观察一下血压所在表BPX_H中相关字段与描述

kable(nhanesTableVars(data_group = 'EXAM', nh_table = 'BPX_H', namesonly = FALSE))

 如果想要对表和字段有更深的了解,我们可以用以下代码,跳转到NHANES官网,查看表和字段的说明

browseNHANES(data_group = 'EXAM', nh_table = 'BPX_H')

图片

4、下载数据

nhanes()方法可直接在R中下载指定表格(这里以人口统计学数据为例

demo <- nhanes('DEMO_H')

 下载时如果出错,多重试几次,如果重试多次还是下载不了,也可以把官方的XPT文件下载到本地,然后用以下代码加载(这里以2013-2014的DEMO_H为例)

图片

library(haven)
demo <- read_xpt(file ='DEMO_H.xpt')

5、选择相应变量

下载完成后,我们根据研究目的选择变量。本案例需要的性别、年龄、种族、婚姻状态以及weights、strata、psu都是在人口统计资料中,用以下代码从demo中选择这些变量

demo1 <- demo %>% select(SEQN, # 序列号
RIAGENDR, # 性别
RIDAGEYR, # 年龄
RIDRETH3, # 种族
DMDMARTL, # 婚姻状况
WTINT2YR,WTMEC2YR, # 权重
SDMVPSU, # psu
SDMVSTRA) # strata

图片

6、翻译分类变量

直接下载下来的分类变量是以1、2等数字表示,如上图中的性别和种族等,用以下代码,将数字翻译成其所代表的含义

demo_vars <- names(demo1)
demo2 <- nhanesTranslate('DEMO_H', demo_vars, data=demo1)

在翻译过程中,可能会出现如下图所示警告,这是由于有些字段不是分类变量,不需要翻译,所以我们可以忽略这个警告

图片

 最后翻译完成的数据,如下图所示

图片

 7、下载EXAM分类中的数据 

 其中收缩压和舒张压数据位于BPX_H表格中

bpx <- nhanes('BPX_H')
bpx1 <- bpx %>% select(SEQN, # 序列号
BPXDI1, # 舒张压
BPXSY1) # 收缩压

8、下载存放表格未知的变量

对于一些不知道在哪个表格里的变量,可以在官网进行关键词搜索,链接如下

https://wwwn.cdc.gov/nchs/nhanes/search/default.aspx

以吸烟数据为例

图片

可以看到有很多不同的数据集都包含了吸烟信息

图片

然后我们根据描述,选取适合我们研究目的的变量,我们这里选择SMQ040: "你现在是否吸烟?"(也可以通过查看详细描述后再选择更加适合自己研究目的的变量)

图片

 进入2013-2014 Questionnaire页面后,我们会看到Q分类下所有的表格,再找到我们所需要的SMQ040字段所在的表SMQ_H,点击SMQ_H DOC可以查看该表格以及表中字段的具体信息

图片

图片

查到吸烟数据对应的表格和字段后,用以下代码下载表格并选取字段

smq <-  nhanes('SMQ_H')
smq1 <- smq %>% select(SEQN, # 序列号
SMQ040) # 你现在吸烟吗?# 用同样的方式查询并下载饮酒数据
alq <- nhanes('ALQ_H')
alq1 <- alq %>% select(SEQN, # 序列号
ALQ130) # 过去12个月每天饮酒量

 9、 连表

此时我们有了以下4个表

  • 人口统计学资料表:demo2

  • 血压数据表:bpx1

  • 吸烟数据表:smq1

  • 饮酒数据表:alq1

根据序列号‘SEQN’将4个表连接成一个表,用来进行后续的分析(SEQN是NHANES数据库中被调查者的唯一标识)

# 方式1:逐张连表
data <- demo2 %>% full_join(bpx1, by = 'SEQN') %>% full_join(alq1, by = 'SEQN')
# 方式2:全部连表
data <- join_all(list(demo2, bpx1, alq1, smq1), by = 'SEQN', type = 'full')

 至此生成的data就是研究目的所需要的所有数据了

需要注意的是由于NHANES中数据抽样方法的复杂性,这份数据不能够直接利用传统的统计方法进行分析。至于如何正确分析,我们将在后续的推文中跟大家介绍!


 


http://chatgpt.dhexx.cn/article/dTpmEK07.shtml

相关文章

常用数据下载网站汇总

AI最重要的几大要素&#xff1a;数据、算法、算力。其中最基础也是很重要的一个内容就是数据&#xff0c;一个数据的好坏往往决定了你的模型的性能、效果、泛化能力。但是准备、完善、标注数据的过程往往是耗时耗力&#xff0c;所以如何知道更多的经典数据集&#xff0c;能够快…

SRA数据下载方法总结

SRA数据常用的下载方法 研究生了&#xff0c;对以往的知识进行一个复习和总结吧。 SRA数据库存储了现在主要高通量测序平台的原始测序数据和和比对信息&#xff0c;包括了SRA、EBI、DDBJ、JGI等数据库的信息。&#xff08;这里分享一个小的知识点&#xff0c;现在可以不只依赖…

maxcompute-入门-数据下载

maxcompute数据下载的三种方式 maxcoumpute下载数据有三种方式&#xff1a; 1、直接通过dataworks云端下载&#xff0c;但是这个只能下载小于1万行的数据&#xff1b; 2、通过odpscmd客户端下载&#xff0c;有两种方式&#xff1a;分区下载只能下一天数据&#xff1b;或者先运行…

IBM Websphere MQ 基础4:Channel通道与MQ间消息传输

概念 WebSphere MQ uses two different types of channels: A message channel, which is a unidirectional communications link between two queue managers. WebSphere MQ uses message channels to transfer messages between the queue managers. To send messages in b…

MQ - 如何保证消息不丢失?处理重复消息?消息堆积处理?

什么是消息队列 在百度百科中&#xff0c;消息队列是这么解释的&#xff1a;“消息队列”是在消息的传输过程中保存消息的容器。 消息队列全称为英文 Message Queue 简称&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法。MQ 是消费-生产者模型的一个典型的代表…

IBM MQ通道常用知识列举(一)

MQ的几个基本组件&#xff1a; 1. 什么是通道 通道是分布式队列管理器在IBM MQ MQI 客户端和IBM MQ服务器之间或两个IBM MQ服务器之间使用的逻辑通信链路。通道用于将消息从一个队列管理器移动到另一个队列管理器。 2, 启动通道 对发送方、服务器和请求方通道使用 MQSC 命令…

微服务 消息中间件MQ

微服务 消息中间件MQ 1. MQ的定义2. MQ的作用3. MQ的特点4. MQ消费方式5. 常用MQ对比分析 1. MQ的定义 MQ就是消息中间件。面向消息的中间件&#xff08;message-oriented middleware&#xff09;MOM能够很好的解决以上问题。是指利用高效可靠的消息传递机制与平台无关的数据交…

MQ消息队列

MQ MQ全称Message Queue(消息队列)&#xff0c; 实在消息传输过程中保存消息的容器。多用于分布式系统之间进行通信两种 通信方式&#xff1a; MQ优势 消息到达MQ后直接给出响应&#xff0c;然后服务去消费相应的消息&#xff0c;用户体验极好 应用解耦&#xff1a;提高系…

IBMMQ linux版命令创建队列管理器、队列、通道、window连接(六)

1. 队列、通道介绍 1.1 本地队列 本地队列又分为普通本地队列和传输队列&#xff0c;普通本地队列是应用程序通过API对其进行读写操作的队列&#xff1b;传输队列可以理解为存储-转发队列&#xff0c;比如&#xff1a;我们将某个消 息交给MQ系统发送到远程主机&#xff0c;而此…

IBM MQ 通道

一&#xff0c;定义 通道是分布式队列管理器在IBM MQ MQI 客户端和IBM MQ服务器之间或两个IBM MQ服务器之间使用的逻辑通信链接。 通道是提供从一个队列管理器到另一个队列管理器的通信路径的对象。通道在分布式队列中用于将消息从一个队列管理器移动到另一个队列管理器&#x…

MQ135

这里写自定义目录标题 以MQ135为例 原文链接 首先声明&#xff0c;公式不是官方给定的&#xff0c;而且有很多的局限性。 这篇文章是个人对MQ系列传感器电压与浓度转换的公式进行一个探索。 以MQ135为例 在氨气曲线上采点&#xff0c;得 x&#xff08;ppm&#xff09;[10,2…

MQ简介以及架构图

一、什么是MQ Message Query&#xff08;MQ&#xff09;&#xff0c;消息队列中间件&#xff0c;很多初学者认为&#xff0c;MQ通过消息的发送和接受来实现程序的异步和解耦&#xff0c;mq主要用于异步操作&#xff0c;这个不是mq的真正目的&#xff0c;只不过是mq的应用&…

IBMMQ java远程访问(四)

当应用程序和MQ不在同一台主机上的时候&#xff0c;我们将要通过通道去访问&#xff1b; 1.创建队列管理器时勾选创建服务器链接通道&#xff1b; 2.创建一个本地队列 命名为Q1 3.创建通道 右击通道->新建->服务器链接通道 命名为SERVERQM2 4.代码示例调用 package com.i…

MQ理论介绍与主流MQ对比

1、什么是MQ? MQ&#xff08;Message Queue&#xff09;消息队列&#xff0c;是基础数据结构中“先进先出”的一种数据结构。指把要传输的数据&#xff08;消息&#xff09;放在队列中&#xff0c;用队列机制来实现消息传递——生产者产生消息并把消息放入队列&#xff0c;然…

什么是MQ

MQ概述 MQ全称 Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进 行通信。 分布式系统之间进行通信&#xff1a; 远程调用&#xff1a;各系统间直接通过远程调用的方式&#xff1b; 借助第三方完成系统…

MQ的概念和RabbitMQ知识点(无代码)

目录 1. MQ的基本概念 1.1 MQ概述 1.2 MQ的优势 1. 应用解耦 2. 异步提速 3. 削峰填谷 1.3 MQ的劣势以及可能引发的问题 1.4 常见的MQ产品 2. RabbitMQ的知识点 2.1 RabbitMQ的工作模式 1. 简单模式 2. 工作队列模式 Work Queue 3. 发布订阅模式 Publish/subscri…

MQ简介

一、何为MQ&#xff1f; MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息&#xff08;针对应用程序的数据&#xff09;来通信&#xff0c;而无需专用连接来链接它们。消息传递指的是程序之间通…

【MQ基本概念 MQ的工作原理】

一、 MQ 基本概念 1 、 MQ 概述 MQ 全称 Message Queue &#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存 消息的容器。多用于分布式系统之间进 行通信。 小结 MQ &#xff0c;消息 队列&#xff0c;存储消息的中间件 分布式系统通信两种方式&…

mq的基本介绍和基本用法

一 、什么是MQ&#xff0c;有什么用 MQ 是message queue ,消息队列&#xff0c;也叫消息中间件&#xff0c;遵守JMS&#xff08;java message service&#xff09;规范的一种软件。(同时还有另一个叫AMQP的应用层协议&#xff0c;语言无关性不受产品 语言等限制&#xff0c;r…

MQ(Message Queue)简介

一、何为MQ&#xff1f; MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息&#xff08;针对应用程序的数据&#xff09;来通信&#xff0c;而无需专用连接来链接它们。消息传递指的是程序之间通…