评论

NHANES小课|我用nhanesA包获取NHANES数据库

大家好,我是王路情博士,一个坚持早上5点起床和使用R语言的数据科研工作者。

我已经完成了NHANES小课的前三课,感谢大家的关注、喜欢和支持。

通过这个NHANES小课,我认识了新朋友,学习了新知识,发现了新问题,得到了新启示。

感恩遇见,共赢未来。

“我用nhanesA包获取NHANES数据库”是我的NHANES小课第四课。

前面三课,告诉了大家,我是用R语言和RStudio做NHANES数据库的分析和挖掘工作

关于

1)R语言是什么?

2)R语言软件如何安装?

3)RStudio又是什么?

4)RStudio软件又如何安装和使用?

5)R语言如何学习和进阶?

等等

若是有很多朋友,在这方面有问题,我就会考虑写一个《R语言小课》合集。

这一课,我分享获取NHANES数据库的方法。

关于如何获取NHANES数据库,一路走来,我尝试过多种方式,逐一说明如下:

方式一:直接从官网下载数据集到本地,再通过R语言导入数据集处理

方式二:通过编写代码线上下载和整理(有可能因为网络问题,不稳定)

方式三:把别人下载好的数据集做分类管理,相当于在本地构建了一个NHANES数据库,后续导入就好

方式四:尝试用一些NHANES数据库相关的包,加载包后,使用包里面函数获取NHANES数据库。

以上方式尝试过后, 我喜欢用nhanesA包做NHANES数据库获取的工作

换句话说,在NHANES数据库分析和挖掘项目,肯定能够找到用了 nhanesA包的R语言脚本。

敲黑板了,请朋友们重视:

1)nhanesA包管理和常用函数

2)使用nhanesA包整理一份数据表的元数据(数据的数据或者里面字段的含义说明表)

3)nhanesA包获取感兴趣的数据集

4)nhanesA包的查找功能介绍

一、nhanesA包管理

我使用 pacman包做包管理工作,包括所需要包的安装和加载,一条语句就搞定。

library( 'pacman')

p_load( 'nhanesA') # 获取NHANES数据库包

p_load( 'tidyverse') # 数据科学工具集

p_load( 'survey') # 权重分析工具集

p_load( 'openxlsx') # Excel读写工具集

我用 R语言的帮助文档,指导我高效学习 nhanesA包的学习和应用

# 查看nhanesA的帮助文档

help( package='nhanesA')

如下图:

红色方框圈出来的内容,是我重点学习的内容。

包括:

1)包的实用手册和相关文档(里面提供了两份手册,值得深入学习和实践一把)

2)获取NHANES数据库数据表结果,并返回数据框格式的nahnes函数

3)用于查询相关系列的函数集(nhanesSearch/nhanesSearchTableNames/nhanesSearchVarName)

4)查看数据表和变量集信息函数(nhanesTables/nhanesTableVars)

关于如何学习和使用这些函数,我的学习方法。

1)首先,阅读包的实用手册和参考文档

2)其次,对于感兴趣的函数,点击进入,做函数的学习,从 函数的定义、参数设置、返回结果和应用示例,这些方面学习和练习

nhanesTables函数为例

进入这个函数后,如下图

对于这个图,我按着标记,逐一解读和学习。

1)函数功能描述,返回数据模块下的数据表情况

2)函数的定义,包括函数名和参数,以及参数的默认值设置

3)参数说明,比方说,第一个参数,data_group,对于NHANES可以获取的5个公开数据模块,分别是人口统计学、饮食、检查、实验室、问卷,在nhanesA包依次实用( DEMO、DIET、EXAM、LAB和Q)来表示。

4)函数的功能详细介绍

5)函数的返回值说明

6)函数使用是示例

依次类推,其它的函数也可以按着这个方法学习和使用。

二、nhanesA包使用

2.1 构建数据表元数据

所谓元数据,是数据的数据。

或者说

就是对数据模块下各个表的介绍数据,以及对各个表下各个字段含义详细的数据。

我这里,以 2013年这个周期为例

通过nhanesA包,整理出两份元数据表,并且保存为xlxs格式。

一份是,数据块各个数据表的元数据

代码片段

data_group<-c( 'DEMO', 'DIET', 'EXAM', 'LAB', 'Q')

table_df<-list

