Причинное воздействие в Python выдает ошибку: exog содержит inf или nans

#python-3.x #pandas #numpy #statsmodels

#python-3.x #pandas #тупой #statsmodels

Вопрос:

У меня есть следующий набор данных.

      y          X
0   70.0      10.0
1   59.0      10.0
2   40.0      10.0
3   56.0      10.0
4   46.0      10.0
5   65.0      10.0
6   60.0      10.0
7   45.0      10.0
8   55.0  555267.0
9   69.0  558056.0
10  64.0  176734.0
 

Когда я запускаю следующий код:

 import pandas as pd
import numpy as np
from causalimpact import CausalImpact

y1 = [70.0, 59.0, 40.0, 56.0, 46.0, 65.0, 60.0, 45.0, 55.0, 69.0, 64.0]

X1 = [10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 5552675.0, 5580561.0, 1767342.0]

y = np.array(y1)
X = np.array(X1)

y[8:]  = 5

data = pd.DataFrame({'y': y, 'X': X}, columns=['y', 'X'])

pre_period = [0, 7]
post_period = [8, 10]

ci = CausalImpact(data, pre_period, post_period)
print(ci.summary())
print(ci.summary(output='report'))
ci.plot()
 

Я получаю сообщение об ошибке: exog содержит inf или nans

Любое решение этого вопроса было бы замечательным.

Ответ №1:

Проблема вызвана наличием слишком большого количества одинаковых значений в вашем X1 массиве. Если вы измените какой-либо из ваших 10.0 , скажем, 11.0 на a, проблема исчезнет.

Комментарии:

1. На самом деле, если быть более точным, проблема заключается в том, что у вас есть только идентичные значения в pre_period подмножестве вашего X1 array ( X1[0:8] = [10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0] ) .

2. Спасибо @David M. Теперь это работает. Еще один быстрый вопрос: как я могу изменить доверительный интервал в функции причинного воздействия. Значение по умолчанию — 95%. Я хочу 90%

3. ci = CausalImpact(data=data, pre_period=pre_period, post_period=post_period, alpha=0.1)