前一篇介绍了NHANES数据库的加权及数据的下载NHANSE数据库的介绍及使用(一)_Christina-CSDN博客,这一篇主要介绍数据库如何导入软件进行下一步计算合并。

例一:

以NHANSE数据库的文章为例(Brody DJ, Pratt LA, Hughes J. Prevalence of depression among adults aged 20 and over: United States, 2013-2016. NCHS Data Brief, no 303. Hyattsville, MD: National Center for Health Statistics. 2018.)

1.加载安装包

library(dplyr)
library(survey)

2.下载数据

此步骤可以在官网上下载,或使用软件下载。

# Download & Read SAS Transport Files
# Demographic (DEMO)
download.file("https://wwwn.cdc.gov/nchs/nhanes/2013-2014/DEMO_H.XPT", tf <- tempfile(), mode="wb")
DEMO_H <- foreign::read.xport(tf)[,c("SEQN","RIAGENDR","RIDAGEYR","SDMVSTRA","SDMVPSU","WTMEC2YR")]
download.file("https://wwwn.cdc.gov/nchs/nhanes/2015-2016/DEMO_I.XPT", tf <- tempfile(), mode="wb")
DEMO_I <- foreign::read.xport(tf)[,c("SEQN","RIAGENDR","RIDAGEYR","SDMVSTRA","SDMVPSU","WTMEC2YR")]# Mental Health - Depression Screener (DPQ)
download.file("http://wwwn.cdc.gov/nchs/nhanes/2013-2014/DPQ_H.XPT", tf <- tempfile(), mode="wb")
DPQ_H <- foreign::read.xport(tf)
download.file("http://wwwn.cdc.gov/nchs/nhanes/2015-2016/DPQ_I.XPT", tf <- tempfile(), mode="wb")
DPQ_I <- foreign::read.xport(tf)

3.合并数据

# Append Files
DEMO <- bind_rows(DEMO_H, DEMO_I)
DPQ <- bind_rows(DPQ_H, DPQ_I)# Merge DEMO and DPQ files and create derived variablesOne <- left_join(DEMO, DPQ, by="SEQN") %>%# Set 7=Refused and 9=Don't Know To Missing for variables DPQ010 thru DPQ090 ##mutate_at(vars(DPQ010:DPQ090), ~ifelse(. >=7, NA, .)) %>%mutate(. , # create indicator for overall summaryone = 1,# Create depression score as sum of variables DPQ010 -- DPQ090Depression.Score = rowSums(select(. , DPQ010:DPQ090)),# Create depression indicator as binary 0/100 variable. (is missing if Depression.Score is missing)Depression= ifelse(Depression.Score >=10, 100, 0), # Create factor variablesGender = factor(RIAGENDR, labels=c("Men", "Women")),Age.Group = cut(RIDAGEYR, breaks=c(-Inf,19,39,59,Inf),labels=c("Under 20", "20-39","40-59","60 and over")),# Generate 4-year MEC weight (Divide weight by 2 because we are appending 2 survey cycles)                                                             # Note: using the MEC Exam Weights (WTMEC2YR), per the analytic notes on the               #       Mental Health - Depression Screener (DPQ_H) documentation                          WTMEC4YR = WTMEC2YR/2 ,# Define indicator for analysis population of interest: adults aged 20 and over with a valid depression scoreinAnalysis= (RIDAGEYR >= 20 & !is.na(Depression.Score))) %>% # drop DPQ variablesselect(., -starts_with("DPQ"))

由于使用了两年的数据,因此weight需要计算,WTMEC4YR=WTMEC2YR

4.定义survey数据集

NHANES_all <- svydesign(data=One, id=~SDMVPSU, strata=~SDMVSTRA, weights=~WTMEC4YR, nest=TRUE)

选择子集

NHANES <- subset(NHANES_all, inAnalysis)

5.统计分析

计算加权均值及标准差,定义函数

getSummary <- function(varformula, byformula, design){# Get mean, stderr, and unweighted sample sizec <- svyby(varformula, byformula, design, unwtd.count ) p <- svyby(varformula, byformula, design, svymean ) outSum <- left_join(select(c,-se), p) outSum
}

计算抑郁分层的结果

getSummary(~Depression, ~one, NHANES)
#' By sex
getSummary(~Depression, ~Gender, NHANES)
#' By age
getSummary(~Depression, ~Age.Group, NHANES)
#' By sex and age
getSummary(~Depression, ~Gender + Age.Group, NHANES)

注意,在NHANSE数据库使用过程中,首先要定义survey数据集,再进行subset运算,  不能直接subset取子集计算,否则会导致有偏估计。

例二:以今年发表在EST上的文献为例

Exposure: chloroform (TCM); bromodichloromethane (BDCM); dibromochloromethane (DBCM); bromoform (TBM)

Outcome: thyroid function (FT4;FT3; TT4;TT3; TPOAb; TgAb)

