NHANES小课|NHANES数据库权重必知一二三

NHANES2015-2016这个周期,在无加权分析和有加权分析下种族的占比情况,与美国实际人口数下种族占比情况对比,容易发现:

1)有加权分析的种族占比和美国实际人口的种族占比情况非常接近了,换句话说,通过加权分析,可以很好地代表美国实际人口数种族分布情况

2)无加权分析的种族占比情况和美国实际人口的种族占比情况有很大偏倚了,主要是因为对于某些种族群体采用了过度抽样导致而成的。

因此,对于在做NHANES课题的统计分析时,建议大家优先考虑加权后一系列统计分析,除非你选择的变量没有存在过度抽样问题或者你想做有无加权分析的结果对比分析,可以采用无加权分析。为了更加严谨、科学,建议优先考虑做好加权处理后一系列统计分析。

这也告诉我们了,NHANES数据库分析和挖掘中,权重的应用是非常重要的,用于解决因 复杂抽样而带来的有偏问题。

针对NHANES2015-2016这个周期,我用R语言来演示下无加权和有加权处理后,种族占比的情况。

R语言代码片段

#### 1 准备工作环境 ####

library( pacman)

p_load( 'nhanesA', 'survey', 'tidyverse', 'arsenal')

#### 2 数据获取 ####

# 1) 获取NHANES2015-2016周期的人口统计学数据集

demo_data<-nhanes( 'DEMO_I', translated=FALSE)

# 2)获取研究所需要的变量集

demo_data1<-demo_data%>%select(

SEQN, RIDRETH3, SDMVPSU, SDMVSTRA, WTINT2YR

)

# 3) 数据检视

demo_data1%>%

slice_head( n=10) %>%

View

#### 3 加权前后对比分析 ####

# 1) 展示无加权分析的结果

summary(

tableby(

~factor( RIDRETH3),

data= demo_data1

)

, text= TRUE

)

# 合并处理

# 3+7: Non-Hispanic White and others : 3 Non-Hispanic White(0.31) + 7 Other Race(0.05) ✅ 35.8

# 1+2: Hispanic:1 Mexican American(0.19) + 2 Other Hispanic(0.13) ✅ 32.4

# 拉丁裔,又译为“拉美裔,西班牙语裔,西语裔”,

# 美国拉丁裔全称西班牙裔和拉丁裔美国人(英语:Hispanic and Latino Americans),

# 以墨西哥裔美国人为主的族群.

# 重新编码处理

demo_data2<-demo_data1%>%

mutate(

new_reth= recode_factor(

RIDRETH3,

`1`= "Hispanic",

`2`= "Hispanic",

`3`= "Non-Hispanic White and others",

`4`= "Non-Hispanic Black",

`6`= "Non-Hispanic Asian",

`7`= "Non-Hispanic White and others"

)

)

# 再次复现不加权的种族占比分析

summary(

tableby(

~new_reth,

data= demo_data2

),

text= TRUE

)

# 输出结果

# | | Overall (N=9971) |

# |:--------------------------------|:----------------:|

# |new_reth | |

# |- Hispanic | 3229 (32.4%) |

# |- Non-Hispanic White and others | 3571 (35.8%) |

# |- Non-Hispanic Black | 2129 (21.4%) |

# |- Non-Hispanic Asian | 1042 (10.5%) |

# 加权后的种族占比分析

nhanes_design<-svydesign(

data= demo_data2,

ids= ~SDMVPSU,

strata= ~SDMVSTRA,

nest= TRUE,

weights= ~WTINT2YR

)

summary( nhanes_design)

svytable( ~new_reth, design=nhanes_design) %>%

as.data.frame%>%

mutate( prop=Freq/sum( Freq) *100) %>%

arrange( desc( prop))

# 输出结果

# new_reth Freq prop

以此为启示,感兴趣的伙伴,可以进一步去探索下,各大论文里面常用到的其它协变量,例如: 性别、学历等,对比分析加权前后的占比情况,以判断是否存在偏倚问题。

引入权重分析,除了很好地 解决抽样导致的偏倚问题,还可以巧妙地解决 预约样本由于各种因素无法响应调查而带来的问题,通过进一步修改权重的值,以解决这个环节流失部分带来的不严谨问题。

在整个调查的流程中,关于流失比例的变化,可以看下图。

在上面的例子中,所选样本包括 2015-2016 年的 15,327 名样本人。这些样本人中只有 9,971 人真正完成了入户访谈。 因此,34.9% 的抽样人员没有完成入户访谈,这就是访谈无回应。针对这种问题,需要通过权重调整技术来解决这个问题。换而言之,这个群体本来要来2个人,用2个人代表总体的10000人,权重是5000;结果因为访谈没有响应,只来了1个人,这个时候权重就要调整到10000了。

