Menu ENN Search
Language: English Français

New version of R package 'zscorer' available

This question was posted the Assessment and Surveillance forum area and has 38 replies.

» Post a reply

Mark Myatt

Frequent user

5 Nov 2019, 14:55

Ernest and I have been working on the zscorer package for the R Language for Data Analysis and Graphics. v0.3.1 of the zscorer package calculates and adds nutritional anthropometry z-scores to survey data:

  • Weight-for-length (wfl) z-scores for children with lengths between 45 and 110 cm
  • Weight-for-height (wfh) z-scores for children with heights between 65 and 120 cm
  • Length-for-age (lfa) z-scores for children aged less than 24 months
  • Height-for-age (hfa) z-scores for children aged between 24 and 228 months
  • Weight-for-age (wfa) z-scores for children aged between zero and 120 months
  • Body mass index-for-age (bfa) z-scores for children aged between zero and 228 months
  • MUAC-for-age (mfa) z-scores for children aged between 3 and 228 months
  • Triceps skinfold-for-age (tsa) z-scores for children aged between 3 and 60 months
  • Sub-scapular skinfold-for-age (ssa) z-scores for children aged between 3 and 60 months
  • Head circumference-for-age (hca) z-scores for children aged between zero and 60 months

The z-scores are calculated using the WHO Child Growth Standards for children aged between zero and 60 months or the WHO Growth References for school-aged children and adolescents.

New in this version is that MUAC-for-age (mfa) z-scores for children aged between 60 and 228 months are calculated using the new MUAC-for-age growth reference developed by Mramba et al. (2017) using data from the USA and Africa:

Mramba L, Ngari M, Mwangome M, Muchai L, Bauni E, Walker AS, et al. A growth reference for mid upper arm circumference for age among school age children and adolescents, and validation for mortality: growth curve construction and longitudinal cohort study. BMJ. 2017

This reference has been validated with African school-age children and adolescents.

The zscorer comes packaged with the WHO Growth References data and the new MUAC-for-age reference data.

The package contains a Shiny app that provides a web interface to the package's functions. You can see an example of this functionality here.

The package can be downloaded and installed in R in the usual manner. The package website is here.

A manual is inlcuded in the package and is available here.

Carlos Grijalva-Eternod

UCL Institute for Global Health

Normal user

5 Nov 2019, 19:54

This R package is very neat and useful.

Thank you Mark and Ernest.

Ernest Guevarra


Frequent user

5 Nov 2019, 20:15

Thanks for sharing this to the forum Mark!

Mark and I are pleased to be able to share this package along with the accompanying web interface with the forum and to everyone who does nutrition studies and surveys. We think this fills a gap that we noted from some of the questions/issues raised in this thread with regard to tools for z-score calculation.

For those who already use R Language for Data Analysis and Graphics, then installation and usage will be straightforward using the links that Mark shared documenting the functions in the zscorer package.

For those that don't use R or are still in the early stages of learning R, the web interface allows for anyone to perform the calculations using familiar and easy to learn point and click user interface.

This package and the web interface is in active development. Mark and I are happy to receive feedback/comments/issue or bug reports/feature requests either via this EN-NET forum or through our GitHub development portal found here. Mark and I also embrace open source development and as such our codebase is available for anyone to review and give feedback to or build on. This is available, again, through our GitHub development portal.

Anonymous 27728


Normal user

5 Nov 2019, 22:13

Excuse me, for it's not an answer but rather a question: please tell me if you know a way to calculate the target weight and height of a child without using the WHO Zscore table. 

I would like to know whether there is another method to find the target weight of a child  without using the WHO z-score table, because after taking the anthopomteric measurements for a child with W/H -3 we use the WHO table to find the target weight.  My question is to find out whether there is another method of calculating this?  

 Thank you for taking my question into consideration, Tidiani Cisse Student

Sharon Cox

Assoc Professor

Normal user

6 Nov 2019, 01:32

Thanks Ernest and Mark. I agree that this fills a gap. I will be sharing with my students. 

K. Mutegi

Normal user

6 Nov 2019, 03:02

Thank you Mark & Ernest

Mbaye Diop


Normal user

7 Nov 2019, 13:59


There are expected target weights for 1 month periods as part of growth monitoring and promotion (GMP).

