Absolute risk reduction calculator
The absolute risk reduction calculator compares an event rate in a control group with the corresponding rate in a treatment group.
Run — free
Enter each rate as a decimal from zero to one, and the calculator subtracts the treatment rate from the control rate. The result shows the direct change in risk, both as a decimal and in percentage points. It is useful for reading clinical studies, checking evidence summaries, comparing interventions, and communicating the size and direction of an observed effect without confusing it with relative risk reduction.
What absolute risk reduction measures
Absolute risk reduction, often abbreviated ARR, measures the difference between the event rate in a control group and the event rate in a treatment group. The calculation is control event rate minus treatment event rate. If the control rate is 0.20 and the treatment rate is 0.12, the absolute risk reduction is 0.08, which is also eight percentage points. This absolute difference answers a practical question: how much less frequently did the event occur in the treated group over the study period? It does not scale the difference relative to the control rate, so it remains anchored to the observed baseline risk. That distinction matters because a large relative change can correspond to a small absolute change when the event is rare. A positive result indicates fewer events in the treatment group. A result of zero indicates equal event rates. A negative result indicates that the event was more common in the treatment group, so the value represents an absolute risk increase rather than a reduction. Interpretation should always retain the event definition, follow-up period, population, and uncertainty reported by the source study.
How to enter rates and read the result
Enter both event rates as proportions between 0 and 1 inclusive. A rate of 15% should therefore be entered as 0.15, not 15. The control event rate belongs to the comparison group receiving a placebo, usual care, no intervention, or another reference treatment. The treatment event rate belongs to the group receiving the intervention being evaluated. The calculator returns the original rates, the absolute risk reduction as a decimal, and the same difference in percentage points. Percentage points are not the same as percent change: moving from 20% to 12% is a decrease of eight percentage points, while the relative decrease is 40%. Keeping those expressions separate prevents a common reporting error. Values outside the permitted interval are rejected because they cannot represent event rates. The calculator also rejects missing values, text, infinities, and other non-finite inputs. It permits boundary values such as zero and one, which can occur in small samples, although extreme observed rates deserve careful attention to sample size and confidence intervals.
Using the result responsibly
ARR is most informative when it is read beside the raw event counts, sample sizes, confidence interval, and duration of observation. Two studies can report the same relative effect yet produce different absolute reductions because their control groups begin at different levels of risk. That is why ARR can help clinicians, researchers, policy teams, and readers judge practical impact in a specific population. The value can also support a number-needed-to-treat calculation when the ARR is positive and nonzero: number needed to treat is the reciprocal of ARR. This calculator deliberately does not produce that secondary measure, infer causality, adjust for confounding, or estimate statistical uncertainty. It performs the deterministic subtraction only. A negative answer should not be relabeled as a benefit; it means the treatment group had a higher event rate for the outcome as entered. Also confirm whether the event is harmful or beneficial. For a harmful event, a lower treatment rate is generally favorable. For a beneficial event, such as recovery, the same subtraction may not describe benefit in the intended direction, and an absolute benefit increase may be clearer.
What you can do with it
Interpret a clinical trial
Compare the reported control and treatment event rates to see the observed difference in risk in directly understandable percentage points.
Check an evidence summary
Recalculate an ARR from published rates and verify that an absolute effect has not been confused with a relative percentage change.
Communicate treatment impact
Turn two decimal event rates into a concise absolute difference for a report, presentation, or shared decision-making discussion.
FAQ
What formula does the calculator use?
It subtracts the treatment event rate from the control event rate: ARR = control event rate − treatment event rate.
Should I enter percentages or decimals?
Enter decimals from 0 to 1. For example, enter 18% as 0.18. The output includes the difference in percentage points.
What does a negative result mean?
It means the treatment event rate is higher than the control event rate. For a harmful outcome, this is an absolute risk increase, not a reduction.
Is absolute risk reduction the same as relative risk reduction?
No. ARR is the direct difference between rates. Relative risk reduction divides that difference by the control event rate.
Can this result prove that a treatment works?
No. The calculation summarizes two supplied rates. Causal interpretation also depends on study design, uncertainty, bias, population, outcome definition, and follow-up.
What does the API calculation cost?
Each API request costs $0.002. The same deterministic calculation can also run in the browser.
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/absolute-risk-reduction \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"control_event_rate":0.2,"treatment_event_rate":0.12}'const res = await fetch("https://api.kit.forhosting.com/stat/absolute-risk-reduction", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"control_event_rate": 0.2,
"treatment_event_rate": 0.12
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/absolute-risk-reduction",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"control_event_rate": 0.2,
"treatment_event_rate": 0.12
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/absolute-risk-reduction", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"control_event_rate":0.2,"treatment_event_rate":0.12}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"control_event_rate":0.2,"treatment_event_rate":0.12}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/absolute-risk-reduction", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"control_event_rate": 0.2,
"treatment_event_rate": 0.12
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.absolute_risk_reduction",
"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. |