2x2分割表のオッズ比計算ツール
この計算ツールは、2x2分割表の4つの度数を使い、2群における結果のオッズを比較します。群1の結果ありと結果なしをaとbに、群2の対応する度数をcとdに入力してください。オッズ比に加え、各群のオッズ、計算に使った交差積が表示されるため、結果を容易に確認して再利用できます。
無料で実行
4つの度数を正しく配置します
オッズ比は2x2分割表から求めるため、各度数を置く位置が重要です。群1で結果がある人または項目の数をセルaに、結果がない数をセルbに入力します。群2で結果がある数はセルc、結果がない数はセルdに入力します。つまり、1行目がaとb、2行目がcとdです。両群では結果の定義を必ず同一にしてください。行ごとに意味が異なると、比較は成立しません。セルは割合、率、計算済みのオッズではなく度数を表すため、0以上の整数を入力します。計算前に、各観測が1つのセルだけに属し、4セルで対象集団全体を表しているか確認してください。曝露ありとなし、治療群と対照群、症例と非症例など、明確なラベルを付けると比較方向の取り違えを防げます。群の行を入れ替えるとオッズ比は逆数になりますので、入力前にどちらを群1とするか決めてください。
計算方法と結果を理解します
群1のオッズはaをbで割った値、群2のオッズはcをdで割った値です。オッズ比は両者を(a / b) / (c / d)で比較します。この式は代数的に交差積の式(a × d) / (b × c)へ整理でき、本ツールもこの式を使用します。結果が1なら、観測されたオッズは両群で同じです。1より大きければ群1の結果オッズが群2より高く、0から1の間なら群1のほうが低いことを示します。たとえばオッズ比2はオッズが2倍という意味であり、確率が2倍という意味ではありません。オッズと確率は関連しますが、特に結果が一般的な場合は同じものとして扱えません。返される分子と分母から交差積を確認できるため、計算を監査できます。各群のオッズは、予想外の比が表の向きによるものか度数によるものかを判断する助けにもなります。研究デザイン、標本サイズ、不確実性、専門分野の文脈と併せて値を解釈してください。
ゼロのセルを扱い、慎重に解釈します
直接式の分母はb × cです。bまたはcが0なら分母が0になるため、本機能は無限大や曖昧な値を返さず、入力エラーを返します。これは意図した動作です。単独の無限推定値は一貫して利用しにくく、疎なデータの問題を隠す可能性があります。統計手法によっては、全セルに小さな定数を加える連続性補正を使いますが、この補正は推定量を変えます。計算ツールが暗黙に適用するのではなく、分析上の判断として明示的に選ぶ必要があります。bとcが正ならaまたはdが0でも構いません。その場合、分子とオッズ比は0です。ゼロのセルがなくても、点推定だけでは精度を示せません。報告や推論では、信頼区間と適切な有意性検定を併記してください。また、関連は因果関係を証明しません。交絡、選択、測定、標本抽出はいずれも2x2分割表に影響します。APIは1リクエスト当たり$0.002で、同じ決定的な計算は度数を外部へ送らずブラウザ内でも実行できます。
活用例
治療群と対照群の結果を比較
2つの研究群における事象あり・なしの度数から、相対的な結果オッズを要約します。
症例対照研究の曝露表を分析
度数の向きを統一して配置した後、症例群と対照群の曝露オッズを比較します。
公表済みクロス集計表を確認
オッズ比を再計算し、分子、分母、各群のオッズを個別に点検します。
よくある質問
オッズ比の計算式は何ですか?
群1の結果ありをa、なしをb、群2の結果ありをc、なしをdとすると、式は(a × d) / (b × c)です。
オッズ比が1とはどういう意味ですか?
観測された結果のオッズが群1と群2で同じであることを意味します。
分母が0だとなぜエラーになりますか?
bまたはcが0なら交差積の分母b × cが0となり、直接求めるオッズ比は有限ではないため、指定の推定量を返せません。
連続性補正は自動で加えられますか?
いいえ。入力された4つの度数をそのまま使い、ゼロまたは疎なセルへ定数を暗黙に加えることはありません。
オッズ比とリスク比は同じですか?
いいえ。オッズ比はオッズを、リスク比は確率を比較します。結果が一般的な場合、両者は大きく異なることがあります。
APIリクエストの料金はいくらですか?
APIリクエスト1件の料金は$0.002です。ブラウザ版はローカルで無料実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/stat/odds-ratio \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"a":30,"b":70,"c":20,"d":80}'const res = await fetch("https://api.kit.forhosting.com/stat/odds-ratio", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"a": 30,
"b": 70,
"c": 20,
"d": 80
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/odds-ratio",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"a": 30,
"b": 70,
"c": 20,
"d": 80
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/odds-ratio", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"a":30,"b":70,"c":20,"d":80}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"a":30,"b":70,"c":20,"d":80}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/odds-ratio", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"a": 30,
"b": 70,
"c": 20,
"d": 80
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.odds_ratio",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |