如何在2x2矩阵上应用Cramer V.

时间:2017-07-10 19:56:09

标签: python pandas numpy scipy

我想找到变量和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.

1 个答案:

答案 0 :(得分:5)

计算Cramér系数时,必须计算没有continuity correction的chi2。对于2x2矩阵,chi2_contingency默认使用连续性校正。因此,您必须通过提供参数chi2_contingency

告诉correction=False不要使用连续性更正
chi2 = ss.chi2_contingency(confusion_matrix, correction=False)[0]