如何使用scipy.stats.chisquare识别错误返回负值?

时间:2019-05-10 01:26:43

标签: python-3.x scipy chi-squared

我正在窗口10下使用python 3.6.8的spyder 3.1.3和scipy 1.2.1。我想获取卡方值,但请注意返回了负值。为什么会这样?

from scipy.stats import chisquare
chisquare(f_obs=[2,1], f_exp=[100000,1])
#Power_divergenceResult(statistic=14096.65412, pvalue=0.0)

但是

chisquare(f_obs=[2,1], f_exp=[1000000,1])
#Power_divergenceResult(statistic=-731.379964, pvalue=1.0)

卡方中是否有期望值的上限?谢谢。

1 个答案:

答案 0 :(得分:1)

在Windows上,numpy数组的默认整数类型是32位。我可以通过将dtype为np.int32的numpy数组传递给chisquare来重现该问题:

In [5]: chisquare(f_obs=np.array([2,1], dtype=np.int32), f_exp=np.array([1000000,1], dtype=np.int32))                    
Out[5]: Power_divergenceResult(statistic=-731.379964, pvalue=1.0)

这是一个错误。我在SciPy github网站上为此创建了一个问题:https://github.com/scipy/scipy/issues/10159

要解决此问题,请将输入参数转换为数据类型为numpy.int64numpy.float64的数组:

In [6]: chisquare(f_obs=np.array([2,1], dtype=np.int64), f_exp=np.array([1000000,1], dtype=np.int64))                    
Out[6]: Power_divergenceResult(statistic=999996.000004, pvalue=0.0)

In [7]: chisquare(f_obs=np.array([2,1], dtype=np.float64), f_exp=np.array([1000000,1], dtype=np.float64))                
Out[7]: Power_divergenceResult(statistic=999996.000004, pvalue=0.0)