我想找到变量和cramer V之间的关联,就像处理大小超过2X2的矩阵一样。但是,对于低频矩阵,它不能很好地工作。对于以下意外矩阵,我得到的结果为0.5。我该如何解释呢?
1 2
a 2 0
b 0 2
这是我的代码:
def cramers_stat(confusion_matrix):
chi2 = ss.chi2_contingency(confusion_matrix)[0]
n = confusion_matrix.sum().sum()
return np.sqrt(chi2 / (n*(min(confusion_matrix.shape)-1)))
result=cramers_stat(confusion_matrix)
print(result)
confusion_matrix是我的输入,在这种情况下是上面提到的矩阵。我理解为好结果,我需要一个高于5的矩阵频率,但为了完美的关联,我预计结果为1.
答案 0 :(得分:5)
计算Cramér系数时,必须计算没有continuity correction的chi2。对于2x2矩阵,chi2_contingency
默认使用连续性校正。因此,您必须通过提供参数chi2_contingency
:
correction=False
不要使用连续性更正
chi2 = ss.chi2_contingency(confusion_matrix, correction=False)[0]