Try to get acquainted with these tables, but they are for children from 0-23 months.

Thank you

Mark Myatt

Frequent user

7 Nov 2019, 16:16

Dear Anonymous 27728 / Étudiant / Tidiani Cisse,

I am not sure that I understand your question. I guess that you have a SAM case with WHZ < -3 and you want to work out what weight for the same height would give WHZ >= 2 and this becomes a "target weight". Is that correct?

If so then it should be quite easy to write an short R script which uses the functions and reference data in the zscorer package to do the calculations You could wrap that script up with Shiny so you could do the calculations in your web-browser.

The mechanics of the R script will be something like this:

    ## Load zscorer library

    ## Sex, weight, and height for a SAM case
    sex = 1
    height = 91
    weight = 9.9

    ## Calculate WHZ for this case
    getWGSR(sex = sex, firstPart = weight, secondPart = height, index = "wfh")

This gives:

     [1] -3.633671

This is the WHZ for the specified case (i.e. sex = 1 (for male), height = 91, and weight = 9.9).

We now need to calculate what weight for the current height gives WHZ = 2

    ## Specify the objective function
    objFun <- function(weight)
      result <- getWGSR(sex = sex, firstPart = weight,
                        secondPart = height, index = "wfh") + 1.99

    ## Find the weight that gives an answer closest to zero
    uniroot(objFun, interval = c(weight, 25))$root

This gives:

    [1] 11.23279

This is the target weight

We can check the result with the original height and the target weight:

    getWGSR(sex = 1, firstPart = 11.23279, secondPart = 91, index = "wfh")

This gives:

    [1] -1.990001

which, as we wanted it just above WHZ = -2.

This process assumes that no height is gained during treatment. This may not always be the case as children tend to grow quickly when their nutritional needs are met.

A simple alternative ... UNICEF guidelines have a 15% weight gain as a target. For the example child this would be:

    9.9 * 1.15 = 11.385

We can check what that gives:

     getWGSR(sex = 1, firstPart = 11.385, secondPart = 91, index = "wfh")
This gives:

    [1] -1.813269

which is also a bit above WHZ < -2 giving some room for a little gain in height.

The 15% proportional weight gain apporach is simple to apply with a table or using a cheap and simple pocket calculator.

BTW ... The GMP target weight tables are for normal growth in weight and we expect / want accelerated growth in therapeutic feeding.

I hope this is useful.

Martin Njoroge


Normal user

13 Nov 2019, 08:57

Thanks Mark & Ernest. Quite informative and helpful.

Severine Frison

Normal user

15 Apr 2020, 11:57

Hello Mark,

I've been using the package, really great work. Thanks a lot.

I have one question though, it seems like zscores are rounded to 2 digits only. Is there a way to change that option?

Many thanks in advance


Mark Myatt

Frequent user

15 Apr 2020, 12:26

Yes. Using addWGSR() to add z-scores to an R data.frame you can specify the number of digits you want using the digits parameter. For example, with surevy data in the svy data.frame object you might add WHZ with four digits using:

    svy <- addWGSR(data = svy, sex = "sex", firstPart = "weight",

                                  secondPart = "height", index = "wfh", digits = 4)

this should add WHZ as wfhz with four decimal places ... I am not sure why you would need this level of precision. If you need a different name than use the name parameter.

I hope this is of some use.

Thanks you for your kind comments about the software,

Severine Frison

Normal user

15 Apr 2020, 13:37

Thanks a lot Mark!

Cécile Cazes

Normal user

22 May 2020, 23:24


The weight-for-height calculation table used in the DRC corresponds to the WHO unisex boy table but does not take into account the child's age. So when I compare the classification of children according to the W / H ratio according to the DRC table and according to a variable calculated with the package zscorer or other package R such as anthro or igrowup, I observe differences in classifications.

For example, a 29 month old child with a weight of 7.2 kg and a height of 73.5 cm has a W / H ratio = -3 according to the DRC table but a W / H ratio = - 3.27 according to the WHO table for boys. So when I check the classification by the nurses of this child in two categories, SAM or Non-SAM, my calculated variable indicates a SAM classification while the child is non-SAM according to the DRC table, so there is no error according to the table used in the DRC. I found 1.5% of discrepancy of this type due to the fact that the calculation of the weight / height index according to the WHO 2006 standards is based on the age or the taking of the standing or lying height of the child.

