Hedges g effect size
Compare two groups on a common scale: with means of 10 and 8, standard deviations of 2 and 30 people in each group, Cohen's d is 1 and Hedges' g is 0.987013 after the small-sample correction. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Group 1 mean
- 10
- Group 2 mean
- 8
- Group 1 SD
- 2
- Group 2 SD
- 2
- Group 1 n
- 30
- Group 2 n
- 30
- Pooled sd
- 2
- Cohens d
- 1
- J
- 0.987013
- Hedges g
- 0.987013
Hedges g = J × Cohen d with pooled SD. Search intent: hedges g calculator. No network calls or random seeds are required. Failed jobs are not billed.
What Hedges' g measures
Hedges' g puts the difference between two groups on a scale that does not depend on the units of measurement. It takes the gap between the two means and divides it by the pooled standard deviation, which combines the spread of both groups; that ratio is Cohen's d. It then multiplies d by a correction factor J, which is a little below 1 and pulls the estimate slightly towards zero. You enter the mean, the standard deviation and the number of people or items in each group. With means of 10 and 8, standard deviations of 2 in both groups and 30 in each, the pooled standard deviation is 2, d is 1, J is 0.987013 and Hedges' g is 0.987013.
How it is calculated, and the slips to avoid
The steps are short. Subtract the second mean from the first and divide by the pooled standard deviation to get d. Then compute J as one minus three divided by four times the degrees of freedom minus one, and multiply. Because the degrees of freedom grow with the group sizes, J moves towards 1 and the correction matters most for small groups. The order of the groups decides the sign, so keep it consistent when you compare studies. If you ask for a fixed number of decimals, the exact result is rounded once, with halves going up, and every value is checked before any arithmetic, so an impossible input is refused rather than turned into a number.
What you can do with it
Teaching
Pinned goldens.
FAQ
What is Hedges' g?
It is an effect size: the gap between two group means expressed in pooled standard deviations, multiplied by a correction factor J whose effect is largest when the groups are small.
How is Hedges' g different from Cohen's d?
Hedges' g is Cohen's d multiplied by J, a factor just below 1. In the example with 30 people per group, d is 1 and J is 0.987013, so g comes out at 0.987013.
How is the correction factor J calculated?
J is one minus three divided by four times the degrees of freedom minus one. The degrees of freedom grow with both group sizes, so the correction shrinks as the groups get larger.
What does a negative Hedges' g mean?
It means the first group's mean is below the second's, because the difference is taken as the first mean minus the second. Swapping the groups flips the sign but leaves the size of the effect unchanged.
Related tools
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/hedges-g \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"mean1":10,"mean2":8,"sd1":2,"sd2":2,"n1":30,"n2":30}'const res = await fetch("https://api.kit.forhosting.com/stat/hedges-g", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"mean1": 10,
"mean2": 8,
"sd1": 2,
"sd2": 2,
"n1": 30,
"n2": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/hedges-g",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"mean1": 10,
"mean2": 8,
"sd1": 2,
"sd2": 2,
"n1": 30,
"n2": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/hedges-g", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"mean1":10,"mean2":8,"sd1":2,"sd2":2,"n1":30,"n2":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"mean1":10,"mean2":8,"sd1":2,"sd2":2,"n1":30,"n2":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/hedges-g", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"mean1": 10,
"mean2": 8,
"sd1": 2,
"sd2": 2,
"n1": 30,
"n2": 30
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.hedges_g",
"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. |
Technical notes
The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS, automation, or teaching demos.
How it works
Hedges g = J × Cohen d with pooled SD. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Failed jobs are not billed. J=1−3/(4df−1); d=(m1−m2)/s_pooled. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS, automation, or teaching demos.
Inputs, limits and rounding
Optional decimals use half-up once. Outputs echo inputs. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Failed jobs are not billed. Provide required JSON fields. Invalid types raise invalid_input. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS, automation, or teaching demos.
When to use it
Use when search intent matches. Hedges g = J × Cohen d with pooled SD. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Failed jobs are not billed. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS, automation, or teaching demos.
Integration use cases
Quick check
Free widget.
Automation
Same JSON via API.
Technical questions
Free?
Yes tier A.
Network?
No.
Bad input?
invalid_input.
API?
Yes.
Locales?
EN-only; Nitro hydrates.