Atkinson Index Calculator for Income Inequality
The Atkinson index calculator measures inequality in a set of positive incomes while making society's sensitivity to inequality explicit.
Run — free
Enter the observations and a non-negative inequality aversion parameter to receive the arithmetic mean, equally distributed equivalent income, and Atkinson index. Unlike a measure with one fixed weighting of the income distribution, this result lets analysts examine how conclusions change when greater importance is assigned to income differences near the lower end. The calculation is deterministic, equally weights every observation, and rejects zero, negative, missing, or non-finite values.
What the Atkinson index measures
The Atkinson index summarizes the welfare cost of unequal incomes on a scale that normally runs from zero toward one. Zero means every listed person has the same income. A larger value indicates that more of the population's mean income would be considered unnecessary if the same level of social welfare could be achieved through an equal distribution. That interpretation comes from the equally distributed equivalent income, often abbreviated EDE. The EDE is the equal income per person that produces the same modeled welfare as the observed distribution. The calculator divides that equivalent income by the arithmetic mean and subtracts the ratio from one. For example, an index of 0.20 means the model regards an equal distribution at 80 percent of current mean income as welfare-equivalent, given the selected aversion. This is a normative statistic, not a claim that income can literally be discarded without consequences. It describes the implications of the chosen welfare function and should be presented together with its parameter and the population represented by the data.
Choose the inequality aversion parameter
The inequality aversion parameter, usually written epsilon, controls how strongly low incomes influence the result. At zero, the index is zero for every valid distribution because only total and mean income matter. As epsilon increases, transfers toward people with lower incomes receive more weight, and a distribution with substantial gaps generally produces a larger index. When epsilon equals one, the EDE is the geometric mean; the calculator uses that exact logarithmic form. For other values, it applies the generalized-mean definition using logarithms for numerical stability. There is no universally correct epsilon. Values such as 0.5, 1, 1.5, or 2 appear in applied work, but the suitable choice depends on the ethical assumptions, institution, and comparison being made. A good analysis reports results for several plausible values instead of hiding the sensitivity in one preferred number. Always compare populations with the same epsilon. Changing both the data and aversion between cases makes it impossible to tell whether a difference comes from observed inequality or from the analyst's chosen weighting. Negative aversion is rejected because it falls outside this calculator's supported inequality-averse model.
Prepare data and interpret comparisons
Supply one finite, strictly positive income for each equally weighted observation. Use values measured over the same period and expressed consistently, such as annual disposable household income adjusted for household size. Do not mix monthly and annual figures, currencies, nominal and inflation-adjusted amounts, or individual and household definitions. The calculator does not attach survey weights, equivalence scales, taxes, transfers, or purchasing-power adjustments; perform those transformations before submitting the list. Zero incomes are rejected because logarithms and negative-power cases are undefined or unbounded, so decide on a documented statistical treatment before using a data set that contains them. When comparing regions or years, keep the income concept, sample construction, and aversion parameter constant. Review the returned mean and EDE alongside the index: they make unit mistakes and implausible inputs easier to detect. The Atkinson index is scale invariant, so multiplying every income by the same positive conversion factor leaves the index unchanged, although the mean and EDE change. It is still valuable to pair the result with distribution tables, sample sizes, and another inequality measure when communicating decisions, since one summary cannot reveal where every gap occurs.
What you can do with it
Compare inequality across years
Calculate each year with the same income definition and aversion values to track changes and test sensitivity.
Evaluate policy scenarios
Compare baseline and modeled post-policy income distributions while making the assumed concern for lower incomes explicit.
Check research calculations
Reproduce an Atkinson statistic together with its mean and equally distributed equivalent income for an audit trail.
FAQ
What does the Atkinson index cost?
Each API calculation costs $0.002; the browser calculator is available for interactive use.
What range does the result have?
For valid positive incomes and non-negative aversion, it is normally between zero inclusive and one exclusive; zero indicates equal incomes.
Why must every income be positive?
The formula uses logarithms or powers that are undefined or unbounded for zero and negative income in supported cases.
What happens when inequality aversion equals one?
The equally distributed equivalent income becomes the geometric mean, which is evaluated through natural logarithms for stability.
Does the calculator support survey weights?
No. Every array element receives equal weight, so expand or preprocess weighted survey data with an appropriate statistical method first.
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/stat/atkinson-index \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"incomes":[20,30,50,100],"inequality_aversion":1}'const res = await fetch("https://api.kit.forhosting.com/stat/atkinson-index", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"incomes": [
20,
30,
50,
100
],
"inequality_aversion": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/atkinson-index",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"incomes": [
20,
30,
50,
100
],
"inequality_aversion": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/atkinson-index", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"incomes":[20,30,50,100],"inequality_aversion":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"incomes":[20,30,50,100],"inequality_aversion":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/atkinson-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
{
"incomes": [
20,
30,
50,
100
],
"inequality_aversion": 1
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.atkinson_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. |