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.012 of WHO::GrowthReference::Table (from Perl distribution WHO-GrowthReference-Table), released on 2022-06-07. 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 => "61.0 month(s)", bmi_mean => 15.264, bmi_P01 => 12.041, bmi_P1 => 12.72, bmi_P10 => 13.764, bmi_P15 => 14.03, bmi_P25 => 14.441, bmi_P3 => 13.148, bmi_P5 => 13.384, bmi_P50 => 15.264, bmi_P75 => 16.172, bmi_P85 => 16.7, bmi_P90 => 17.074, bmi_P95 => 17.656, bmi_P97 => 18.052, bmi_P99 => 18.845, bmi_P999 => 20.355, bmi_SD0 => 15.264, bmi_SD1 => 16.645, bmi_SD1neg => 14.071, bmi_SD2 => 18.259, bmi_SD2neg => 13.031, bmi_SD3 => 20.166, bmi_SD3neg => 12.118, bmi_SD4 => 22.072, bmi_SD4neg => 11.204, gender => "M", height_mean => 110.265, height_P01 => 96.076, height_P1 => 99.583, height_P10 => 104.381, height_P15 => 105.506, height_P25 => 107.168, height_P3 => 101.629, height_P5 => 102.712, height_P50 => 110.265, height_P75 => 113.362, height_P85 => 115.023, height_P90 => 116.149, height_P95 => 117.817, height_P97 => 118.9, height_P99 => 120.946, height_P999 => 124.453, height_SD0 => 110.265, height_SD1 => 114.856, height_SD1neg => 105.673, height_SD2 => 119.448, height_SD2neg => 101.082, height_SD3 => 124.039, height_SD3neg => 96.49, height_SD4 => 128.63, height_SD4neg => 91.899, weight_mean => 18.506, weight_P01 => 12.581, weight_P1 => 13.802, weight_P10 => 15.711, weight_P15 => 16.204, weight_P25 => 16.967, weight_P3 => 14.58, weight_P5 => 15.013, weight_P50 => 18.506, weight_P75 => 20.216, weight_P85 => 21.212, weight_P90 => 21.92, weight_P95 => 23.023, weight_P97 => 23.774, weight_P99 => 25.276, weight_P999 => 28.126, weight_SD0 => 18.506, weight_SD1 => 21.109, weight_SD1neg => 16.279, weight_SD2 => 24.165, weight_SD2neg => 14.367, weight_SD3 => 27.77, weight_SD3neg => 12.718, weight_SD4 => 31.375, weight_SD4neg => 11.07, }, { "func.raw_weight" => [ 61, -0.2026, 18.5057, 0.12988, 12.581, 13.802, 14.58, 15.013, 15.711, 16.204, 16.967, 18.506, 20.216, 21.212, 21.92, 23.023, 23.774, 25.276, 28.126, ], }, ] * 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* * dob => *date* * gender* => *str* * 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 . SOURCE Source repository is at . 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 . Note that CDC also publishes growth standards; I might write CDC::GrowthReference::Table too someday. AUTHOR perlancar 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, and sometimes one or two other Dist::Zilla plugin and/or Pod::Weaver::Plugin. Any additional steps required beyond that are considered a bug and can be reported to me. COPYRIGHT AND LICENSE This software is copyright (c) 2022, 2021, 2018 by perlancar . 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 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.