The ideal would be that I can integrate the DRC weight / height table into an R program to avoid these discrepancies. What do you think? Do you think this is doable? How? Or maybe there are other alternatives?

Thank you in advance for your help.

Mark Myatt

Frequent user

25 May 2020, 11:00

I am not sure I fully understand the question. WHZ for a boy with height = 73.5cm and weight = 7.2 kg is -3. This is from the WHO table:

Using zscorer:

    >getWGSR(sex = 1, firstPart = 7.2, secondPart = 73.5, index = "wfh")


     [1] -3.078397

which is close enough (it is -3 exactly if weight is about 7.245 but we almost never mesure weight with that degree of precision).

WHZ does not include an age term. It is considered a strength of W/H that age is not used (since it is often not accurate). We do account for age indirectly by using length rather than height in children aged less than two years or with height less than 87 cm (a proxy for two years of age). This may be the origin of the discrepancy you report.

If I specify standing = 1 (i.e. measured standing) as in:

    >getWGSR(sex = 1, firstPart = 7.2, secondPart = 73.5, index = "wfh",              standing = 1)

which gives:

     [1] -3.26919

I think this is your "-3.27". 

If you use zscorer and do not specify a 'standing' value then height (and age) rules apply. You can see these rules if you type '(getWSGR)' to print the function defintion.

The "0.7" is a correction that accounts for compression of the spine when standing. You can do this before using getWGSR() or addWGRS() to match the DRC table or use the 'standing' parameter.

You could rewrite the getWGSR() function to make it match results given in the DRC table. That would not be hard to do.

I hope this helps.

Cécile Cazes

Normal user

25 May 2020, 11:33

Thank you very much for your answer.

I would like to understand how the DRC table is designed.

According to my research, this is the WHO table for boys, but I noticed that the values correspond to either children under 24 months of age (lying down measurement) or children of + 24 months of age (standing measurement).

If I understand your answer correctly, you mean that the DRC table corresponds to the WHO boys table with a systematic correction made on the height: + 0.7 cm compared to the actual height? is it this?

so I should apply the argument: index = wfh height = height + 0.7 cm systematically to get the values from the DRC table?

Thanks for your help

Mark Myatt

Frequent user

25 May 2020, 12:21

The WHO table for younger(i.e. < 2 years) children is usually for weight-for-length (i.e. children measured lying down). There are weight-for-height tables for children of all ages (capable of standing upright). When you measure a child lying down the length is greater than the height. Before the WGS we used to assume the difference was 0.5 cm and adjusted the length by -0.5 cm to estimate height in order to work with weight-for-height tables. Since WGS we have used 0.7 cm. This is the difference in reference median height for two year olds in L/A (M = 87.8 cm; F = 86.4 cm) and H/A tables (M = 87.1 cm; F = 85.7 cm).

I do not know how the DRC tables were made. I doubt they used a separate reference population from locally collected data. I guess they just joined the W/L table (kids < 2 years) an the W/H table (kids >= 2 years) together was done with the old NCHS reference. You could ask your local nutrition cluster for guidance. SMART project people might know. Someone on EN-NET might know.

You need to take care of the sign of the adjustment. If the child was measured lying down then subtract 0.7 cm to use the W/H table to get WHZ and do nothing to use the W/L table to get WLZ. If the child was measured upright then add 0.7 cm to use the W/L table to get WLZ and do nothing to use the W/H table to get WHZ. Does that make sense? This sort of behaviour is encoded in the height / age rules in the gettWGSR() function in zscorer.

I hope this helps.

Cécile Cazes

Normal user

25 May 2020, 14:34

again, Thank you for your suggestions, I will apply your instructions.

One last question, do you have a bibliographic reference regarding the 0.7 cm correction?

Thank you again.

Mark Myatt

Frequent user

25 May 2020, 15:02

The WHO / UNICEF handbook:


which is available from here has:

