NAME
WHO::GrowthReference::Table - Lookup height/weight in the WHO growth chart (a.k.a. growth reference, growth standards)
VERSION
This document describes version 0.013 of WHO::GrowthReference::Table (from Perl distribution WHO-GrowthReference-Table), released on 2024-07-17.
SYNOPSIS
use WHO::GrowthReference::Table qw(get_who_growth_reference);
# get mean height & weight of a 3-year old girl
my $res = get_who_growth_reference(gender => "F", dob => time() - 3*365.25*86400);
# => [200, "OK", {
# age => "36.0 month(s)",
# height_mean => 95.034, # cm
# weight_mean => 13.9, # kg
# height_P01 => ..., # height at 0.1% percentile
# height_P1 => ..., # height at 1% percentile
# height_Z-3 => ..., # height at -3 SD
# height_Z-2 => ..., # height at -2 SD
# ...
# }]
# you have a 3.5-year old boy weighing at 14.8kg and with a height of 102cm,
# calculate the percentiles
my $res = get_who_growth_reference(gender => "M", dob => time() - 3.5*365.25*86400, weight=>14.8, height=>102);
# => [200, "OK", {
# age => "42.0 month(s)",
# height_mean => 99.844, # cm
# height_percentile => 70.2, # your boy's height is above world average, about 70.2% of boys of the same age are shorter than your boy
# height_zscore => ...,
# weight_mean => 15.3, # kg
# weight_percentile => 39.6, # your boy's weight is below world average, about 39.6% of boys of the same age weigh less than your boy
# weight_zscore => ...,
# height_P01 => ...,
# ...
# height_potential => ...,
# height_potential_Z0 => ...,
# weight_potential_10y => ...,
# weight_potential_10y_Z0 => ...,
# }]
DESCRIPTION
FUNCTIONS
get_who_growth_reference
Usage:
get_who_growth_reference(%args) -> [$status_code, $reason, $payload, \%result_meta]
Lookup height/weight in the WHO growth chart (a.k.a. growth reference, growth standards).
Examples:
Get weight/height information for a boy that is born on May 4, 2017:
get_who_growth_reference(gender => "M", dob => "2017-05-04");
Result:
[ 200, "OK", { age => "86.0 month(s)", bmi_mean => 15.521, bmi_P01 => 12.198, bmi_P1 => 12.861, bmi_P10 => 13.917, bmi_P15 => 14.194, bmi_P25 => 14.627, bmi_P3 => 13.288, bmi_P5 => 13.528, bmi_P50 => 15.521, bmi_P75 => 16.55, bmi_P85 => 17.17, bmi_P90 => 17.622, bmi_P95 => 18.343, bmi_P97 => 18.848, bmi_P99 => 19.896, bmi_P999 => 22.044, bmi_SD0 => 15.521, bmi_SD1 => 17.106, bmi_SD1neg => 14.236, bmi_SD2 => 19.116, bmi_SD2neg => 13.171, bmi_SD3 => 21.763, bmi_SD3neg => 12.272, bmi_SD4 => 24.409, bmi_SD4neg => 11.373, gender => "M", height_mean => 122.675, height_P01 => 106.154, height_P1 => 110.238, height_P10 => 115.824, height_P15 => 117.134, height_P25 => 119.069, height_P3 => 112.62, height_P5 => 113.881, height_P50 => 122.675, height_P75 => 126.281, height_P85 => 128.216, height_P90 => 129.526, height_P95 => 131.469, height_P97 => 132.73, height_P99 => 135.112, height_P999 => 139.196, height_SD0 => 122.675, height_SD1 => 128.021, height_SD1neg => 117.329, height_SD2 => 133.367, height_SD2neg => 111.983, height_SD3 => 138.714, height_SD3neg => 106.636, height_SD4 => 144.06, height_SD4neg => 101.29, weight_mean => 23.303, weight_P01 => 15.771, weight_P1 => 17.259, weight_P10 => 19.65, weight_P15 => 20.281, weight_P25 => 21.268, weight_P3 => 18.224, weight_P5 => 18.767, weight_P50 => 23.303, weight_P75 => 25.635, weight_P85 => 27.03, weight_P90 => 28.038, weight_P95 => 29.636, weight_P97 => 30.746, weight_P99 => 33.014, weight_P999 => 37.512, weight_SD0 => 23.303, weight_SD1 => 26.885, weight_SD1neg => 20.377, weight_SD2 => 31.33, weight_SD2neg => 17.958, weight_SD3 => 36.936, weight_SD3neg => 15.937, weight_SD4 => 42.542, weight_SD4neg => 13.915, }, { "func.raw_weight" => [ 86, -0.4594, 23.3029, 0.13838, 15.771, 17.259, 18.224, 18.767, 19.65, 20.281, 21.268, 23.303, 25.635, 27.03, 28.038, 29.636, 30.746, 33.014, 37.512, ], }, ]
Get weight/height information for a 6.5yo girl:
get_who_growth_reference(gender => "F", age => "6.5y");
Result:
[ 200, "OK", { age => "78.0 month(s)", bmi_mean => 15.32, bmi_P01 => 11.645, bmi_P1 => 12.365, bmi_P10 => 13.525, bmi_P15 => 13.832, bmi_P25 => 14.315, bmi_P3 => 12.832, bmi_P5 => 13.096, bmi_P50 => 15.32, bmi_P75 => 16.492, bmi_P85 => 17.206, bmi_P90 => 17.728, bmi_P95 => 18.57, bmi_P97 => 19.165, bmi_P99 => 20.41, bmi_P999 => 23.013, bmi_SD0 => 15.32, bmi_SD1 => 17.131, bmi_SD1neg => 13.879, bmi_SD2 => 19.482, bmi_SD2neg => 12.704, bmi_SD3 => 22.668, bmi_SD3neg => 11.725, bmi_SD4 => 25.855, bmi_SD4neg => 10.746, gender => "F", height_mean => 117.977, height_P01 => 101.611, height_P1 => 105.657, height_P10 => 111.19, height_P15 => 112.488, height_P25 => 114.405, height_P3 => 108.016, height_P5 => 109.266, height_P50 => 117.977, height_P75 => 121.549, height_P85 => 123.466, height_P90 => 124.764, height_P95 => 126.688, height_P97 => 127.938, height_P99 => 130.297, height_P999 => 134.343, height_SD0 => 117.977, height_SD1 => 123.273, height_SD1neg => 112.681, height_SD2 => 128.569, height_SD2neg => 107.385, height_SD3 => 133.865, height_SD3neg => 102.089, height_SD4 => 139.161, height_SD4neg => 96.793, weight_mean => 21.227, weight_P01 => 13.932, weight_P1 => 15.333, weight_P10 => 17.626, weight_P15 => 18.239, weight_P25 => 19.206, weight_P3 => 16.252, weight_P5 => 16.773, weight_P50 => 21.227, weight_P75 => 23.591, weight_P85 => 25.028, weight_P90 => 26.077, weight_P95 => 27.761, weight_P97 => 28.945, weight_P99 => 31.399, weight_P999 => 36.41, weight_SD0 => 21.227, weight_SD1 => 24.877, weight_SD1neg => 18.333, weight_SD2 => 29.572, weight_SD2neg => 15.998, weight_SD3 => 35.757, weight_SD3neg => 14.087, weight_SD4 => 41.942, weight_SD4neg => 12.175, }, { "func.raw_weight" => [ 78, -0.5185, 21.2274, 0.1523, 13.932, 15.333, 16.252, 16.773, 17.626, 18.239, 19.206, 21.227, 23.591, 25.028, 26.077, 27.761, 28.945, 31.399, 36.41, ], }, ]
See percentiles/z-scores for a 6yo boy weighing 17kg and having a height of 102cm:
get_who_growth_reference(gender => "M", age => "6y", height => 102, weight => 17);
Result:
[ 200, "OK", { age => "72.0 month(s)", bmi => 16.3398692810458, bmi_mean => 15.306, bmi_P01 => 12.066, bmi_P1 => 12.733, bmi_P10 => 13.773, bmi_P15 => 14.042, bmi_P25 => 14.459, bmi_P3 => 13.157, bmi_P5 => 13.393, bmi_P50 => 15.306, bmi_P75 => 16.258, bmi_P85 => 16.819, bmi_P90 => 17.221, bmi_P95 => 17.854, bmi_P97 => 18.291, bmi_P99 => 19.176, bmi_P999 => 20.91, bmi_percentile => 76.4593454731863, bmi_SD0 => 15.306, bmi_SD1 => 16.761, bmi_SD1neg => 14.083, bmi_SD2 => 18.52, bmi_SD2neg => 13.04, bmi_SD3 => 20.689, bmi_SD3neg => 12.141, bmi_SD4 => 22.858, bmi_SD4neg => 11.242, bmi_zscore => 0.71056307975653, gender => "M", height_mean => 115.951, height_P01 => 100.726, height_P1 => 104.49, height_P10 => 109.637, height_P15 => 110.845, height_P25 => 112.628, height_P3 => 106.685, height_P5 => 107.847, height_P50 => 115.951, height_P75 => 119.274, height_P85 => 121.057, height_P90 => 122.265, height_P95 => 124.055, height_P97 => 125.217, height_P99 => 127.412, height_P999 => 131.176, height_percentile => 0.404622741764081, height_potential => 155.876968650372, height_potential_SD0 => 176.543, height_SD0 => 115.951, height_SD1 => 120.878, height_SD1neg => 111.024, height_SD2 => 125.804, height_SD2neg => 106.097, height_SD3 => 130.731, height_SD3neg => 101.171, height_SD4 => 135.658, height_SD4neg => 96.244, height_zscore => -2.83170929760455, weight_mean => 20.514, weight_P01 => 13.913, weight_P1 => 15.248, weight_P10 => 17.361, weight_P15 => 17.912, weight_P25 => 18.768, weight_P3 => 16.105, weight_P5 => 16.585, weight_P50 => 20.514, weight_P75 => 22.48, weight_P85 => 23.637, weight_P90 => 24.467, weight_P95 => 25.767, weight_P97 => 26.661, weight_P99 => 28.464, weight_P999 => 31.948, weight_percentile => 7.67396907216494, weight_SD0 => 20.514, weight_SD1 => 23.517, weight_SD1neg => 17.996, weight_SD2 => 27.129, weight_SD2neg => 15.87, weight_SD3 => 31.508, weight_SD3neg => 14.063, weight_SD4 => 35.888, weight_SD4neg => 12.256, weight_zscore => -1.46848541862653, }, { "func.raw_weight" => [ 72, -0.318, 20.5137, 0.13372, 13.913, 15.248, 16.105, 16.585, 17.361, 17.912, 18.768, 20.514, 22.48, 23.637, 24.467, 25.767, 26.661, 28.464, 31.948, ], }, ]
Caveats:
Currently the z-zcore line values (e.g. height_Z1, height_Z-1, etc) are calculated using linear interpolation.
This function is not exported by default, but exportable.
Arguments ('*' denotes required arguments):
age => duration
(No description)
dob => date
(No description)
gender* => str
(No description)
height => float
Specify height to calculate percentile.
now => date
Assume now is this date, instead of current date.
weight => float
Specify weight to calculate percentile.
Returns an enveloped result (an array).
First element ($status_code) is an integer containing HTTP-like status code (200 means OK, 4xx caller error, 5xx function error). Second element ($reason) is a string containing error message, or something like "OK" if status is 200. Third element ($payload) is the actual result, but usually not present when enveloped result is an error response ($status_code is not 2xx). Fourth element (%result_meta) is called result metadata and is optional, a hash that contains extra information, much like how HTTP response headers provide additional metadata.
Return value: (any)
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/WHO-GrowthReference-Table.
SOURCE
Source repository is at https://github.com/perlancar/perl-WHO-GrowthReference-Table.
SEE ALSO
WHO::GrowthReference::GenChart uses this module to make growth charts.
For CLI frontends for this module and more, see App::WHOGrowthReferenceUtils.
Source data is from http://www.who.int/childgrowth/standards/en/. Note that CDC also publishes growth standards; I might write CDC::GrowthReference::Table too someday.
AUTHOR
perlancar <perlancar@cpan.org>
CONTRIBUTING
To contribute, you can send patches by email/via RT, or send pull requests on GitHub.
Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via:
% prove -l
If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, Pod::Weaver::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond that are considered a bug and can be reported to me.
COPYRIGHT AND LICENSE
This software is copyright (c) 2024, 2022, 2021, 2018 by perlancar <perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
BUGS
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=WHO-GrowthReference-Table
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.