クラマーの V
【概要】
クラマーのV(Cramér's V)は、r 行 × c 列の分割表(クロス集計表)における、2つのカテゴリ変数(名義変数、順序や大小のない分類のための変数)間の関連の強さを示す指標である。値は 0 以上 1 以下の範囲をとり、1 に近いほど関連が強い。クラマーの連関係数(Cramer's coefficient of association)とも呼ばれる。分割表のカイ二乗値を χ²、データの総件数(サンプルサイズ)を n とすると、クラマーの V は次の式で計算される。
V = √( χ² / ( n × min(r-1, c-1) ) )
Pythonでは、SciPy の scipy.stats.contingency.association 関数を使うことで、この計算を1行で行える。
【目次】
【関連する外部ページ】
【サイト内の関連情報】
クラマーのVとは
クラマーのVは、2つのカテゴリ変数(名義変数)を集計した分割表(クロス集計表)から、両者の間にどの程度の関連があるかを数値で示す指標である。例えば「性別」と「購入商品」のように、大小関係を持たない分類データどうしの関連の強さを調べる場面で使われる。値は 0 から 1 の範囲をとり、0 は関連がないことを示し、1 に近づくほど関連が強いことを示す。分割表の行数と列数が異なる場合にも使える点が特徴であり、2 行 2 列の分割表限定のファイ係数(φ係数)を、行数・列数が任意の分割表へ拡張したものと位置づけられる。
クラマーのVは、カイ二乗検定(分割表における2変数の独立性を検定する手法)と組み合わせて使われることが多い。カイ二乗検定は「関連があるかどうか」を判定する検定であるのに対し、クラマーのVは「関連がどの程度強いか」を数値で示す効果量(統計的な差や関連の大きさを表す指標)である。
Python環境の準備
クラマーのVの計算には、分割表の作成に使うpandasと、クラマーのVの計算に使うSciPyを用いる。両方とも、Pythonのパッケージ管理ツールpipでインストールできる。
管理者権限でコマンドプロンプトを起動する
(手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。
python -m pip install --no-user -U pip
pip install --no-user --upgrade pandas scipy
クラマーのVの計算
分割表がすでに数値の配列として得られている場合は、SciPy のscipy.stats.contingency.association関数に、その配列とmethod="cramer"を渡すだけで、クラマーのVを計算できる。次のコードは、4行2列の分割表からクラマーのVを求める例である。
import numpy as np
from scipy.stats.contingency import association
# 分割表(4行2列)を作成する
observed = np.array([[100, 150], [203, 322], [420, 700], [320, 210]])
# クラマーのVを計算する
v = association(observed, method="cramer")
print("クラマーの V:", v)
実際のデータでは、分割表そのものが最初から用意されていることは少なく、個々の記録(レコード)から分割表を作る必要がある。この作成には、pandasのcrosstab関数(2つの列の値ごとの件数を集計してクロス集計表を作る関数)を使う。次のコードは、性別と購入商品というカテゴリデータから分割表を作り、クラマーのVを計算する例である。
import pandas as pd
from scipy.stats.contingency import association
# カテゴリデータ(性別と購入商品)を作成する
data = pd.DataFrame({
"性別": ["男性", "男性", "女性", "女性", "男性", "女性", "男性", "女性"],
"購入商品": ["A", "B", "A", "B", "A", "A", "B", "B"]
})
# 分割表(クロス集計表)を作成する
cross = pd.crosstab(data["性別"], data["購入商品"])
print(cross)
# クラマーのVを計算する
v = association(cross, method="cramer")
print("クラマーの V:", v)
scipy.stats.contingency.associationは、method引数の値によって、クラマーのVのほかに、ツシュプロフのT(Tschuprow's T)やピアソンの連関係数(Pearson's contingency coefficient)も計算できる。既定値はmethod="cramer"であり、明示しない場合はクラマーのVが計算される。