for( sub_dataindata_group) {

print( sub_data)

# 第一步:获取各个数据模块对应的表

tables<-nhanesTables( sub_data, 2013)

names( tables) <-c( "TableName", "TableDeion")

tables[[ "DataGroup"]] <-sub_data

table_df[[ sub_data]] <-tables

}

combined_df<-do.call( rbind, table_df)

dim( combined_df)

# 数据模块的表数据保存

# 保存为Excel文件

write.xlsx( combined_df, './output/1data_group_tables.xlsx')

五大数据模块,包括 183张表

这份元数据,部分结果如下图:

另一份是,数据块各个数据表下的各个数据字段的元数据

代码片段

data_group<-c( 'DEMO', 'DIET', 'EXAM', 'LAB', 'Q')

vars_df<-list

for( sub_dataindata_group) {

print( sub_data)

# 第一步:获取各个数据模块对应的表

tables<-nhanesTables( sub_data, 2013)

names( tables) <-c( "TableName", "TableDeion")

table_name<-tables$TableName

for( sub_tableintable_name) {

# 第二步:获取各个数据表对应的变量信息

print( sub_table)

vars<-nhanesTableVars( sub_data, sub_table)

names( vars) <-c( "VariableName", "VariableDeion")

print( length( vars$VariableName))

name_tmp<-paste( sub_data, '_', sub_table)

vars[[ "DataGroupTable"]] <-name_tmp

vars_df[[ name_tmp]] <-vars

}

}

combined_vars_df<-do.call( rbind, vars_df)

dim( combined_vars_df)

# 数据模块的表的变量名数据保存

# 保存为Excel文件

write.xlsx( combined_vars_df, './output/2data_group_tables_vars.xlsx')

五大数据模块,183张表,包括7291个变量集,各个表之间通过变量: SEQN(Respondent sequence number)做关联,实现纵向扩展,形成一张大宽表,可以使用 tidyverse包里面的 full_join函数做全连接操作,得到完整数据后,在按着科研选题,做纳排处理。

这份元数据,部分结果如下图:

这两份Excel数据,若是需要的朋友,可以添加我的微信获取。

2.2 获取感兴趣数据集

确定科研选题后,先选择一个周期的数据,使用 nhanes函数获取感兴趣的数据集。

我的工作流,按着如下步骤:

第一步:确定科研选题。

关于科研选题这块,可以读我的NHANES小课第三课

第二步:选定一个周期数据

第三步:使用nhanes函数获取与课题相关的数据表数据

第四步:变量取值的映射处理

第五步:选择合适的变量集

第六步:各个数据表的拼接,全连接操作

第七步:在其他周期里面,继续执行2~6步

第八步:横向拼接数据集

第三步和第四步,使用nhanesA包的nhanes函数、nhanesTranslate函数

第五步到第六步,使用tidyverse包的select函数、full_join函数等其它函数集。

截止到现在,科研选题的数据准备工作,已经完成,后续工作就是按着科研任务,依次做

1)数据纳排;

2)数据处理;

3)数据分析;

4)数据结果解读和整理。

nhanes函数获取数据,举例说明。

下载和获取DEMO_D和BMX_D,它是NHANES2005-2006这个周期的数据集,分别来自人口统计数据模块和检查数据模块(EXAM)。

并且对两个数据集做全连接,选择感兴趣的列,形成新的数据子集,做数据检视操作。

代码片段

demo_d<-nhanes( 'DEMO_D')

bmx_d<-nhanes( 'BMX_D')

# 全连接拼接

demo_bmx<-demo_d%>%

full_join( bmx_d)

# 选择感兴趣的列

demo_bmx1<-demo_bmx%>%

select(

SEQN, RIAGENDR, BMXHT, BMXWT, BMXLEG, BMXCALF, BMXTHICR

)

# 数据检视

demo_bmx1%>%

slice_head( n=10)

数据结果

使用nhanes函数获取数据时,默认把一些类型变量的字段映射成变量codebook里面的取值。若是需要自定义和灵活选择所需变量做映射,可以按着下面步骤进行:

1)nhanes获取数据时,参数translate 由默认值TRUE设定为FALSE

2)选取表格里面需要映射的变量集

3)使用nhanesTranslate对指定的变量集做映射处理。

代码片段

bpx_d<-nhanes( 'BPX_D', translate=FALSE)

head( bpx_d[, 6:11])

bpx_d_vars<-names( bpx_d)

