📊

pythonでクラメール連関係数を計算する

2022/12/04に公開

クラメール連関係数とは?

「カテゴリーデータ」と「カテゴリーデータ」との間の関連の強さを示す相関係数.
期待度数を算出し,実測度数と一致していれば関係がなく,一致していなければ関係があるという考え方に基づいている.

とりあえず手っ取り早く結果を得たい場合の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

クラメール連関係数の算出ステップ

  1. クロス集計表の横計,縦計を算出する
  2. 各セルごとに(縦計)×(横計)÷全数により期待度数を求める
  3. 各セルごとに下記の式を計算する
    (実測度数-期待度数)^2 \over 期待度数
  4. 各セルの和を求め\chi^2(カイ二乗)値を算出する
  5. (2)の計算式にて,クラメール連関係数r_{c}を求める
    r_{c}=\sqrt{\chi^2 \over n(k-1)}

クラメール連関係数の評価

クラメール連関係数は0~1の間の値をとる.いくつ以上あればよいかという基準はない.
参考書籍によると下記を基準としていた.
r_{c}が0.5以上 非常に強い相関
r_{c}が0.25以上 やや強い相関
r_{c}が0.1以上 やや弱い相関
r_{c}が0.1未満 非常に弱い相関(関連がない)

その他

2×2のクロス集計で少なくとも1つのセルの件数が5以下の場合,\chi^2値はイエツの補正を行う.

参考

下記のサイトや書籍を参考にしました.
https://qiita.com/canard0328/items/5ea4115d964b448903ba
すべてがわかるアンケートデータの分析:https://amzn.to/3UjWvUs

Discussion