数据获取与准备
数据下载
访问NHANES官方网站,根据研究目的,确定暴露指标、结局指标和协变量。
选择所需年份的调查周期,下载相关人口统计学、问卷、检查、实验室和饮食数据文件,同一调查周期文件下载至同一文件夹,路径最好不要出现中文。建议同时下载数据文档和代码本。
根据暴露指标、结局指标和协变量各个组成变量,整理所需NHANES数据库中的变量名在Excel表中,方便提取所需变量。
数据导入
▶ NHANES数据库下载的数据集为.XPT格式文件,同一周期数据基于SEQN进行合并。
读取示例:
library(foreign)demo.d <-read_xpt("demo_d.xpt")▶ 读取并合并同一周期所有数据集
▶ 设置工作路径至周期数据所在文件夹
setwd("NHANESDATA/2005")▶ 批量读取数据集,并根据SEQN进行合并
filename <-list.files()data05 <-read.xport(filename[1])for(i in2:length(filename)){ file<-read.xport(filename[i], na.strings ="NULL") data05 <-merge(data05, file, by ='SEQN', all=TRUE) # 修正变量名和参数} data05$cycle<-"2005-2006" 注意:有时候同一变量在不同周期的名字不一样,这个时候就需要改变变量名方便不同周期数据的合并。
names(data05)[names(data05)=="DID070"]<-"DIQ070"▶ 读取其他周期数据
###2007-2008-----setwd("NHANESDATA/2007")filename <-list.files()data07 <-read.xport(filename[1])for(i in2:length(filename)){ file<-read.xport(filename[i], na.strings ="NULL") data07 <-merge(data07, file, by ='SEQN', all=TRUE) # 修正变量名和参数} data07$cycle<-"2007-2008"names(data07)[names(data07)=="DID070"]<-"DIQ070"###2009-2010-----setwd("NHANESDATA/2009")filename <-list.files()data09 <-read.xport(filename[1])for(i in2:length(filename)){ file<-read.xport(filename[i], na.strings ="NULL") data09 <-merge(data09, file, by ='SEQN', all=TRUE) # 修正变量名和参数} data09$cycle<-"2009-2010"#2011-2012-----setwd("NHANESDATA/2011")filename <-list.files()data11 <-read.xport(filename[1])for(i in2:length(filename)){ file<-read.xport(filename[i], na.strings ="NULL") data11 <-merge(data11, file, by ='SEQN', all=TRUE) # 修正变量名和参数} data11$cycle<-"2011-2012"#2013-2014-----setwd("NHANESDATA/2013")filename <-list.files()data13 <-read.xport(filename[1])for(i in2:length(filename)){ file<-read.xport(filename[i], na.strings ="NULL") data13 <-merge(data13, file, by ='SEQN', all=TRUE) # 修正变量名和参数} data13$cycle<-"2013-2014"#2015-2016-----setwd("NHANESDATA/2015")filename <-list.files()data15 <-read.xport(filename[1])for(i in2:length(filename)){ file<-read.xport(filename[i], na.strings ="NULL") data15 <-merge(data15, file, by ='SEQN', all=TRUE) # 修正变量名和参数} data15$cycle<-"2015-2016"读取自定义的表格
▶ 内含所需变量在NHANES数据集中变量的code
Var <-readxl::read_xlsx("variable_new.xlsx",sheet=2)var$code提取所需变量data05_cbind<-cbind(data05[,grepl('SEQN|SDMVPSU|SDMVSTRA|^WT',colnames(data05))], data05[,colnames(data05) %in%var$code])data07_cbind<-cbind(data07[,grepl('SEQN|SDMVPSU|SDMVSTRA|^WT',colnames(data07))], data07[,colnames(data07)%in%var$code])data09_cbind<-cbind(data09[,grepl('SEQN|SDMVPSU|SDMVSTRA|^WT',colnames(data09))], data09[,colnames(data09)%in%var$code])data11_cbind<-cbind(data11[,grepl('SEQN|SDMVPSU|SDMVSTRA|^WT',colnames(data11))], data11[,colnames(data11)%in%var$code])data13_cbind<-cbind(data13[,grepl('SEQN|SDMVPSU|SDMVSTRA|^WT',colnames(data13))], data13[,colnames(data13)%in%var$code])data15_cbind<-cbind(data15[,grepl('SEQN|SDMVPSU|SDMVSTRA|^WT',colnames(data15))], data15[,colnames(data15)%in%var$code])合并数据
data<-bind_rows(data05_cbind,data07_cbind,data09_cbind,data11_cbind,data13_cbind,data15_cbind)变量清洗
▶ 已有变量重命名,如年龄、性别、种族等
names(data)[names(data)=="RIDAGEYR"]<-"AGE"names(data)[names(data)=="RIAGENDR"]<-"GENDER"names(data)[names(data)=="RIDRETH1"]<-"RACE"▶ 根据参考文献对变量进行定义和分类
如教育程度、吸烟等
#教育程度data$EDU<-ifelse(data$DMDEDUC2==1|data$DMDEDUC2==2,1, ifelse(data$DMDEDUC2==3,2, ifelse(data$DMDEDUC2==4|data$DMDEDUC2==5,3,NA)))data$EDU<-factor(data$EDU,labels=c("lesshigh","high","abovehigh"))table(data$EDU)##吸烟--------data$smoke<-ifelse(data$SMQ020==2,1, ifelse(data$SMQ020==1&data$SMQ040==3,2, ifelse(data$SMQ020==1&(data$SMQ040==1| data$SMQ040==2),3,NA)))table(data$smoke)▶ 根据参考文献对变量进行计算
#如计算SHRdata <-data %>%mutate( SHR =LBDGLUSI/(1.59*LBXGH-2.59))人群筛选
▶ 根据研究目的选择数据
#如本研究需要下面这些变量dat1<-select(data,SEQN,SDMVPSU,SDMVSTRA,WTMEC2YR,AGE,RACE,GENDER,EDU,smoke,BMI,SHR)▶ 根据研究目的选择人群
如年龄大于等于20岁,不存在BMI和SHR缺失的变量
data<-subset(data,AGE>=20)data<-data[!is.na(data$BMI)&!is.na(data$SHR),]▶ 根据研究需求对缺失数据进行插补
使用mice包进行多重插补,以随机森林方法为例
library(mice)dat<-mice(data, #数据集 method ="rf", #采用随机森林插补 m=5, # 5次插补 printFlag =FALSE, #不显示历史记录 seed=1234)





评论列表