总之,我们在做NHANES数据库的统计分析时, 一定要掌握和用好权重的处理和基于权重处理后的相关分析。

第二个,权重是什么?

权重,反映一个人代表的群体数,或者这个人被抽取概率的倒数。

根据NAHNES数据多阶段复杂抽样后,按着独立条件分布,可以确定最后样本的发生概率,利用概率的倒数,计算这个权重。

计算公式如下:

小技巧提示:

对于年龄做分段的时候,建议参照这个逻辑分箱:

关键问题:

使用NHANES数据库做科研课题的时候,如何选择对的权重变量呢?

原则:你必须使用包含您想要纳入分析的所有变量的最小子群体的权重,简而言之,就是最小子集对应的权重。

通过对NHANES数据库的学习,我们可以发现,它包括3类权重,分别是: 访谈类权重、MEC类权重、特殊类权重。

如下图:

这些权重,分别对应的数据模块,说明如下:

1)访谈权重和MEC类权重,记录在人口统计学数据表里面,这个大家肯定很熟悉,前面的R语言代码片段,也用到了。

2) 特殊类权重,就是针对特定子集人群,如空腹检查、饮食和化合物检查,就需要查看具体的数据表文件了。

NHANES数据库官方文档

https://wwwn.cdc.gov/nchs/nhanes/tutorials/weighting.aspx

也做了示例说明,可以参阅:

示例3:空腹子样本权重(wtsaf4yr)

示例4:饮食模块的权重(wtdrd1)

第三个,多周期数据合并的权重如何加工处理?

按着NHANES官网关于权重的官方介绍。

通常,NHANES中任何两年数据周期都可以与相邻的两年数据周期做横向合并,从而可以基于思念或者更长时间的数据设计和构建数据分析文件。这就是大家在看NHANES数据库的SCI论文的时候,90%以上的论文都包括多个周期的数据合并。这是很有必要的。更多的数据,从而产生更精确、抽样误差更小的估计值,从而让后续的分析更可靠,结论更有价值。

但是,在组合数据周期时,需要注意以下几点,这些都非常重要。

1) 注意可能影响合并数据的样本设计变化

2)验证所合并年份手机的数据项在表述、方法和纳排方法是否有出入(例如符合条件的年龄范围)

3)选择适合合并数据集的权重

4)检查合并期间彼此没有的一些固有假设

总之,这些注意点,可以理解为,为了更加精准地做后续分析而要提前做好的数据质控。

上面的第3点,也就是我们接下来要重点解决的问题。

对于多周期合并后,新的权重如何构建以及逻辑是什么。

首先,我们要注意两个特殊的周期。

特殊周期的处理

1)一个是1999~2001

2)一个是2017~2020

上面周期,使用四年的权重

下面这个由于COVID-19疫情,2017-2020周期在2020年3月提前终止,总共持续了39个月,因此2017-2020.3共39个月,按照2年(24个月)为1个周期,则2017-2020.3占39/24= 1.625个周期

其次,正确认识和理解NHANES数据库官方文档提供的权重合并逻辑

NHANES数据库官方文档,关于多周期权重合并,提供了一份按着2个周期、3个周期、4个周期和5个周期的数据合并的权重衍生的逻辑,我这里直接截图如下:

1)2个周期,4年数据合并

2)3个周期,6年数据合并

3)4个周期,8年数据合并

4)5个周期,10年数据合并

在这里,我以 1999-2008、2009-2018为例,编写R语言代码,实现新的权重衍生 MEC10YR。

R代码片段

#### 1 准备工作环境 ####

library( pacman)

p_load( 'nhanesA', 'survey', 'tidyverse', 'arsenal')

#### 2 数据获取 ####

# 示例1:获取1999-2008年的数据集

# 数据表对应关系

# DEMO 1999-2000

# DEMO_B 2001-2002

# DEMO_C 2003_2004

# DEMO_D 2005_2006

# DEMO_E 2007_2008

# 第一步:数据获取

demo_tables<-c( "DEMO",

"DEMO_B",

"DEMO_C",

"DEMO_D",

"DEMO_E")

demo_list<-lapply( demo_tables, nhanes, translated=FALSE)

names( demo_list) <-demo_tables

DEMO<-demo_list$DEMO

DEMO_B<-demo_list$DEMO_B

DEMO_C<-demo_list$DEMO_C

