gradual_z: Gradual WHO-to-CDC Transition Z-Scores

View source: R/grad_Z.R

gradual_zR Documentation

Gradual WHO-to-CDC Transition Z-Scores

Description

Computes a smooth, gradually transitioning z-score for weight, height/length, and body mass index (BMI) that blends World Health Organization (WHO) and Centers for Disease Control and Prevention (CDC) growth reference z-scores across early childhood. These gradual z-scores use WHO z-scores up to 730 days (2.0 y) of age, CDC z-scores are used from 1826 days (5.0 y) of age onward, and a weighted average of the CDC and WHO z-scores between ages 2 and 5 years.

Gradual z-scores avoid the abrupt jump produced by switching directly from WHO to CDC references at age 2 years as recommended by CDC. For example, under an abrupt switch, a girl weighing 9.9 kg would be at the 10th percentile (WHO) the day before her second birthday and at the 2nd percentile (CDC) the following day; gradual_z avoids this discontinuity.

Usage

gradual_z(data,
         agedays = agedays,
         whowtz  = who_waz,
         cdcwtz  = waz,
         whohtz  = who_lhaz,
         cdchtz  = haz,
         whobmiz = who_bmiz,
         cdcbmiz = bmiz)

Arguments

data

A data.frame, data.table, or tibble containing, at minimum, the age column and at least one complete WHO/CDC z-score column pair. The same class is returned. Not every z-score pair is required – see Value.

agedays

Column for age in days. Note that all arguments can be either unquoted or quoted.

whowtz

WHO weight-for-age z-score.

cdcwtz

CDC weight-for-age z-score.

whohtz

WHO length/height-for-age z-score.

cdchtz

CDC height-for-age z-score.

whobmiz

WHO BMI-for-age z-score.

cdcbmiz

CDC BMI-for-age z-score.

Details

Naming the arguments rather than relying on position is recommended. However, if the input was created using cdc_z and who_z, the function can be called as gradual_z(data). Argument values can be quoted or unquoted.

For each row, age in days determines which of three regions applies:

  • agedays \le 730 (through 2 years): the WHO z-score is used directly.

  • 730 < agedays < 1826 (2 to 5 years): a weighted average of the WHO and CDC z-scores is used, with weights that shift linearly with age so the blended value equals the WHO z-score at 730 days and the CDC z-score at 1826 days.

  • agedays \ge 1826 (5 years and beyond): the CDC z-score is used directly.

This produces a transition that is continuous at both boundaries, avoiding the discontinuity that would result from switching abruptly from WHO to CDC references at a single cutoff age. Note that if data already contains grad_waz, grad_haz, or grad_bmiz, the column is overwritten and a warning() is issued.

For ages between 2 and 5 years, the gradual z-score is a weighted average of the WHO and CDC z-scores:

Z_{gradual} = \frac{Z_{WHO} \times (5 - \mathrm{ageyears}) + Z_{CDC} \times (\mathrm{ageyears} - 2)}{3}

It should be noted that gradual z-scores from 2 through 5 years of age are not directly comparable to those based on other reference data, and researchers may need sensitivity analyses to facilitate comparison with other studies.

Further, because of the change in recumbent length to standing height at age 2.0 years, a discontinuity at this age will be present for grad_haz and grad_bmiz.

Value

An object of the same class as data (data.frame, data.table, or tibble), containing all columns of data, plus:

grad_waz

Gradual (blended) weight-for-age z-score. Added only if both whowtz and cdcwtz are found in data.

grad_haz

Gradual (blended) height/length-for-age z-score. Added only if both whohtz and cdchtz are found in data.

grad_bmiz

Gradual (blended) BMI-for-age z-score. Added only if both whobmiz and cdcbmiz are found in data.

Each of the three gradual measures is checked independently. If neither column of a pair is found, that measure is skipped with an informational message(). If only one column of a pair is found, that measure is skipped with a warning() instead. If no complete pair is found, a warning() is issued.

In the output, each measure's columns are grouped together in the order WHO, CDC, and gradual (e.g. who_waz, waz, grad_waz), for weight, then height, then BMI; any other input columns (including agedays) come first.

Author(s)

David Freedman DavidSFreedman@gmail.com

References

Daymont C, Hwang W, Paul IM, Shur N, Freedman DS (2025). "Creation and Evaluation of New Growth Charts With a Gradual Transition From WHO to CDC Values." Pediatrics, 156(3), e2025070697. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1542/peds.2025-070697")}

See Also

The original growth charts, tables, and R/Stata code are available at https://github.com/carriedaymont/gradual-who-cdc.

Examples

library(data.table)
dt <- data.table(
  agedays  = c(730, 1096, 1461, 1826), # 2, 3, 4, and 5 years of age
  who_waz  = c(0.9, 0.7, 0.6, 0.4),
  waz      = c(0.7, 0.5, 0.3, 0.3),
  who_lhaz = c(-0.2, 0.1, 0.2, 0.1),
  haz      = c(-0.3, 0.0, 0.1, 0.2),
  who_bmiz = c(1.0, 0.9, 0.8, 0.7),
  bmiz     = c(0.1, 0.5, 0.2, 0.2)
)
result <- gradual_z(dt, agedays, who_waz, waz, who_lhaz, haz, who_bmiz, bmiz)
result[, ageyears:= round(agedays/365.25,2)]
result

gradual_z(dt) # because column names match defaults

cdcanthro documentation built on Oct. 31, 2026, 1:07 a.m.