暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

NHANES数据库系列教程(七)--几步学会回归

月明学习小铺 2021-07-21
9734



之前我们已经分享过Table 1的绘制,但对于一篇完整的文章来说,Table 1肯定是不够的。所以本次主要分享的内容关注多元回归,包括多元线性回归、多元logistic回归以及多元cox回归。


多元线性回归和多元logistic回归以官方教程提供的数据和代码为参考,采用的dataset同为analysis_data,获取链接放在下面。


https://wwwn.cdc.gov/nchs/data/tutorials/analysis_data.sas7bdat



01 多元线性回归


以下为多元线性回归的SAS代码(加上变量赋值)和相应的结果图片。


我们的示例用HDL cholesterol(连续变量)作为因变量,年龄、性别、种族、吸烟、受教育程度、BMI作为自变量。


    data analysis_data_1;  
    set analysis_data;
    if ridstatr=2; *all mec exam data;


    /*set don't know and refused (7,9) to missing*/
    if dmdeduc>3 then dmdeduc=.;


    /*define smokers*/
    if smq020 eq 2 then smoker=1;
    else if smq020 eq 1 and smq040 eq 3 then smoker=2;
    else if smq020 eq 1 and smq040 in(1,2) then smoker=3;


    /*for input to SAS PROC SURVEYREG - recode gender so that men is the reference group*/
    if riagendr eq 1 then sex=2;
    else if riagendr eq 2 then sex=1;


    /*for input to SAS PROC SURVEYREG - recode race/ethnicity so that non-Hispanic white is the reference group*/
    ethn=ridreth1;
    if ridreth1 eq 3 then ethn=5;
    else if ridreth1 eq 4 then ethn=2;
    else if ridreth1 eq 2 then ethn=3;
    else if ridreth1 eq 5 then ethn=4;


    if 0 le bmxbmi lt 18.5 then bmicatf=1;
    else if 18.5 le bmxbmi lt 25 then bmicatf=4;
    else if 25 le bmxbmi lt 30 then bmicatf=2;
    else if bmxbmi ge 30 then bmicatf=3;


    /*create an indicator of hypertension based on blood pressure and medication;*/
    if (bpxsar >= 140 or bpxdar >= 90 or bpq050a = 1) then hyper = 1;
    else if (bpxsar ne . and bpxdar ne .) then hyper = 0;


    if (lbdhdl^=. and riagendr^=. and ridreth1^=. and smoker^=. and dmdeduc^=. and bmxbmi^=. and hyper^=.)and wtmec4yr>0
    and (ridageyr>=20) then eligible=1; else eligible=0;


    run;


      /*多元线性回归*/
      PROC SURVEYREG data=analysis_data_1 nomcar;
      STRATA sdmvstra;
      CLUSTER sdmvpsu;
      WEIGHT wtmec4yr;
      CLASS sex ethn smoker dmdeduc bmicatf;
      DOMAIN eligible;
      MODEL  lbdhdl= ridageyr sex ethn smoker dmdeduc bmicatf/CLPARM solution vadjust=none;
      run;



      多元线性回归结果


      大家应该已经发现,其实多元线性回归的程序基本和t检验一致,只是增加了自变量的数目。



      02 多元logistic回归


      以下为多元logistic回归的SAS代码和相应的结果图片。


      们的示例用是否患高血压(分类变量作为因变年龄、性别、种族、吸烟、受教育程度、BMI作为自变量


        /*多元logistic回归*/
        PROC SURVEYLOGISTIC data = analysis_data_1 nomcar;
        CLUSTER sdmvpsu;
        WEIGHT wtmec4yr;
        DOMAIN eligible;
        CLASS sex ethn smoker dmdeduc bmicatf/ref=first; /*以1组作为参照*/
        MODEL hyper (desc)=ridageyr sex ethn smoker dmdeduc bmicatf/clparm vadjust=none;
        run;



        多元logistic回归结果



        03 多元cox回归


        NDI(National Death Index)有给出可以公开使用的死亡数据,链接获取方式见文末。我们在这把analysis_data与相应周期(1999-2000、2001-2002)的死亡数据集链接,生成本次实例用到的新数据集analysis_mortdata。


        以下为多元cox回归的SAS代码和相应的结果图片。


        我们的示例用全因死亡作为因变量,年龄、性别、种族、吸烟、受教育程度、BMI作为自变量。


          data analysis_mortdata;
          merge Analysis_data_1 Mortality9902;
          by seqn;
          PERyear_EXM=PERMTH_EXM/12;
          /*全因死亡*/
          if MORTSTAT=1 then mort_all=1; else mort_all=0;
          /*死亡状态可获取*/
          if eligible=1 and ELIGSTAT=1 then eligible1=1;
          run;


          /*多元cox回归*/
          PROC SURVEYPHREG data = analysis_mortdata nomcar;
          STRATA sdmvstra;
          CLUSTER sdmvpsu;
          WEIGHT wtmec4yr;
          DOMAIN eligible1;
          CLASS sex ethn smoker dmdeduc bmicatf/ref=first; /*以1组作为参照*/
          model PERyear_EXM*mort_all(0)=ridageyr sex ethn smoker dmdeduc bmicatf/RL;
          run;



          多元cox回归结果


          在使用cox回归时还需注意的一点是我们在此处以及大部分NHANES发表文献中提到的都是cox比例风险模型。其中有一个重要的前提假设,就是等比例风险(表示某因素对生存的影响不随时间的变化而变化)。


          验证上述方法有好几种,我个人觉得比较好操作的方法是在模型中加入关注变量与时间的交互作用项,看交互项是否有统计学意义。我在下面也放出相应的SAS代码和结果图片供大家参考。


            data analysis_mortdata1;/*考虑到计算时间的问题,我们采用删除不符合标准人群来进行示范
            ,大家可以根据实际情况,如果可以采用domain语句,尽量还是用domain*/
            set analysis_mortdata;
            if eligible1=1;
            run;


            PROC SURVEYPHREG data = analysis_mortdata1 nomcar;
            STRATA sdmvstra;
            CLUSTER sdmvpsu;
            WEIGHT wtmec4yr;
            CLASS sex ethn smoker dmdeduc bmicatf/ref=first; /*以1组作为参照*/
            model PERyear_EXM*mort_all(0)=ridageyr sex ethn smoker dmdeduc bmicatf y/RL
            y=smoker*PERyear_EXM;/*y为关注变量(吸烟)与时间的交互项。y变量的生成放在model语句之后*/
            run;



            吸烟与时间交互项的P值为0.8849,无统计学意义



            04 一点总结


            考虑到不同朋友的关注重点不同,我就不统一放出结果解释了。


            总体而言,演示程序并不复杂,完成前期的赋值,之后带入模型即可。赋值部分程序包含了一些常见的分组,大家也可以参考。下周更新我们聊聊常见变量分组方法。


            NHANES虽然本身是一个横断面研究,但是通过链接到NDI给出的死亡数据,可以实现队列研究的研究设计。其中包含了从基线到出现结局的随访过程,符合队列研究的定义,这也是为什么在用NHANES发表文章中会出现cohort study表述的原因。


            In the present study, we used data from a nationally representative cohort to examine the associations of pyrethroid exposure, measured by the general urinary biomarker 3-PBA, with all-cause and cause-specific mortality in US adults.


            后台回复mortality可获取死亡数据网页链接。也帮自己整理的权重资料包打个小广告(内容一致,转发获取过的朋友就不用了哈),其中包括NHANES权重计算公式以及数据分析时常用到的网址。感兴趣的朋友可以把转发朋友圈或微信群的截图发到后台,我看到后会把资料链接单独发送。


            朋友们可以放心,我并没有设置新的小门槛,后台回复mortality直接获取死亡数据链接也是为了兑现不在教程关键位置设置门槛的承诺。


            祝好,周末愉快。最近感觉在琐碎的生活中找到了些许烟火气。



            05 参考内容


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

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

            冯国双老师的医学案例统计分析与SAS应用

            Bao W, Liu B, Simonsen DW, Lehmler HJ. Association Between Exposure to Pyrethroid Insecticides and Risk of All-Cause and Cause-Specific Mortality in the General US Adult Population. JAMA Intern Med. 2020;180(3):367-374.



            因为公众号注册较晚官方没有给出留言功能,我通过其他小程序开了留言,感兴趣的朋友可以留言。以后会不定期开哈~



            文章转载自月明学习小铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论