DEMO_D<-demo_list$DEMO_D

DEMO_E<-demo_list$DEMO_E

# 第二步:根据权重加工逻辑,编写代码如下

nhanes_weight1<-dplyr::bind_rows(

list(

DEMO%>%select( SEQN, WTMEC4YR),

DEMO_B%>%select( SEQN, WTMEC4YR)

)

) %>%mutate(

MEC10YR= 2/5*WTMEC4YR

) %>%select(

SEQN, MEC10YR

)

nhanes_weight1%>%head%>%View

nhanes_weight2<-dplyr::bind_rows(

list(

DEMO_C%>%select( SEQN, WTMEC2YR),

DEMO_D%>%select( SEQN, WTMEC2YR),

DEMO_E%>%select( SEQN, WTMEC2YR)

)

) %>%mutate(

MEC10YR= 1/5*WTMEC2YR

) %>%select(

SEQN, MEC10YR

)

nhanes_weight2%>%head%>%View

# 权重合并

nhanes_weight<-dplyr::bind_rows(

list(

nhanes_weight1,

nhanes_weight2

)

)

nhanes_weight%>%head

# 输出结果

# SEQN MEC10YR

# 1 1 1782.483

# 2 2 6134.480

# 3 3 8503.387

# 4 4 1824.956

# 5 5 18394.387

# 6 6 7334.925

# 示例2:获取2009-2018年的数据集

# DEMO_F 2009_2010

# DEMO_G 2011_2012

# DEMO_H 2013_2014

# DEMO_I 2015_2016

# DEMO_J 2017_2018

demo_tables<-c(

"DEMO_F",

"DEMO_G",

"DEMO_H",

"DEMO_I",

"DEMO_J")

demo_list<-lapply( demo_tables, nhanes, translated=FALSE)

names( demo_list) <-demo_tables

DEMO_F<-demo_list$DEMO_F

DEMO_G<-demo_list$DEMO_G

DEMO_H<-demo_list$DEMO_H

DEMO_I<-demo_list$DEMO_I

DEMO_J<-demo_list$DEMO_J

# 权重加工和衍生

nhanes_weight<-dplyr::bind_rows(

list(

DEMO_F%>%select( SEQN, WTMEC2YR),

DEMO_G%>%select( SEQN, WTMEC2YR),

DEMO_H%>%select( SEQN, WTMEC2YR),

DEMO_I%>%select( SEQN, WTMEC2YR),

DEMO_J%>%select( SEQN, WTMEC2YR)

)

) %>%mutate(

MEC10YR= 1/5*WTMEC2YR

) %>%select(

SEQN, MEC10YR

)

nhanes_weight%>%head

# 输出结果

# SEQN MEC10YR

# 1 51624 16305.754

# 2 51625 11399.007

# 3 51626 2901.856

# 4 51627 2408.327

# 5 51628 4200.068

# 6 51629 4526.716

通过上面数据合并后,权重衍生逻辑,简要总结如下:

1)合并数据,若是没有包括特殊周期数, 合并的权重 = 选择的权重 / 周期数

2)合并数据,若是包括特殊周期数,合并的权重按着下面逻辑

第一步:选择对的权重变量

比方说,1999-2002,就选择4年权重WTMEC4YR;2017-2020,选择WTMECPRP;这两个特殊周期之外,选择WTMEC2YR

第二步:根据科研选择的合并的周期数据,按着第一步做拆分,并且形成得到新的变量集

举例说明:

若是研究1999-2020年数据合并

拆分为,

1)1999-2002,使用WTMEC4YR,占用了2个周期;

2)2003-2016,使用WTMEC2YR,数据合并后,形成新的WTMEC2YR_NEW = WEMEC2YR / 7,占用了7个周期;

3)2017-2020,使用WTMECPRP,占用了1.625个周期

第三步:根据第二步的周期情况,进一步调整,做 加权的权重调整,以获得最终的权重值

最终的权重值 = 2/(2+7+1.625) * WTMEC4YR + 7/(2+7+1.625) * WEMEC2YR_NEW + 1.625/(2+7+1.625) * WTMECPRP

在这里,附录一张表格,结合上面和内容和这个表格的总结,对于数据合并后,新的权重如何加工和生成,大家就不会在困惑了。

截止到这里,关于NHANES数据库的权重,必须知道的内容已经介绍完毕。

赠人玫瑰,手有余香。

《NHAES小课》合集:

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

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

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

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

5NHANES小课|我用tidyverse包做NHANES数据包整理工作

感恩遇见,共赢未来。 返回搜狐,查看更多