Estimate the growth centile for a child based on their measurements and age.
Enter Measurements
Height
Weight
Head Circumference
Centimeters (cm)
Kilograms (kg)
Centimeters (cm) – Head Circumference
Understanding Growth Centiles
Growth centiles (or percentiles) are a way to compare a child's growth to that of other children of the same age and sex. A growth chart displays these centiles, allowing healthcare professionals to plot a child's measurements (like height, weight, or head circumference) and see where they fall relative to the general population.
For example, a child at the 50th centile for height is exactly average – half of the children their age are taller, and half are shorter. A child at the 3rd centile is shorter than 97% of their peers, and a child at the 97th centile is taller than 97% of their peers.
How the Calculator Works
This calculator uses standard WHO (World Health Organization) or CDC (Centers for Disease Control and Prevention) growth charts data, which are based on complex statistical models. These models often involve calculating the Z-score, a statistical measure that indicates how many standard deviations a particular measurement is away from the median (50th centile). The Z-score is then used to determine the corresponding centile.
The general formula for a Z-score is:
$ Z = \frac{(X – M)}{SD} $
Where:
$X$ is the measured value (e.g., height, weight).
$M$ is the median (50th centile) value for that age and sex.
$SD$ is the standard deviation for that age and sex.
Different growth charts and statistical methods exist, and the exact calculation for centiles from Z-scores involves using a cumulative distribution function (often a normal distribution approximation or specific lookup tables/algorithms). This calculator provides an approximation based on publicly available data and methodologies.
Use Cases
Parental Monitoring: Parents can use this to get an idea of where their child stands in terms of growth, complementing regular pediatrician visits.
Healthcare Professionals: A quick tool for doctors, nurses, and midwives to estimate centiles between formal chartings.
Research: Useful for researchers analyzing growth patterns in populations.
Disclaimer: This calculator is for informational purposes only and should not replace professional medical advice. Always consult with a healthcare provider for accurate assessment and guidance regarding your child's growth.
// Placeholder data for WHO growth standards (simplified for demonstration)
// In a real-world application, this would be much more extensive and accurate,
// potentially using libraries or complex lookup tables.
// This simplified data structure demonstrates the concept.
var growthData = {
height: {
male: [
{ age_months: 0, median: 49.9, sd: 1.9 }, { age_months: 3, median: 60.2, sd: 2.1 }, { age_months: 6, median: 67.6, sd: 2.1 },
{ age_months: 9, median: 71.8, sd: 2.2 }, { age_months: 12, median: 76.3, sd: 2.2 }, { age_months: 18, median: 81.5, sd: 2.3 },
{ age_months: 24, median: 86.4, sd: 2.3 }, { age_months: 36, median: 95.5, sd: 2.5 }, { age_months: 48, median: 104.0, sd: 2.6 }
],
female: [
{ age_months: 0, median: 49.1, sd: 1.9 }, { age_months: 3, median: 59.1, sd: 2.0 }, { age_months: 6, median: 66.4, sd: 2.1 },
{ age_months: 9, median: 70.7, sd: 2.1 }, { age_months: 12, median: 75.3, sd: 2.1 }, { age_months: 18, median: 80.5, sd: 2.2 },
{ age_months: 24, median: 85.2, sd: 2.3 }, { age_months: 36, median: 94.1, sd: 2.4 }, { age_months: 48, median: 102.7, sd: 2.5 }
]
},
weight: {
male: [
{ age_months: 0, median: 3.5, sd: 0.7 }, { age_months: 3, median: 6.1, sd: 0.9 }, { age_months: 6, median: 7.8, sd: 0.9 },
{ age_months: 9, median: 8.9, sd: 1.0 }, { age_months: 12, median: 9.7, sd: 1.1 }, { age_months: 18, median: 11.0, sd: 1.3 },
{ age_months: 24, median: 12.0, sd: 1.4 }, { age_months: 36, median: 13.7, sd: 1.6 }, { age_months: 48, median: 15.3, sd: 1.8 }
],
female: [
{ age_months: 0, median: 3.2, sd: 0.7 }, { age_months: 3, median: 5.6, sd: 0.8 }, { age_months: 6, median: 7.2, sd: 0.9 },
{ age_months: 9, median: 8.2, sd: 0.9 }, { age_months: 12, median: 9.0, sd: 1.0 }, { age_months: 18, median: 10.3, sd: 1.2 },
{ age_months: 24, median: 11.3, sd: 1.3 }, { age_months: 36, median: 12.9, sd: 1.5 }, { age_months: 48, median: 14.5, sd: 1.7 }
]
},
headCircumference: {
male: [
{ age_months: 0, median: 35.3, sd: 1.5 }, { age_months: 3, median: 39.5, sd: 1.3 }, { age_months: 6, median: 42.7, sd: 1.3 },
{ age_months: 9, median: 44.4, sd: 1.3 }, { age_months: 12, median: 45.8, sd: 1.3 }, { age_months: 18, median: 47.0, sd: 1.3 },
{ age_months: 24, median: 47.8, sd: 1.4 }, { age_months: 36, median: 49.0, sd: 1.4 }, { age_months: 48, median: 49.9, sd: 1.5 }
],
female: [
{ age_months: 0, median: 34.8, sd: 1.5 }, { age_months: 3, median: 38.6, sd: 1.3 }, { age_months: 6, median: 41.7, sd: 1.3 },
{ age_months: 9, median: 43.4, sd: 1.3 }, { age_months: 12, median: 44.8, sd: 1.3 }, { age_months: 18, median: 46.0, sd: 1.3 },
{ age_months: 24, median: 46.8, sd: 1.3 }, { age_months: 36, median: 47.9, sd: 1.4 }, { age_months: 48, median: 48.7, sd: 1.4 }
]
}
};
// Function to find the closest data point for a given age
function findGrowthData(type, sex, ageMonths) {
var dataPoints = growthData[type][sex];
if (!dataPoints || dataPoints.length === 0) {
return null;
}
// Find the closest age point
var closestPoint = dataPoints[0];
var minDiff = Math.abs(ageMonths – dataPoints[0].age_months);
for (var i = 1; i < dataPoints.length; i++) {
var diff = Math.abs(ageMonths – dataPoints[i].age_months);
if (diff = 0) ? 1 : -1;
x = Math.abs(x);
var t = 1.0 / (1.0 + p * x);
var y = 1.0 – (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
return sign * y;
};
var cdf = 0.5 * (1 + erf(zScore / Math.sqrt(2)));
return cdf * 100;
}
function calculateCentile() {
var measurementType = document.getElementById("measurement").value;
var ageMonths = parseInt(document.getElementById("ageMonths").value);
var measurementValue = parseFloat(document.getElementById("measurementValue").value);
var unit = document.getElementById("unit").value;
var sex = "male"; // Default to male, ideally this would be an input
// Basic validation
if (isNaN(ageMonths) || isNaN(measurementValue) || ageMonths <= 0 || measurementValue <= 0) {
document.getElementById("result").innerHTML = "Please enter valid positive numbers for age and measurement.";
document.getElementById("result").style.display = "block";
document.getElementById("result").style.backgroundColor = "#f8d7da"; // Error color
return;
}
// Adjust units based on measurement type
var adjustedUnit = unit;
if (measurementType === "height" && unit === "cm_hc") adjustedUnit = "cm";
if (measurementType === "weight" && unit === "cm") adjustedUnit = "kg"; // Basic conversion if wrong unit entered
if (measurementType === "headCircumference" && unit === "kg") adjustedUnit = "cm_hc";
// Find the relevant data
var growthPoint = findGrowthData(measurementType, sex, ageMonths);
if (!growthPoint) {
document.getElementById("result").innerHTML = "Data not available for the specified age or type.";
document.getElementById("result").style.display = "block";
document.getElementById("result").style.backgroundColor = "#f8d7da";
return;
}
var median = growthPoint.median;
var sd = growthPoint.sd;
// Calculate Z-score
var zScore = (measurementValue – median) / sd;
// Calculate Centile
var centile = approximateCentile(zScore);
// Clamp centile to be between 0 and 100
centile = Math.max(0, Math.min(100, centile));
var resultText = "Approximate Centile: " + centile.toFixed(1) + "th";
document.getElementById("result").innerHTML = resultText;
document.getElementById("result").style.display = "block";
document.getElementById("result").style.backgroundColor = "var(–success-green)"; // Success color
}