Exclusion criterion: thyroid diseases; prescription medications, pregnant status, <20 years old

Covariates: demographic data; serum cotinine

Year: 2007-2008

1.数据下载

根据文献中的暴露变量及结局变量,协变量,下载相应数据集。

2.数据导入


setwd("C:\\Users\\18896\\Desktop\\NHANSE20211110\\example1")
library(foreign)DEMO_E <- read.xport("DEMO_E.XPT")
BMX_E<-read.xport("BMX_E.XPT")
MCQ_E <- read.xport("MCQ_E.XPT")
RHQ_E <- read.xport("RHQ_E.XPT")
RXQ_RX_E <- read.xport("RXQ_RX_E.XPT")
RXQ_RX_E<-subset(RXQ_RX_E,!duplicated(RXQ_RX_E$SEQN))THYROD_E <- read.xport("THYROD_E.XPT")
VOCMWB_E <- read.xport("VOCMWB_E.XPT")

3.数据合并

##数据库整合
##并集(Union)
data_E <- DEMO_E
data_E <- merge(data_E, MCQ_E, by = "SEQN", all = T)
data_E <- merge(data_E, BMX_E, by = "SEQN", all = T)
data_E <- merge(data_E, RHQ_E, by = "SEQN", all = T)
data_E <- merge(data_E, RXQ_RX_E, by = "SEQN", all = T)
data_E <- merge(data_E, THYROD_E, by = "SEQN", all = T)
data_E <- merge(data_E, VOCMWB_E, by = "SEQN", all = T)

SEQN为唯一ID识别码,注意merge时,使用all=T,否则会丢失样本。

4.数据重命名

在进行数据计算时,需要将我们选择的变量进行重新命名以更好识别

data_new <- plyr::rename(data_E,c(RIDAGEYR="age",DMDEDUC2="Education",RIDEXPRG="pregnant.status",RIAGENDR="Gender",RIDRETH1="race",BMXWT="weight",BMXHT="height",BMXBMI="BMI",LBXVBF="Bromoform",LBXVBM="Bromodichloromethane",LBXVCF="Chloroform",LBXVCM="Dibromochloromethane",LBXT3F="FT3",LBXT4F="FT4",LBXTT3="TT3",LBXTT4="TT4",LBXTPO="TPOAb",LBXATG="TgAb",RXDUSE="medication",MCQ160M="thyroid.deseases"))

5.数据加权


library(survey)
design <- svydesign(id=~SDMVPSU, strata=~SDMVSTRA, weights=~WTMEC2YR, nest=TRUE,data=data_new)design_new<-subset(design,SEQN%in%VOCMWB_E$SEQN & age>=20 & thyroid.deseases!=1 &!is.na(FT4) & !is.na(FT3) &!is.na(TT3) &!is.na(TT4) &!is.na(TPOAb) & !is.na(TgAb))data_2<-subset(data_new,SEQN%in%VOCMWB_E$SEQN & age>=20 & thyroid.deseases!=1 &!is.na(FT4) & !is.na(FT3) &!is.na(TT3) &!is.na(TT4) &!is.na(TPOAb) & !is.na(TgAb))

6.一般情况分析

计算了数据中的年龄及种族加权及未加权的均值或比例,可以看出加权及未加权结果有很大差异,对数据进行基线信息描述时,应该使用加权结果。

#unweighted age and se
mean(data_2$age,na.rm=T)
#49.54916# weighted age and se
svymean(~age, design_new, na.rm = TRUE)
#45.874#' Proportion of unweighted interview sample
data_2 %>% count(race) %>% mutate(prop= round(n / sum(n)*100, digits=1))#' Proportion of weighted interview sample
data_2 %>% count(race, wt=WTMEC2YR) %>%mutate(prop= round(n / sum(n)*100, digits=1))

具体在论文中呈现时,可以参考以下方式

7.svyglm分析

使用常规的glm和weighted glm会对结果进行有偏估计,应该在构建survey数据库的基础上,进行svyglm分析,以下是三个方法的比较。

#glm
Result2 <- glm(TT4~Bromoform+age+Gender+race+BMI+Education,family = gaussian(), data=data_2)
summary(Result2)#weighted glm
Result3 <- glm(TT4~Bromoform+age+Gender+race+BMI+Education,family = gaussian(), data=data_2,weights =WTMEC2YR )
summary(Result3)#survey-weighted glm
Result1 <- svyglm(TT4~Bromoform+age+Gender+race+BMI+Education,family = gaussian(), data=data_2,design=design_new)
summary(Result1)

ref:

Sun Y, Xia PF, Korevaar TI, Mustieles V, Zhang Y, Pan XF, Wang YX, Messerlian C. Relationship between Blood Trihalomethane Concentrations and Serum Thyroid Function Measures in US Adults. Environmental Science & Technology. 2021 Oct 7.

Brody DJ, Pratt LA, Hughes JP. Prevalence of depression among adults aged 20 and over: United States, 2013-2016.

