Как определить ошибку с scipy.stats.chisquare возвращает отрицательные значения? - PullRequest
1 голос
/ 10 мая 2019

Я использую spyder 3.1.3 с python 3.6.8 под окном 10, имея 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 Ответ

1 голос
/ 10 мая 2019

В Windows целочисленный тип по умолчанию для числовых массивов - 32-разрядный.Я могу воспроизвести проблему, передавая массивы с типом dtype np.int32 в 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)
...