📊
pythonでクラメール連関係数を計算する
クラメール連関係数とは?
「カテゴリーデータ」と「カテゴリーデータ」との間の関連の強さを示す相関係数.
期待度数を算出し,実測度数と一致していれば関係がなく,一致していなければ関係があるという考え方に基づいている.
とりあえず手っ取り早く結果を得たい場合のcode
import numpy as np
import pandas as pd
df = pd.DataFrame()
### 関数
def cramersV(x, y):
table = np.array(pd.crosstab(x, y)) #クロス集計
n = table.sum() #実測度数
colsum = table.sum(axis=0) #縦計
rowsum = table.sum(axis=1) #横計
expect = np.outer(rowsum, colsum) / n #期待度数
chisq = np.sum((table - expect) ** 2 /expect) #カイ二乗値
return np.sqrt(chisq / (n * (min(table.shape) -1))) #クラメール連関係数
name = []
result = []
for column_name, item in df.iteritems():
name.append(column_name)
x = cramersV(df[x], item)
result.append(x)
# データフレーム化
df_result = pd.DataFrame({'factor':name, 'cramersV':result})
df_result
クラメール連関係数の算出ステップ
- クロス集計表の横計,縦計を算出する
- 各セルごとに(縦計)×(横計)÷全数により期待度数を求める
- 各セルごとに下記の式を計算する
(実測度数-期待度数)^2 \over 期待度数 - 各セルの和を求め
(カイ二乗)値を算出する\chi^2 - (2)の計算式にて,クラメール連関係数
を求めるr_{c}
r_{c}=\sqrt{\chi^2 \over n(k-1)}
クラメール連関係数の評価
クラメール連関係数は0~1の間の値をとる.いくつ以上あればよいかという基準はない.
参考書籍によると下記を基準としていた.
その他
2×2のクロス集計で少なくとも1つのセルの件数が5以下の場合,
参考
下記のサイトや書籍を参考にしました.https://amzn.to/3UjWvUs
すべてがわかるアンケートデータの分析:
Discussion