2017-07-10 23 views
0

我想查找变量与cramer V之间的关联,它可以像大小超过2X2的矩阵一样处理。但是,对于频率较低的矩阵来说,它不能很好地工作。对于下面的应变矩阵,我得到0.5的结果。我怎样才能解释相同的问题?如何在2x2矩阵上应用cramer V

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.

回答

2

当您计算Cramér系数时,您必须计算没有continuity correction的chi2。对于2x2矩阵,chi2_contingency默认使用连续性校正。所以你必须通过给出参数correction=False告诉chi2_contingency不使用连续性校正:

chi2 = ss.chi2_contingency(confusion_matrix, correction=False)[0]