Eta squared calculator
The eta squared calculator turns two ANOVA summary values into an immediately interpretable effect size.
Run — free
Enter the between-group sum of squares and the total sum of squares, and it returns the proportion and percentage of observed variance associated with the grouping factor. This is useful when an ANOVA table reports statistical significance but you also need to describe practical magnitude. The calculation is deterministic, runs without external data, and clearly rejects a zero total because the requested ratio would be undefined.
What eta squared measures
Eta squared is an effect-size measure commonly reported with analysis of variance. It answers a different question from the p-value. A p-value evaluates how compatible the observed data are with a null model under stated assumptions, while eta squared describes how much of the observed total variation is associated with the factor being studied. The value is a proportion between zero and one when the sums of squares form a valid ANOVA decomposition. A result of 0.30, for example, means that 30 percent of the total observed variance is attributed to differences between the groups in that analysis. This description should stay tied to the fitted data and design: it does not by itself establish causation, guarantee replication, or tell you whether an effect matters in a particular field. Use the calculator when you already have the sums of squares from an ANOVA table and want a transparent descriptive effect size that readers can interpret alongside inferential statistics, sample sizes, uncertainty intervals, and domain knowledge.
How the calculation works
The formula is eta squared equals the between-group sum of squares divided by the total sum of squares. The numerator represents variation assigned to differences among the group means, and the denominator represents all variation around the grand mean included in the analysis. This calculator validates both values before dividing. Each must be a finite, non-negative number, the total must be greater than zero, and the between-group value cannot exceed the total. A total of zero means every included observation has no variation around the grand mean, so dividing by it cannot produce a defined proportion. When the inputs are valid, the tool returns the raw eta-squared ratio and the same quantity multiplied by 100 as the variance-explained percentage. No degrees of freedom or error mean square are required. That simplicity distinguishes eta squared from bias-adjusted alternatives such as omega squared, which use more information from the ANOVA table and can yield a more conservative estimate.
How to report and interpret the result
Report enough context for someone else to understand what was divided. Name the factor, give eta squared, and identify the analysis or outcome to which it applies. Including the two sums of squares makes the calculation auditable, while a percentage can make the magnitude easier for a general audience to read. Avoid treating universal small, medium, and large thresholds as laws. Conventions differ across disciplines, designs, outcomes, and research questions, so interpretation should draw on comparable studies and practical consequences. Eta squared is sample-descriptive and is often upward biased as an estimate of the corresponding population effect, especially with smaller samples or many groups. If population estimation is the aim, consider reporting omega squared or another adjusted measure as well. Also remember that variance explained is not the same as the percentage of individual outcomes caused by the factor. In observational research, confounding and model specification still matter. The calculator supplies accurate arithmetic; sound reporting still requires the assumptions and limitations of the underlying ANOVA.
What you can do with it
Complete an ANOVA report
Convert sums of squares from an ANOVA table into an effect size that complements the significance test.
Check a published calculation
Recompute a reported eta squared from disclosed between-group and total sums of squares.
Explain magnitude clearly
Present the result as both a proportion and a percentage for technical and general readers.
FAQ
What does this calculator cost?
It costs $0.002 per API request and can also run free in the browser.
What formula does it use?
It divides the between-group sum of squares by the total sum of squares: eta squared = SS between / SS total.
Why must the total sum of squares be greater than zero?
A zero total would make the denominator zero, so eta squared would be undefined rather than a valid proportion.
Is eta squared the same as omega squared?
No. Eta squared is the direct sums-of-squares ratio, while omega squared applies a correction using degrees of freedom and the error mean square.
Can eta squared prove that the grouping factor caused the outcome?
No. It describes variance associated with the factor in the fitted analysis; causal interpretation depends on the study design and assumptions.
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/eta-squared \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"ss_between":24,"ss_total":80}'const res = await fetch("https://api.kit.forhosting.com/stat/eta-squared", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"ss_between": 24,
"ss_total": 80
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/eta-squared",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"ss_between": 24,
"ss_total": 80
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/eta-squared", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"ss_between":24,"ss_total":80}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"ss_between":24,"ss_total":80}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/eta-squared", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"ss_between": 24,
"ss_total": 80
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.eta_squared",
"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. |