今天跟大家分享一下如何用R包nhanesA下载NHANES数据
以一个简单的研究目的为例:使用NHANES数据库中的数据构建一个舒张压的预测模型。
根据该研究目的,整理纳入分析的周期和变量:
①研究周期:2013-2014年;
②因变量:舒张压;
③自变量:性别、年龄、种族、婚姻状态、收缩压、吸烟和饮酒;
④抽样调查相关信息:weights、strata、psu(这部分数据比较特殊,至于为什么要下载这些数据,下一篇推文跟大家介绍权重的时候再详细说)。
目录
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中数据抽样方法的复杂性,这份数据不能够直接利用传统的统计方法进行分析。至于如何正确分析,我们将在后续的推文中跟大家介绍!