bpx_d<-nhanesTranslate( 'BPX_D', bpx_d_vars, data=bpx_d)

head( bpx_d[, 6:11])

映射前的数据结果

映射后的数据结果

有时候,当我们的科研选题需要从同一个周期下很多表里面获取数据时。

方式一,就是把同一周期下目标表,先确定好,然后使用上面的方法逐一下载和保存这些包的数据。

方式二,使用 lapply函数,批量下载目标的数据集,并且把它存到一个列表数据结构,然后把它转换为数据框

在这里,我演示下方式二的实现。

# 使用lapply函数

exam2007names <- nhanesTables('EXAM', 2007, namesonly=TRUE)

# 需要用到BMX_E/BPX_E两张表里面的数据

target_tables <- c("BMX_E", "BPX_E")

exam2007tables <- lapply(target_tables, nhanes)

length(exam2007tables)

names(exam2007tables) <- target_tables

# 列表数据结构转换为数据框

bmx_e <- exam2007tables$BMX_E

bpx_e <- exam2007tables$BPX_E

dim(bmx_e)

dim(bpx_e)

# 数据拼接

exam_2007_df <- bmx_e %>%

full_join(bpx_e)

dim(exam_2007_df)

2.3 查找功能使用

我在NHANES小课第二课,“带你全面认识NHANES数据库 ”,介绍了官网的查找功能以及如何使用,并且以久坐这个关键词做了示范。

我们通过NHANES官网的查询功能,基于关键词获得目标表后,然后就可以使用前面获取NHANES数据库的方法,获取和整理数据集就好了。

在具体操作中,建议大家,针对科研选题,整理 一份数据清单

这个数据清单,包括:

1)科研选题标题

2)研究对象

3)自变量和因变量

4)协变量

5)数据模块

6)数据目标表

7)数据周期

带着这份数据清单,开展后续的工作。

nhanesA包,也提供了3个与查找相关的函数,常用的函数是nhanesSearch。

这个函数的工作原理:

使用者输入搜索词,与 变量完整描述进行匹配,并检索匹配变量列表。

搜索的设置逻辑:

1)可以提供匹配搜索词(变量描述必须包含其中一个词)

2)排他性搜索词(变量描述不得包含任何排他性词)

3)搜索可以限制在特定的调查范围以及特定的数据组

关于这个函数的使用代码示例

bladder<-nhanesSearch( "bladder",

ystart=2001,

ystop=2002,

nchar=50)

# 或者其他用法

nhanesSearch( "urin",

ignore.case=TRUE,

ystart=2001,

ystop=2002,

namesonly=TRUE)

nhanesSearch( "urin",

exclude_terms="during",

ignore.case=TRUE,

ystart=2001,

ystop=2002,

namesonly=TRUE)

nhanesSearch( c( "urin", "Urin"),

exclude_terms=c( "During", "eaten during", "do during"),

data_group=c( 'EXAM', 'LAB'),

ignore.case=TRUE,

ystart=2001,

ystop=2002,

namesonly=TRUE

)

nhanesSearch( c( "tooth", "teeth"),

ystart=2001,

ystop=2002,

ignore.case=TRUE)

nhanesSearch( "^Tooth",

ystart=2001,

ystop=2002)

我的一个小技巧,在做查询功能的时候, 先确定一个时间窗口,让检索更快,找到目标表后,再拓展。

总之, 我在做NHANES数据库分析和挖掘时,我用nhanesA包做数据获取工作

感谢这个包的作者们。

一方面,使用这些包的提供的函数集,另一方面,使用R语言其他知识和技能。两者结合起来,就可以用R语言有效地完成科研选题下NHANES数据库获取工作,为后续的数据整理和分析,做好了数据准备。

关于这一课的R语言知识和技能,你有任何问题,可以添加我的微信,讨论和交流。

若是你在使用代码的过程中,出现问题或者有新的想法,不知道如何编写代码,也可以联系我,大家讨论和交流。

群体的智慧,可以发挥1+1 >> 2的效果。

《NHAES小课》合集:

1NHANES小课|一起来挖NHANES数据库

2NHANES小课|带你全面认识NHANES数据库

3NHANES小课|NHANES数据库科研选题一二三

若是你有什么想和我说的,欢迎扫码添加我的微信,备注: NHANES。感恩遇见,共赢未来。

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()