1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

从小就胖的人瘦下来的可能性大么?

本帖由 漂亮的石头2021-04-08 发布。版面名称:知乎日报

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    486,293
    赞:
    46
    [​IMG] KellyWeaver,公共卫生 / 营养流行病学 阅读原文

    太长不看版总结:可能性还挺不小的,从 CHNS 的数据来看,大概能有四成吧~


    题主,你不是唯一一个对这个问题的答案感兴趣的人。

    之前我给一家科普媒体写约稿的时候,就想找到“有多少小胖子在长大之后会瘦下来”的数据。

    当时,我在论文数据库里找来找去,始终没有找到中国人群的数据,最后只能暂时以一篇美国人群中做的研究[1]作为支撑——而那篇研究中报道的表格,经过简易变换之后,可以算出,小时候胖过的美国孩子,88% 的人都一路胖到了成年。

    [​IMG]
    美国人群中的研究结果。这个表格,如果将 100 to 119 和≥120 的数据合并、将 30-39 和≥40 的数据合并得话,就能够算出:88% 的 BMI p95 大于 100 的儿童期肥胖者,都一直胖到了成年。

    算完之后,我体感觉得:这也太夸张了吧??感觉中国好像没有这么严重吧?

    为了以防我的体感有问题,我把这个比例拿去问了其他朋友,结果大家的一致反应都是:“88% 都从小胖到大?真的太高了,说有一半人我还信。”

    正好,我是学流行病学的,我这门专业平时做的事情,就是在人群数据的基础上做各种研究,检查各种关联。鉴于也确实找不着基于中国人群的研究结论,那干脆我自己用公开数据做一个简单的数据分析来回答一下题主这个问题好惹!

    一些必要的定义

    找数据之前,我们先来拆解一下题主这个问题。

    “从小就胖的人瘦下来的可能性大么”,这个问题里,有三个关键点:“从小就胖的人”、“(长大后)瘦下来”、“可能性”。

    • 怎么才算“长大后瘦下来”?

    对于中国人群,“胖”的医学定义是:BMI 大于等于 28[2]。(BMI:体重除以身高的平方)

    鉴于题主说自己 BMI 25 仍然觉得自己胖,那么我觉得,题主所说的“胖”,其实也包含了医学上的“超重”,也就是 BMI 大于等于 24[2]。

    所以,接下来的分析里,我将会把“长大后瘦下来”,定义为“成年后 BMI 一直小于 24”。

    • “从小就胖的人”是什么人?

    “从小就胖”,这个词有两个部分:“从小”和“胖”。

    关于儿童青少年的超重肥胖怎么判断,我国卫健委发布的标准[3]是这样的:

    [​IMG]

    这个标准只给出了 6~18 岁的超重肥胖判断标准,所以我们后续的分析就从 6 岁起算吧,问题也不是很大,差不多能做。

    鉴于题主认为超重也算胖,那么这里就把“从小就胖”定义为:6~17 岁期间,BMI 曾处于超重或肥胖的区间的人。

    由于很多小孩在进入青春期的时候会“抽条”,因此在后续分析的时候,这里会把“从小就胖的人”分成两个层:6~11 岁的时候胖过,12~17 岁的时候胖过。选择 12 岁作为分野,是因为从一些中国学者的研究结果来看,我国儿童进入青春期(男孩初遗、女孩初潮)的平均年龄大概是 12 岁左右[4][5]。

    • “可能性”是什么?

    严格来说,算出一个基于个体的“题主到底能不能瘦下来”的准确的概率,是不太可能的。但是,我们可以通过观察很多很多中国孩子们的生长发育轨迹,来做一个表,看看:小时候胖过的那些孩子,长大之后有多大比例瘦下来了。

    通过这个基于统计的比例,算是能够给题主一个大概的基于数据的“感觉”。

    如果有数据支撑得话,就至少比身边王姨张妈家孩子之类的的一两个个例要好,也比我们模糊的“体感”要好。

    用什么数据?

    “6-17 岁的时候胖过,18 岁以后不再胖”,这看似轻描淡写的一句话,其实要求的是:要跟踪一个孩子长达最多 12 年,甚至以上。

    同时,因为我们想要一个比“个例”更有说服力的答案,所以一两个例子是不行的,我们要很多很多例子,最好是来自全国各地的。这就需要一个有全国代表性的人群抽样。

    上哪儿去找人这么闲得慌,会全国代表性地抽样,然后跟踪很多很多孩子长达十几年呢?

    还真有这样的人,那就是我们中国疾病预防控制中心营养与健康所的科学家们!

    中疾控营养所的科学家们,有一个到今年为止已经进行了 30 多年的、涉及接近三万人的长期跟踪研究:中国健康与营养调查(China Health and Nutrition Survey, CHNS)[6]。

    这个调查的抽样,是一个有全国代表性的多层次抽样,抽样具体到以家户为单位,然后调查者会对这个家里面的所有人进行调查。于是,有些家户当中有小孩的,也会被顺便调查和测量到。

    我们要做的,就是从 CHNS 的数据集中,把那些被从小随访到大的孩子们找出来,然后看看:小时候胖过的那些孩子,长大之后有多少瘦下来了。

    数据开搞!

    根据前面的定义,我们需要一个人的以下信息:

    • 暴露(自变量)1:6-11 岁时是否胖过
    • 暴露(自变量)2:12-18 岁时是否胖过
    • 结局(因变量):18 岁以后是否胖过

    要创建这些变量,显然,首先,需要有年龄的信息。然后,由于不同年龄的孩子是否算“胖”(超重)的定义还是按照年龄和性别分层的,所以我们还需要性别、身高、体重的信息。

    由于 CHNS 的出生日期、身高体重性别之类的变量是分散在不同的数据集里,所以我们需要使用 R 语言做一点点数据清洗和合并的工作:

    # read the datasetsmaster=read.csv('mast_pub_12.csv')master$IDind=as.character(master$Idind)# convert the IDs into character() type to make ease for viewingmaster_short=master[,c('IDind','GENDER','WEST_DOB_Y')]pexam=read.csv('pexam.csv')pexam$IDind=as.character(pexam$IDind)# merge the datasetsmain=cbind(pexam,matrix(nrow=dim(pexam)[1],ncol=2))names(main)[(dim(pexam)[2]+1):(dim(pexam)[2]+2)]=names(master_short)[2:3]for(iin1:dim(pexam)[1]){main[i,(dim(pexam)[2]+1):(dim(pexam)[2]+2)]=master_short[master_short$IDind==pexam$IDind,2:3]}length(unique(main$IDind))# remove observations without complete information (age, weight or height)main$age=main$WAVE-main$WEST_DOB_Ymain2=main[!is.na(main$GENDER)&!is.na(main$age)&!is.na(main$WEIGHT)&!is.na(main$HEIGHT),]

    然后,CHNS 调查中,有一些受调查者是没有小时候的跟踪数据的,或者虽然有小时候的数据,却没有长大了的数据。

    这部分人的数据,因为只有 x 没有 y,或者只有 y 没有 x,是无法提供有效信息的,需要把他们从数据集里去掉。

    于是,通过以下代码,只留下成年前后都至少有一次身高体重随访数据的人:

    # create marker variables in main2main2$has_x=main2$age<18&main2$age>=6main2$has_xy=main2$age>=18&main2$IDind%in%main2$IDind[main2$has_x]# extract info of all eligible subjectselig_ids=unique(main2$IDind[main2$has_xy])elig_data=main2[main2$IDind%in%elig_ids&main2$age>=6,]

    然后,有了原始的身高体重数据之后,我们还需要写一个函数,根据前面那张不同年龄儿童青少年的超重肥胖切点表格,判断一下每个人在每次随访的时候是不是超重肥胖的:

    # construct new variableselig_data$isfemale=factor(elig_data$GENDER-1)elig_data$BMI=elig_data$WEIGHT/(elig_data$HEIGHT^2)*10000## function for judging if a subject is overweight or obeseowob_criteria=read.csv('cut_points_for_childhood_obesity.csv')is_owob=function(age,isfemale,BMI){isfemale=as.numeric(isfemale)-1if(age>=18){cutpoints=c(24,28)}else{cutpoints=owob_criteria[owob_criteria$age==age,c(2+2*isfemale,3+2*isfemale)]}if(!is.na(BMI)){status='normal'if(BMI>cutpoints[1]){status='overweight'}if(BMI>cutpoints[2]){status='obese'}}else{status=NA}return(status)}## apply the functionfor(iin1:length(elig_data$IDind)){elig_data$is_owob=is_owob(elig_data$age,elig_data$isfemale,elig_data$BMI)}

    最后,为了能够画出一个交叉对照的“小时候胖的人长大了之后是否瘦下来”的表格,我们是需要一个每个人一行的数据集的;而现在我们的数据集,是同一个人不同年份的随访都堆叠在一起。

    [​IMG]
    “long format dataset”,不知道这个中文叫啥……

    所以,我们还需要再加一点点工作,把前面做好的那种纵向堆叠的数据集改一下格式。

    # construct new trunk datasetd_wt=data.frame(elig_ids)names(d_wt)[1]='IDind'# create new marker variables in individual-based dataset## overweight and obesityfor(iin1:length(d_wt$IDind)){dataind=elig_data[elig_data$IDind==d_wt$IDind,]### ever owob during [6,12)yd_wt$childhood_owob=NAif('normal'%in%dataind$is_owob[dataind$age<12]){d_wt$childhood_owob=0}if('obese'%in%dataind$is_owob[dataind$age<12]|'overweight'%in%dataind$is_owob[dataind$age<12]){d_wt$childhood_owob=1}### ever owob during [12,18)yd_wt$adol_owob=NAif('normal'%in%dataind$is_owob[dataind$age>=12&dataind$age<18]){d_wt$adol_owob=0}if('obese'%in%dataind$is_owob[dataind$age>=12&dataind$age<18]|'overweight'%in%dataind$is_owob[dataind$age>=12&dataind$age<18]){d_wt$adol_owob=1}### ever owob after 18yd_wt$adult_owob=NAif('normal'%in%dataind$is_owob[dataind$age>=18]){d_wt$adult_owob=0}if('obese'%in%dataind$is_owob[dataind$age>=18]|'overweight'%in%dataind$is_owob[dataind$age>=18]){d_wt$adult_owob=1}}d_wt$childhood_owob=factor(d_wt$childhood_owob,levels=c(0,1),labels=c('No','Yes'))d_wt$adol_owob=factor(d_wt$adol_owob,levels=c(0,1),labels=c('No','Yes'))d_wt$adult_owob=factor(d_wt$adult_owob,levels=c(0,1),labels=c('No','Yes'))d_wt=left_join(d_wt,master_short)d_wt=left_join(d_wt,unique(elig_data[,c('IDind','baseline_year')]))

    改好的数据集如下:

    [​IMG]
    前面筛过了一遍,到这还是有 NA,是因为这个人 6-11 岁或 12-17 岁期间的随访当中有一个不完整。后续的分析会分层分别分析,只要儿童期或者青春期有一个有数据,就可以作为这个层里面的有效样本点。

    然后,再把上面这种横向的格式所包含的数据统计出来:

    table1=cbind(data.frame(table(d_wt$childhood_owob,d_wt$adult_owob)),rep('childhood',4))table2=cbind(data.frame(table(d_wt$adol_owob,d_wt$adult_owob)),rep('adolescence',4))names(table1)=c('owob','adult_owob','freq','time')names(table2)=c('owob','adult_owob','freq','time')test=rbind(table1,table2)test$time=factor(test$time,levels=c('childhood','adolescence'))time_labs=c('12~17 岁时胖过','6~11 岁时胖过')names(time_labs)=c('adolescence','childhood')isfemale_labs=c('男性','女性')names(isfemale_labs)=c('','')breaks=c(0,0.2,0.4,0.6,0.8,1)ggplot(data=test,mapping=aes(x=owob,y=freq,fill=adult_owob))+geom_bar(position='fill',stat='identity')+scale_y_continuous(breaks=breaks,labels=scales::percent(breaks))+facet_grid(.~time,labeller=labeller(time=time_labs))+scale_fill_manual('成年后还胖',values=c("#0084ff","#bbbbbb"))+scale_color_manual('成年后还胖',values=c("#0084ff","#bbbbbb"))+theme(panel.background=element_rect(fill='#f6f6f6'))+labs(x='',y='占比')ggsave(paste(getwd(),'/plots/barplot.png',sep=''),width=4.5,height=4.5)

    最后,经过这么多行代码的努力,我们终于得到了这样一张图:

    [​IMG]

    这张图所体现的,是 CHNS 数据集从 1989 到 2015 年期间收集的全国九省市所有受调查者中,既拥有 6~17 岁期间至少一次身高体重数据、也拥有 18 岁及以后至少一次身高体重数据的所有 2831 名符合条件的受调查者里,6~11 岁的时候曾超重肥胖过、或者 12~17 岁的时候曾超重肥胖过,然后到了成年还接着超重肥胖的比例。

    这么长一段,说人话就是,在这 2831 名全国各地的孩子中:那些儿童期的时候胖过的,长大之后十个有六个都瘦下来了;即使是那些青春期的时候还胖过的,长大之后十个里也都有四个瘦下来了。

    事实上,题主虽然匿名了,但是从说话的方式和烦恼的程度来看,我猜可能是女孩子吧?

    如果我们把前面这两千多人的 BMI 变化轨迹按照性别分类画出来……

    [​IMG]
    图中黑色虚线是超重 BMI 的判定线,虚线以上代表此时体重超重 / 肥胖

    然后仔细观察,就会发现……

    小时候超重的那些女生(18 岁之前 BMI 曾在黑色虚线以上的人,用红圈圈出),有大概一半都是灰色线,也就是成年后不再超重。

    [​IMG]

    也就是说:请你看看,不只是前面那个很抽象的柱状图所体现的那样——而是,真的真的有这么多人,和你一样经历过胖胖的童年,然后在成年的时候瘦下来了!

    所以,回答题主的问题:从小就胖的人,瘦下来的可能性大么?从 CHNS 数据集里跟踪的这些孩子们的情况来看,虽然瘦下去的人不占多数,但比例也不低,能有大概四成左右呢!千万不要气馁呀题主!你可以的!加油鸭!

    阅读原文
     
正在加载...