我正在窗口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)
卡方中是否有期望值的上限?谢谢。
答案 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.int64
或numpy.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)