Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Help expressing child BMI relative to the 95th percentile (bmipct95 or bmidif95)

    Hello!

    I'm hoping someone can help me figure out how to express child BMI relative to the 95th percentile in Stata. After reading the below information, from the cdc.gov website, it looks like there's a SAS program to calculate bmipct95 and bmidif95.

    https://www.cdc.gov/nccdphp/dnpao/gr...ources/sas.htm

    The drawbacks of expressing very high BMIs as z-scores (or percentiles) have been emphasized by several investigators [8-12]. The SAS code creates 2 variables, bmipct95 and bmidif95, that express a child's BMI relative to the 95th percentile either as a percentage (bmipct95) or as a difference (bmidif95). These 2 variables are likely to be better measures of adiposity among children who have very high BMIs than are z-scores and percentiles. Bmipct95 can range from below 50 to over 220, and a child with a bmipct95 of 140 would have a BMI that is equal to 1.4 times the 95th percentile. Bmidif95 is the difference (in kg/m2) between the child's BMI and the CDC 95th percentile for that sex/age. For example, the CDC 95th percentile for a 20-month-old boy is 18.0 kg/m2; if this boy had a BMI of 21.3kg/m2, his bmidif95 would be 3.3 kg/m2 (21.3 - 18.0) and his bmipct95 would be 118% (100 × 21.3/18.0). A negative value for bmidif95 (or a bmipct95 < 100) would indicate that the child does not have obesity. In addition to these 2 variables, the SAS program also outputs the CDC 50th (bmi50) and 95th (bmi95) percentiles for the child's sex and age.

    If a large proportion of children in an analysis have severe obesity (bmipct95 ≥ 120), you should consider expressing all BMIs relative to the 95th percentile and using bmipct95 or bmidif95 in analyses. The limitations of expressing extremely high BMIs as z-scores apply to both cross-sectional and longitudinal studies, including those that evaluate obesity interventions.
    I'm wondering if anyone knows of a Stata command that can do the same thing (i.e., use child BMI, age, and gender to produce a variable containing BMI relative to the 95th percentile, or even just produce the specific 95th percentile for any age, gender combination [within the CDC growth chart ranges, of course]).

    I am aware of the zanthro command to calculate bmi z-scores, and I know how to convert those z-scores into BMI percentiles. But I don't know how to yield the 95th percentile for any particular age, gender combination.

    If someone could help me use zanthro (or something similar) as a basis to produce the 95th percentile for any given age-gender, I could do the rest of the calculations to get bmipct95 and/or bmidif95.

    Thank you for any assistance or thoughts!
    Last edited by Evan Sommer; 06 Mar 2018, 18:46.

  • #2
    Full disclosure, I'm not a coding expert (hence my posting for help!), but I'm not afraid to dig through code and try to make sense of it.

    After looking at the zanthro .ado file (_gzanthro.ado), I think I've isolated the line that generates the z-score (in my case bmi z-score):

    Code:
            gen `type' `g' = (((`measure'/`m')^`l')-1)/(`l'*`s') if `t'>=`minyr'-0.00000001 & `t'<=`maxyr'+0.00000001 & `touse'
            replace `g'=. if `measure'<=0
            if "`nocutoff'"=="" {
                replace `g'=. if abs(`g')>=5 & `g'<.
            }
    I don't understand 100% of what it's doing, but I think I get the gist. If I'm on the right track, I'd think the code to generate the specific measurement that represents the 95th percentile (again in my case the BMI that is the 95th percentile) for a given age and gender would be something like the following:

    Code:
    gen `type' `measure95' = `m'*((1+`l'*`s'*1.645)^(1/`l')) if `t'>=`minyr'-0.00000001 & `t'<=`maxyr'+0.00000001 & `touse'
    I used the formula laid out here: https://www.cdc.gov/growthcharts/per...data_files.htm

    I'm not at all sure about this though. I completely made up the `measure95' term (i.e., it's not defined or referenced anywhere else in the .ado file), so I'm guessing more code would be needed to get this to run. I'm a bit afraid to go mucking around in my perfectly usable .ado file to see what effect something like this might have. If anyone is more comfortable with coding .ado files, do you think you could try incorporating this into the .ado file to see if it works?

    I guess I could go bug someone who has SAS to run the program for me, but I'd like to be able to do this in Stata, and I'd suspect others might find it useful as well!


    Comment


    • #3
      Just to follow up on this topic (in case anyone else is looking for something similar). I corresponded with Suzanna Vidmar (one of the creators of the zanthro command), and she was very interested in this issue. She told me that she had just met with Tim Cole (a co-creator of zanthro) to try and address this, but they think that there may be a lot of work on this subject underway that could render this approach out-of-date. Therefore, they wanted to hold off on making changes right now. Once a clear position paper on the topic of BMI and alternative metrics has been produced, they will try to update zanthro to reflect those recommendations.

      Thanks!

      Comment


      • #4
        Just to return to this,

        I imagine you could create percentiles as follows:


        Code:
         
         gen p=normal(zscore)

        And then do the heavy lifting of the above manually?

        Unless there was any update on the above from the authors of zanthro?


        All the best,

        John

        Comment

        Working...
        X