Always record carefully whether recumbent length or standing height was measured. If a child is 2 years old or older and cannot stand, measure the child’s recumbent length and note this in the questionnaire (in the question about measurement position); equally, if a child is less than 2 years old and is measured standing, this should also be noted in the questionnaire. In both cases, explain why this child was not measured in the appropriate position for his or her age. In such cases, an adjustment will be required in the data analysis phase prior to calculating the z-scores based on the WHO Child Growth Standards (0.7 cm should be added to the standing height to convert it to recumbent length for children below 2 years old old, and 0.7 cm subtracted from the recumbent length to convert it to standing height for children 2 years or older). This adjustment is made automatically by the software program in the standard analysis approach (see Chapter 3 on Data Analysis).

on page 41 (also see Table 9). This correction procedure is present in the WHO scripts for R and STATA and in the xscorer getWGSR() function.

I hope this helps.

Cécile Cazes

Normal user

26 May 2020, 11:50

Hello again,

After checking, I still have the same problem of discordant values between the WHO table for the WFL boy table (0-2years old, 45 to 110 cm) and the WFL value calculated by the package.

All of the children below are under 24 months of age with a length measurement while lying down. The WHO boy WFL table indicates a wfl z-score strictly equal to -3; these children are classified as not severe.

On the other hand, the variable calculated with zscorer indicates a wfl z-score <-3; these children are in the severe class. I found the same result using the R anthro and igrowup packages.

With zscorer:

getWGSR (sex = 1, firstPart = 7.2, secondPart = 73.5, index = "wfl", standing = "2")
[1] -3.078397

getWGSR (sex = 1, firstPart = 6.8, secondPart = 71.1, index = "wfl", standing = "2")
[1] -3.073756

getWGSR (sex = 1, firstPart = 5.7, secondPart = 65.0, index = "wfl", standing = "2")
[1] -3.078341

getWGSR (sex = 1, firstPart = 5.3, secondPart = 63.2, index = "wfl", standing = "2")
[1] -3.199316

getWGSR (sex = 1, firstPart = 5.4, secondPart = 63.5, index = "wfl", standing = "2")
[1] -3.10421

Mark Myatt

Frequent user

26 May 2020, 12:48

I assume you mean "length" not "waist" measurement.

I think you are saying that your example weights and heights should be giving a WHZ = -3 but actually give WHZ a litte below -3.

Looking at your first example (male, weight = 7.2, length = 73.5) using the WHO table at:

shows 7.2 in the -3 SD column for height = 73.5. If we use the LMS values we get:

 z = (((7.2/9.1927)^-0.3521) - 1)/(-0.3521 * 0.08276) = -3.082965

this should be adjusted. See page 203 of:

WHO Multicentre Growth Reference Study Group. WHO Child Growth Standards: Length/height-for-age, weight-for-age, weight-for-length, weight-for-height and body mass index-for-age: Methods and development. Geneva: World Health Organization, 2006

This is the procedure used in anthro, igrowup, zscorer, and other software as well as for the production of the WHO lookup tables.

After adjustment we get WHZ = -3.078397.

It seems to me that rounding error may have crept into the WHO and DRC tables. Playing with values (altering weight, keeping height the same, and recalculating WHZ) i get:

getWGSR (sex = 1, firstPart = 7.2455, secondPart = 73.5, index = "wfl", standing = "2")
[1] -3.000095

This 7.2455 kg gives very close to WHZ = -3 but we never measure to that degree of precision ... 100 g precision is about the best we can do with Salter type sprung hanging scales. If we round 7.2455 kg to 100 g precision we get 7.2 kg.

I have long opined in this forum that WHZ is overly complicated and prone to error. I think this is a large part of what we are seeing here. I think we can live with a small error that we cannot avoid and favours sensitivity. A difference is z-scores of c. 0.08 seems little to worry about. It seems a very thin line to have between treating and not treating very thin children.

Cécile Cazes

Normal user

26 May 2020, 14:42

I apologize for the confusion on the term "size" which comes from the translation from French / English I think (only one word in French).

Your explanations are of great help, thank you very much.

I had this assumption on rounding of size or weight but I would not have been able to confirm them as you did. thank you so much.

some children are classified in the -3 SD column when they are severe and miss out on treatment with RUTF it is a shame. In the specific case of these 5 children, the MUAC was between 115 and 122, therefore children at high risk of mortality who escape treatment with RUTF according to the national protocol.

Thanks for your help.

Mark Myatt

Frequent user

27 May 2020, 11:45

I am glad that I was able to help.

