見出し画像

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 * np.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

この記事が気に入ったらサポートをしてみませんか?