Emecen-Huja P, Li HF, Ebersole JL, Lambert J, Bush H. Epidemiologic evaluation of Nhanes for environmental Factors and periodontal disease. Scientific reports. 2019 Jun 3;9(1):1-1.

NHANES数据库的介绍及使用(二)相关推荐

  1. NHANES数据库的介绍及使用(一)

    目录 一.数据库概况 数据类型 涵盖疾病类型 研究设计 二.加权 权重类别 权重选择 权重计算 三.数据下载 四.数据库应用 一.数据库概况 NHANES(National Health and Nu ...

  2. 图数据库JanusGraph介绍及使用(一):简介

    图数据库JanusGraph介绍及使用(一):简介 作者:家辉,日期:2018-07-01 CSDN博客: http://blog.csdn.net/gobitan 说明:这是图数据库JanusGra ...

  3. 图数据库JanusGraph介绍及使用(三):安装与初步使用

    图数据库JanusGraph介绍及使用(三):安装与初步使用 作者:家辉,日期:2018-07-05 CSDN博客: http://blog.csdn.net/gobitan 说明:这是图数据库Jan ...

  4. SpringBoot个人博客—Mysql数据库搭建介绍(二)

    数据库搭建介绍 项目首页地址:https://blog.csdn.net/weixin_45019350/article/details/108869025 后台数据库表结构相对比较简单,每一个功能模 ...

  5. Tempdb数据库详细介绍

    Tempdb数据库详细介绍 一.Tempdb简介 tempdb是SQLServer的系统数据库一直都是SQLServer的重要组成部分,用来存储临时对象.可以简单理解tempdb是SQLServer的 ...

  6. 数据库的介绍、分类、作用和特点

    1. 数据库的介绍 数据库就是存储和管理数据的仓库,数据按照一定的格式进行存储,用户可以对数据库中的数据进行增加.修改.删除.查询等操作. [在数据库中输错,按住"ctrl+c"重 ...

  7. java中删除sqlite数据库语句_sqlite数据库的介绍与java操作sqlite的实例讲解

    sqlite数据库的介绍与java操作sqlite的实例讲解 发布时间:2020-10-03 05:40:34 来源:脚本之家 阅读:92 作者:Lee_Tech sqlite是啥? 1.一种轻型数据 ...

  8. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软 ...

  9. (数据库系统概论|王珊)第十章数据库恢复技术-第一、二节:事务的基本概念和数据库恢复概述

    文章目录 一:事务的基本概念 (1)事务 A:定义 B:事务的定义 (2)事务的四个特性--ACID A:数据库的ACID ①:原子性(Atomicity) ②:一致性(Consistency) ③: ...

  10. TiDB-新一代数据库入门介绍

    由于目前的项目计划把MySQL换成TiDB,所以特意来了解下TiDB.其实也不能说换,由于TiDB和MySQL几乎完全兼容,所以我们的程序可以没有任何改动就完成数据库从MySQL到TiDB的转换.接下 ...

最新文章

  1. 人工智能激活千亿级交通安全市场
  2. Linux内核2.6的进程调度
  3. Eclipse Class Decompiler——Java反编译插件(转)
  4. 2008秋-计算机软件基础- 实验一 参考源程序
  5. c语言中指针数组赋值字符串,C语言—用结构体指针给数组赋值(结构体指针指向字符串,给字符串赋值)...
  6. bootstrap学习(三)表单
  7. Java 11功能– Java飞行记录器
  8. JAVA50道经典编程题
  9. 原来喔趣是吾以前的同事开发的
  10. 操作系统MSXML组件版本过低,导致启动失败的原因
  11. [强化学习-3] Devil 课程第二章解析+ 学生马尔可夫决策过程代码
  12. 【趣文】我是一个Java class
  13. 4种方法实现文字竖向排列
  14. 部署SpringBoot+SpringCloud+Vue项目——半途而废版
  15. java多线程百米赛跑_多线程-百米赛跑
  16. 论文精读--Autoformer
  17. 安卓逆向 -- Frida环境搭建(HOOK实例)
  18. docker可视化管理工具
  19. 【4.7】使用Spring session实现Session共享
  20. 计算机无法找到网络打印机,电脑无法找到打印机怎么解决

热门文章

  1. 信息安全密码学:古典密码
  2. 超炫150套❤vue+Echarts❤ 大屏可视化数据平台实战项目分享 (附源码)
  3. 《重说中国近代史》—张鸣—(3)两个世界最初的碰撞(续)
  4. 解决微信公众平台图片不可引用
  5. BlueCoat ProxySG Attack Detection功能
  6. 十个精妙绝伦的SQL语句,说尽SQL精华
  7. 最新电影《D战》幕后真实案件:暗夜黑客组织被端
  8. windows无法上网:代理服务器出现问题或地址有误
  9. python scrapy第一弹--爬取好看的堆糖头像
  10. 计算机专业法语怎么读,计算机专业法语词汇