RuntimeWarning: в журнале встречается деление на ноль (stats.boxcox)

Я получаю сообщение об ошибке RuntimeWarning: divide by zero encountered in log при попытке запустить stats.boxcox(list).

Список не содержал нулевых значений. Я ссылаюсь на некоторые другие сообщения, в которых говорится, что мы можем игнорировать ошибку, используя np.errstate().

Но в моем случае я не думаю, что это правильно, так как значение, возвращаемое stats.boxcox(), бессмысленно (все константы, см. ниже).

array([ 0.11472901,  0.11472901,  0.11472901,  0.11472901,  0.11472901,
    0.11472901,  0.11472901,  0.11472901,  0.11472901,  0.11472901,
    0.11472901,  0.11472901,  0.11472901,  0.11472901,  0.11472901,
    0.11472901,  0.11472901,  ... ... ]

Детали ошибки следующие:

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/stats/morestats.py:591: RuntimeWarning: divide by zero encountered in log
llf -= N / 2.0 * np.log(np.sum((y - y_mean)**2. / N, axis=0))
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/optimize/optimize.py:2063: RuntimeWarning: invalid value encountered in double_scalars
w = xb - ((xb - xc) * tmp2 - (xb - xa) * tmp1) / denomenter code here

person Qaseh Zaidi    schedule 05.08.2015    source источник
comment
Вы можете быть более конкретным здесь. Какую версию scipy вы используете? Это также происходит, если вы используете только первые 10 значений list? Если да, можете ли вы показать нам значения, чтобы мы могли попытаться воспроизвести вашу проблему?   -  person cel    schedule 05.08.2015
comment
@cel Я использую scipy версии 0.15.1. Список содержал 494 номера. Проблем не возникает, если я случайно удалил 2 числа.   -  person Qaseh Zaidi    schedule 05.08.2015
comment
Вы передаете ndarray, а не список, верно?   -  person Jon Custer    schedule 05.08.2015
comment
Да. Я использую нпарай. Я перешел на список, но все равно получаю ту же ошибку.   -  person Qaseh Zaidi    schedule 06.08.2015
comment
Как указал @FrancoPiccolo, вы, вероятно, столкнулись с ошибкой, о которой сообщается в github.com/scipy/scipy/ вопросы/6873. Это было исправлено в ветке разработки scipy. Исправление будет в следующем выпуске (scipy 1.3).   -  person Warren Weckesser    schedule 20.04.2019


Ответы (1)


Я последовал предложению в этой ветке Github и работал на меня:

https://github.com/scipy/scipy/issues/6873

Предлагается использовать stats.boxcox_normmax(array) для получения идеальной лямбды, а затем выполнить преобразование boxcox.

boxcox_lambda = boxcox_normmax(array, brack=(-1.9, 2.0),  method='mle')
transformed_array = boxcox(array, boxcox_lambda)
person Franco Piccolo    schedule 12.02.2019