クラメールのV計算機:分割表の関連の強さを測定
クラメールのVは、2つのカテゴリ変数の関連の強さを0から1までの尺度で要約する指標です。観測度数を分割表の行列として入力すると、ピアソンのカイ二乗統計量を求め、実際に有効な表の次元と総度数で正規化します。カイ二乗検定で関連が示された後、比較可能な効果量も確認したい場合に役立ちます。応答には途中の統計量と使用した次元も含まれるため、計算内容を確認できます。
無料で実行
分割表を正しく準備してください
観測度数を長方形の行列に配置してください。各行は第1の変数の1カテゴリ、各列は第2の変数の1カテゴリを表します。各セルには、その行と列の組み合わせに属する観測数、または0以上の重み付き度数を入力します。行ごとに別々に正規化した割合は、実際に比較可能な重みとして扱える場合を除いて使用しないでください。クラメールのVは表内部の分布だけでなく周辺度数にも依存するためです。すべての行のセル数を同じにし、2行2列以上の行列にする必要があります。値は有限かつ0以上でなければなりません。通常の調査やイベントデータでは整数の度数を使いますが、重み付き分割表には小数も使用できます。すべて0の行または列は情報を持たず、期待度数0を生じさせるため、有効な次元から除外されます。ただし、表全体の合計は0より大きく、除外後も0でない行と列がそれぞれ2つ以上残っている必要があります。
計算方法を確認してください
最初に各行と各列を合計し、表全体の総度数を求めます。独立を仮定した各有効セルの期待度数は、行合計と列合計を掛け、その積を総度数で割った値です。ピアソンのカイ二乗統計量は、観測度数と期待度数の差を二乗し、期待度数で割った値を全セルについて合計して求めます。次にクラメールのVでは、カイ二乗を総度数と行・列の小さい方の自由度で正規化します。式は、カイ二乗を総度数×min(行数−1, 列数−1)で割った値の平方根です。この正規化により、生のカイ二乗よりも異なる大きさの表を比較しやすくなります。出力は`cramers_v`、`chi_square`、`total`、`rows`、`columns`です。行数と列数には実際に使われた0でない次元が示されます。0に近ければ独立からのずれが小さく、1に近ければ強いカテゴリ関連を示します。ただし実務上の意味は、分野、標本設計、カテゴリ構成に応じて判断してください。
結果を過大評価せず解釈してください
クラメールのVは効果量の要約であり、因果関係の証明でも有意性検定の代替でもありません。標本が大きいと弱い関連でも有意なカイ二乗が得られることがあり、標本が小さいと重要に見えるパターンでも不確実な場合があります。Vだけでなく、各セルの度数、期待度数、標本抽出法、分野の背景も併せて確認してください。「弱い」「中程度」「強い」といった表現は大まかな目安にすぎず、有用な基準はカテゴリ数や判断の影響によって変わります。期待度数が小さい疎な表では、通常のカイ二乗近似が信頼できない場合があるため、特に注意が必要です。その場合は、妥当な根拠に基づくカテゴリの統合、観測数の追加、正確検定やシミュレーション検定をご検討ください。また、1つのV値だけでは関連を生むセルを特定できません。方向や詳細が必要な場合は、標準化残差や観測度数と期待度数の比較をご覧ください。再現可能な強度指標として利用し、表、標本数、カイ二乗、研究上の仮定も併記することをお勧めします。
活用例
アンケート回答を比較する
回答カテゴリと地域、コホート、チャネルなどのグループとの関連の強さを測定します。
実験結果を評価する
度数表を作成した後、カテゴリ型の処置とカテゴリ型の結果との関連を要約します。
製品セグメントを監視する
生のカイ二乗だけに頼らず、顧客セグメントと行動との関連を追跡します。
よくある質問
計算料金はいくらですか?
このページのブラウザー上では無料で実行でき、APIリクエストは$0.002です。
クラメールのVの範囲はどこまでですか?
通常は、観測された関連がない0から、その表で可能な最も強い関連を示す1までです。
表に小数値を含められますか?
はい。適切に作成された重み付き表では、有限かつ0以上の小数度数を使用できます。
すべて0の行や列はどうなりますか?
観測を含まないため有効な次元から除外されます。0でない行と列がそれぞれ2つ以上残る必要があります。
合計0の表がエラーになるのはなぜですか?
期待度数と正規化では総度数で割るため、すべてのセルが0の場合、クラメールのVは定義できません。
クラメールのVで一方の変数が他方の原因だと証明できますか?
いいえ。入力された表の関連の強さを表す指標であり、方向性や因果関係は示しません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/stat/cramers-v \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"table":[[20,30],[30,20]]}'const res = await fetch("https://api.kit.forhosting.com/stat/cramers-v", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"table": [
[
20,
30
],
[
30,
20
]
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/cramers-v",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"table": [
[
20,
30
],
[
30,
20
]
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/cramers-v", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"table":[[20,30],[30,20]]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"table":[[20,30],[30,20]]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/cramers-v", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"table": [
[
20,
30
],
[
30,
20
]
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.cramers_v",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |