WHO coeficients for weight Z-score calculations

See https://www.cdc.gov/nchs/data/nhsr/nhsr063.pdf for a desciption on how calculations are made. However, the CDC has different coefficients.
health
child
Author

DS 150

Published

November 5, 2023

Data details

There are 1,800 rows and 6 columns. The data source1 is used to create our data that is stored in our pins table. You can access this pin from a connection to posit.byui.edu using hathawayj/weight_coef.

Variable description

  • agedays: Age of child in days
  • sex: The gender of the child
  • mean: The mean for a child at agedays
  • cv: The coefficient of variation for children at age in days
  • l: The box-cox transformation for children at age in days see documentation
  • sd: The standard deviation of weights for children at age age in days

Variable summary

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
agedays 0 1 449.50 259.88 0.00 224.75 449.50 674.25 899.00 ▇▇▇▇▇
mean 0 1 9.54 2.37 3.20 8.07 9.90 11.44 13.22 ▂▃▆▇▇
sd 0 1 1.13 0.27 0.46 0.93 1.15 1.35 1.59 ▂▅▇▇▇
cv 0 1 0.12 0.01 0.11 0.11 0.12 0.12 0.15 ▇▇▂▁▁
l 0 1 -0.06 0.17 -0.31 -0.24 -0.02 0.06 0.38 ▇▂▇▃▁

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
sex 0 1 4 6 0 2 0
Explore generating code using R
# both need to be installed
# remotes::install_github("bokeh/rbokeh")
# remotes::install_github("ki-tools/growthstandards")

pacman::p_load(tidyverse, fs, sf, arrow, googledrive, downloader, fs,
  glue, rvest, pins, connectapi, growthstandards)


weight_coef <- growthstandards::who_coefs$wtkg_agedays$Male$data %>%
  as_tibble() %>%
  filter(x < 900) %>%
  select(agedays = x, mean = m, cv = s, l = l) %>%
  mutate(sex = "Female") %>%
  bind_rows(
    growthstandards::who_coefs$wtkg_agedays$Female$data %>%
      as_tibble() %>%
      filter(x < 900) %>%
      select(agedays = x, mean = m, cv = s, l = l) %>%
      mutate(sex = "Male")
  ) %>%
  mutate(sd = mean * cv) %>%
  select(agedays, sex, mean, sd, cv, l)


board <- board_connect()
pin_write(board, weight_coef, type = "parquet", access_type = "all")

pin_name <- "weight_coef"
meta <- pin_meta(board, paste0("hathawayj/", pin_name))
client <- connect()
my_app <- content_item(client, meta$local$content_id)
set_vanity_url(my_app, paste0("data/", pin_name))

Access data

This data is available to all.

Direct Download: weight_coef.parquet

R and Python Download:

URL Connections:

For public data, any user can connect and read the data using pins::board_connect_url() in R.

library(pins)
url_data <- "https://posit.byui.edu/data/weight_coef/"
board_url <- board_connect_url(c("dat" = url_data))
dat <- pin_read(board_url, "dat")

Use this custom function in Python to have the data in a Pandas DataFrame.

import pandas as pd
import requests
from io import BytesIO

def read_url_pin(name):
  url = "https://posit.byui.edu/data/" + name + "/" + name + ".parquet"
  response = requests.get(url)
  if response.status_code == 200:
    parquet_content = BytesIO(response.content)
    pandas_dataframe = pd.read_parquet(parquet_content)
    return pandas_dataframe
  else:
    print(f"Failed to retrieve data. Status code: {response.status_code}")
    return None

# Example usage:
pandas_df = read_url_pin("weight_coef")

Authenticated Connection:

Our connect server is https://posit.byui.edu which you assign to your CONNECT_SERVER environment variable. You must create an API key and store it in your environment under CONNECT_API_KEY.

Read more about environment variables and the pins package to understand how these environment variables are stored and accessed in R and Python with pins.

library(pins)
board <- board_connect(auth = "auto")
dat <- pin_read(board, "hathawayj/weight_coef")
import os
from pins import board_rsconnect
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv('CONNECT_API_KEY')
SERVER = os.getenv('CONNECT_SERVER')

board = board_rsconnect(server_url=SERVER, api_key=API_KEY)
dat = board.pin_read("hathawayj/weight_coef")