I am interested in "combined" protocols which treat SAM and MAM cases in CMAM type programs with MAM cases receiving a shorter and less intensive RUTF-based treatment protocol.These programs tend to use MUAC (PB) to decide admission and children with MUAC (PB) between 115 mm and 122 mm would be admitted.

Halfan Ngowo

Normal user

4 Dec 2020, 11:19

Hi There, 

I have been using the package for my survey on school age children in which some of them are more than 120cm (give me a problem on weight-for -height. I also have a problem with Weight-for-age since some of my ages are above 120 months. 

Is there a way to go around this? I know the package is restricted to those ranges. 

Thank you. 

Carlos Grijalva-Eternod

UCL Institute for Global Health

Normal user

4 Dec 2020, 12:10

Hi Halfan,

For children older than 10 years (120 months) or taller than 120 cm you should be using BMI-for-age z-scores rather than Weight-for-height or Weight-for-age.

This is a limitation of the actual WHO growth references, not of the 'zscorer' R package.

I hope the above is useful.

Mark Myatt

Frequent user

4 Dec 2020, 12:46

The 'zscorer' package is limited by the ranges for which reference values are a available. For W/H the upper limit is 120 cm. For W/A the upper limit is 120 months.

The 'zscorer, package uses the WHO Child Growth Standards and the WHO Growth References for children and adolescents. If you have reference data for wider ranges then that can be added quite easily.

We have (e.g.) recently added MUAC/A z-scores as described in:

        Mramba L, Ngari M, Mwangome M, Muchai L, Bauni E, Walker AS, et al.,
        A growth reference for mid upper arm circumference for age among
        school age children and adolescents, and validation for mortality:
        growth curve construction and longitudinal cohort study. BMJ. 2017

extending the upper limit to 228 months. This did not take very much work. The most work was in getting the reference data into a format compatible with that expected by internal functions of the 'zscorer' library. It is a simple format but there may be a lot of data to import.

It may be possible to use the CDC 2000 reference which has (e.g.) 240 month as the upper limit for W/A with data in close to the required format. You may want to use CDC software to use teh CDC reference.

We can probably help with adding reference datasets.

Mark Myatt

Frequent user

4 Dec 2020, 12:49

Just checked ... CDC 2000 is in EpiInfo 7 and a couple of SAS programs are also available.

Carlos Grijalva-Eternod

UCL Institute for Global Health

Normal user

4 Dec 2020, 14:23

The 2000 CDC Growth Charts are also available in Stata by using the zanthro Stata command. zanthro is not part of Stata so you will need to install it.

As Mark mentioned, the CDC chart will allow you to derive z-scores for weight-for-age up to the age of 24 months, but for weight-for-height, the upper limit is 121.5 cm. Above that height limit you will need to rely on BMI-for-age to assess ponderal growth.

I hope the above is useful.

Carlos Grijalva-Eternod

UCL Institute for Global Health

Normal user

4 Dec 2020, 14:25

Apologies, in my last reply I mean to write 240 months, not 24 months.

Ernest Guevarra


Frequent user

11 Dec 2020, 13:07

Hi Halfan,

Mark alerted me to your discussion with him regarding assessing weight-for-height for those taller than 120cm using the CDC 2000 reference.

What Mark has shared with regard to the possibility of updating the package to use the same function (and its syntax) to get to this is definitely doable. I've filed this as an issue on our development site (check our development site here and the filing of the issue here.

I will start work on this update tonight and do unit testing by the weekend and will ask Mark to review next week. We will aim to submit to CRAN an updated version (most likely we will release this as a minor release v0.4.0 as this is a new feature rather than just a patch release) by next week before they take their winter break. If we don't make the cut, we'll do a GitHub development release instead as a stop gap measure before we release on CRAN next year. You can monitor progress in our development site and I will also give an update here on en-net by end of next week (if not earlier).

And to further add to the discussion which you and others who have related issue/question as yours, when we put zscorer on CRAN, we've been able to engage with other package creators who've done packages that calculated z-scores using so many other available reference standards. What I've learned is that the CDC reference standard doesn't have a package that uses it directly (not a package that is available on CRAN anyway) and I was helping out a group of researchers from the US who were trying to develop one. For some reason the development has stalled and the package hasn't really been moved long yet. I say this because if there was an already existing package that deals with the functionality that we are talking about, the common practice is to refer others to use that package rather than rebuild the wheel.

In another post here, I will share all published packages on CRAN that assesses anthropometric z-scores based on different reference standards.

Sorry again for delay in replying to this. This has been 7 days since you made raised this question. We will get on it now.



Ernest Guevarra


Frequent user

14 Dec 2020, 22:44

Hi Halfan,

Following up on my previous reply. We are working on the additional features to the zscorer package that has been suggested based on your question. I think we will not make it to the Friday deadline to get a version out before the CRAN team goes for winter break so we will now aim for a development release and then get a CRAN release out by early next year.

Also, I mentioned in my previous email that I will share some information on R packages that already calculate z-scores based on CDC 2000 reference values. From my engagement with those developing similar packages in R, there are two packages that have been suggested/recommended specific to CDC 2000 reference standards:

1. AGD package - available on CRAN ( and source code is available at GitHub. The package approach to calculating z-scores is somewhat similar to zscorer but the structure of the main functions are not as intuitive and documentation is a bit confusing. The package includes the CDC growth charts data (among others) which are used to apply the LMS calculation. I haven't personally used the package and from my reading of the documentation, I am hesitant to do so.

2. mchtoolbox package - not available on CRAN and development source code available at GitHub. As you will see in the GitHub repository page, the last commit by the lead developer or any of the development team was 3 years ago. So, the development stalled though they have their main function available and seems that they have been able to make it work. The approach to the calculation is based on the SAS script available for calculation z-scores using CDC growth standards and applies what is called as the "tidy" appraoch to data handling. This approach will provide the same answers as what the zscorer aproach uses but the structuring of output data is different.

Whilst we are completing the addition of the CDC growth standards into zscorer, you may want to look into these two packages to get immediate solution to your needs.

The alternatives will be to use EpiInfo or the SAS macros as suggested by Mark.

I will update again on Friday with regard to the addition of the CDC growth standards to the zscorer package.



Ernest Guevarra


Frequent user

21 Dec 2020, 10:51

Hi Halfa, Hi everyone else following this thread!

Mark and I have been working on adding the CDC 2000 Growth Standards to the zscorer package. Apologies for delays. I am not as familiar with the CDC standards compared to the WGS so have been reading full documentation to get the functions right.

Our current approach to this will be to use a similar syntax to the functions for getting z-scores using WGS. This will help with ease of use especially for those already familiar with using the WGS functions. We are now currently doing unit testing of the new CDC functions we have created.

A working/development version of this update can be installed in R using the following commands:

if(!require(remotes) install.packages("remotes")


The new functions for CDC calculation are:



with the same syntex as the WGS functions.

This is where we would like to enlist the support of those following this thread and the general en-net forum/community.

We will need data that will be usable for applying CDC standards to and ideally have information on the calculated z-scores using the already existing tools (i.e., EpiInfo, SAS). This can serve as a benchmark or gold standard and then we can check the output of the functions we've created against this benchark. It would be ideal that we have what we call edge cases within the dataset. This would include cases at the low extreme (0 months old), cases with ages at 24 month and 36 month which is where the weight-for-age standards for CDC diverge and those with height/length measurements at 45 cms, 77 cms, 102 cms and 122 cms which are at the borders of height/length measurements between supine and standing measurements.

We are happy to include anyone who helps with data as contributor/s to the package.


Dr. James Oloyede

Nutrition Coordinator

Normal user

21 Dec 2020, 11:25

You guys at en-net are fantastic and of great help.  I have followed the discussion all through and it is of immense benefit for me as I propose to add MAM management to our nutrition interventions in the Northeast among the IDPs in the coming years.

Ernest Guevarra


Frequent user

21 Jan 2021, 15:37

Hi Halfan and colleagues, 

Happy New Year! I hope eveyrone is well.

I am writing to follow-up from my previous post in this thread asking for testing data from those who have data usable with the CDC growth standards (i.e., height and weight measurements for older kids).

We have not heard back from anyone yet so I am writing again to see whether there maybe anyone happy to share data for us to test the new functions on.

So far, we are able to check the new functions to calculate BMI-for-age, weight-for-age and height-for-age but for a dataset that only contains data up to children below 5 years.

If you have any leads on contacts you have that we may approach to request such data will be great.

In the meantime, we will keep these new functions in the development version of the zscorer package until we are able to do proper unit testing on the functions.

Again, you can follow the development of the package with regard to the inclusion of these new functions to calculate z-scores using the CDC growth standards here.



Anonymous 40504

Normal user

21 Jan 2021, 16:14

This New features and tools are welcome.

But i wonder if Health personnal fill well data in children clinical Card 

I tried to use my child information in Shiny App but i failed.No data, somebody Somewhere In health facility forget to fill well.

Ernest Guevarra


Frequent user

21 Jan 2021, 16:44

Hi Anonymous 40504,

May I know the values of the data that you are entering so I can replicate the error you are having to see if indeed there is an issue? The Shiny app is just a front-facing application for those who don't use R so they can calculate z-score using the functions in the package. So, if indeed we find there is a problem with the app, we can investigate the app itself (it might not be handling the inputs appropriately or using the functions correctly) or investigate the zscorer package itself to check the functions that are powering the app.

The other thing to be careful about when using the app and also when using the functions is that it requires the units of measurements that are used to be of a specific type. So for weight it should be in kgs, for height it should be in cms, for muac it should be cms. This is a common source of error in calculations when using the zscorer functions.

Finally, the corresponding outputs will be dependent on your inputs. For nutrition surveys, we often just measure height, weight and MUAC. We do not routinely measure triceps skinfold, subscapular skinfold and head circumference. So, if you just enter weight, height and MUAC, then the app will not provide results for head circumference for age, triceps skinfold for age and subscapular skinfold for age.

Let me know more about what child information you are entering and if possible the output you are getting so I can review and make sure whether there is something that needs checking.



Mark Myatt

Frequent user

22 Jan 2021, 10:22

Don't forget that we need to have age in the correct format. This may need to be in days which can be calulated from age in months.

Pearl H


Normal user

2 Mar 2022, 22:16

Wow, this looks awesome. Do you have a way to import other growth curves (like the fenton curve for premature infants)? Thank you so much for building this

Mark Myatt

Frequent user

3 Mar 2022, 10:33


Yes. The growth curves are stored in the data.frame "wgsData" which is part of the package. You can see what this looks like using:


This allows the sort of extension you describe ... we only need to add the reference to this data.frame. The process is quite simple if the growth curve data are in LMS format. We recently (2019) added an extended MUAC/A reference from:

Mramba, L., Ngari, M., Mwangome, M., Muchai, L., Bauni, E., Walker, A. S., et al. (2017). A growth reference for mid upper arm circumference for age among school age children and adolescents, and validation for mortality: growth curve construction and longitudinal cohort study. BMJ (Clinical Research Ed.), j3423.

and this was done in, I think, half a day. Most of the work was in hammering the data into the right format. It can, however, take a while from packages to be tested and accepted by CRAN (CRAN = Comprensive R Archive Network).

You may not need to bother with this as the 'peditools' package provides Fenton (2003) and other neonatal and paediatric growth references. This package is not yet available on CRAN but can be installed in R. See here for how to install.

The 'pedidools' library uses LMS format reference data so we know it is available. The LMS data can be found in in Fenton (2007).

I hope this is of some use.

Ernest Guevarra


Frequent user

3 Mar 2022, 10:49

Hi Mark and Pear H,

Agree with what Mark has said. Adding any other growth curve would be straightforward for as long as we can have the LMS data which I think Mark was able to find. Also, he was able to refer you to an R package that seems to calculate anthropometrics based on the Fenton curve (the peditools package).

I looked at the peditools package and I would recommend testing it out first. The last update was fairly recent (August 2021) so it must be in current development. But I don't see any testing profile for the package etc so behaviour may not be guaranteed so would recommend playing with it and reaching out to the developers if you find issues. My guess from the developers page is that this is still in active development and is not fully packaged yet (hence not on CRAN). So, I would recommend using it with caution and communicate with the developer if with issues.

I briefly looked at the functions that it uses to get the z-scores base don the Fenton LMS data and the approach on the use of the LMS is what I would have expected so this is credible. The issues you may face is with installation and more of the software side fo things with regard to getting it into your R.

I hope this helps.

If you have any problem posting a response, please contact the moderator at

Back to top

» Post a reply