HDI Education Index Calculator
The HDI education index calculator combines two complementary measures of access to education: the average years of schooling completed by adults and the years of schooling a child can expect to receive.
Run — free
It normalizes mean years of schooling against a 15-year goalpost and expected years against an 18-year goalpost, then averages the two resulting indices. The result is a dimensionless score from zero to one that can be used as the education component in Human Development Index analysis.
What the education dimension index represents
The Human Development Index treats education as a combination of attained schooling and the opportunity available to the next generation. Mean years of schooling summarizes the completed education of people aged 25 and older, so it changes gradually and reflects accumulated outcomes over many years. Expected years of schooling estimates how many years a child entering school can receive if current age-specific enrollment patterns continue. Looking at either measure alone can hide an important part of the picture. A country may have recently expanded enrollment while its adult population still has relatively little formal education, or it may have well-educated adults while present-day access is weakening. The education dimension index gives both perspectives equal weight after putting them on comparable scales. Its value ranges from zero, when both inputs are zero, to one, when both reach their respective goalposts. It is an index for comparison and aggregation, not a direct count of school quality, learning outcomes, literacy, inequality, or educational spending.
How the goalpost normalization is calculated
Enter mean years of schooling between zero and 15 and expected years of schooling between zero and 18. The calculator divides the first value by 15 to produce the mean years of schooling index. It divides the second value by 18 to produce the expected years of schooling index. Because both minimum goalposts are zero, no subtraction is needed before division. The final education index is the arithmetic mean of those two normalized values: add the component indices and divide by two. For example, a mean-schooling value of 7.5 produces a component index of 0.5, while an expected-schooling value of 13.5 produces 0.75; their education index is 0.625. Results are rounded to six decimal places for stable reporting, while the calculation uses the full numeric inputs before rounding. Values beyond the goalposts are rejected instead of silently producing an index outside the intended zero-to-one scale, and non-numeric, missing, infinite, or negative values are reported as invalid input.
How to interpret and use the result responsibly
Use the returned education index as a normalized summary of the two schooling-duration indicators for the same place and reference period. A higher result means the supplied values sit closer, on average, to the education goalposts; it does not prove that students learn more, that access is equally distributed, or that schools provide better instruction. When comparing countries, regions, or years, confirm that both source indicators use compatible definitions and observation periods. Revisions to enrollment estimates or adult educational-attainment data can change the result even when the formula stays fixed. The response includes both component indices and both goalposts, making the calculation auditable and helping you see which input is driving a difference. For broader HDI work, combine this education dimension index with separately calculated health and income dimension indices according to the applicable HDI method. Keep the unrounded source inputs with your analysis, document their source, and avoid treating small differences in rounded index values as meaningful rankings without considering uncertainty and data quality.
What you can do with it
Prepare an HDI calculation
Compute the normalized education component before combining it with health and income dimension indices.
Compare education indicators
Place adult attainment and expected schooling on comparable scales to identify which component explains a gap.
Audit a published result
Reproduce an education index from its two source values and inspect the component indices and goalposts.
FAQ
What formula does the calculator use?
It averages mean years of schooling divided by 15 and expected years of schooling divided by 18.
Why are the goalposts 15 and 18 years?
They are the maximum goalposts used to normalize the two schooling measures for the HDI education dimension.
What range can the education index have?
With inputs inside the declared goalposts, the index ranges from zero to one inclusive.
Does this calculate the complete Human Development Index?
No. It calculates only the education dimension index; a complete HDI also requires health and income dimension indices.
What does an API request cost?
Each API request costs $0.002; the browser calculator is available without an API request.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/econ/hdi-education-index \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mean_years_schooling":8.5,"expected_years_schooling":13.2}'const res = await fetch("https://api.kit.forhosting.com/econ/hdi-education-index", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mean_years_schooling": 8.5,
"expected_years_schooling": 13.2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/econ/hdi-education-index",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mean_years_schooling": 8.5,
"expected_years_schooling": 13.2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/econ/hdi-education-index", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mean_years_schooling":8.5,"expected_years_schooling":13.2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mean_years_schooling":8.5,"expected_years_schooling":13.2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/econ/hdi-education-index", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"mean_years_schooling": 8.5,
"expected_years_schooling": 13.2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "econ.hdi_education_index",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |