![見出し画像](https://assets.st-note.com/production/uploads/images/103537027/rectangle_large_type_2_580d44712ef2278aa97bbba458b2fd5b.jpeg?width=1200)
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
クラメール連関係数の算出ステップ
クロス集計表の横計,縦計を算出する
各セルごとに(縦計)×(横計)÷全数により期待度数を求める
各セルごとに下記の式を計算する$${(実測度数-期待度数)^2 \over 期待度数}$$
各セルの和を求め$${chi^2}$$(カイ二乗)値を算出する
(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
この記事が気に入ったらサポートをしてみませんか?