2013-09-10 3 views
1

Я борется с прогнозированием из значений образца с помощью модели ARMAX.Прогнозирование модели ARMAX приводит к «ValueError: матрицы не выровнены» при передаче значений exog

Приспособление модели прекрасно работает.

armax_mod31 = sm.tsa.ARMA(endog = sales, order = (3,1), exog = media).fit() 
armax_mod31.fittedvalues 

Прогнозирование без экзогенных значений, поскольку у меня есть соответствующая модель, отлично работает.

arma_mod31 = sm.tsa.ARMA(sales, (3,1)).fit() 
all_arma = arma_mod31.forecast(steps = 14, alpha = 0.05) 
forecast_arma = Series(res_arma[0], index = pd.date_range(start = "2013-08-21", periods = 14)) 
ci_arma = DataFrame(res_arma[2], columns = ["lower", "upper"]) 

Однако, как только я хочу предсказать из значений образца, я сталкиваюсь с проблемами.

all_armax = armax_mod31.forecast(steps = 14, alpha = 0.05, exog = media_out) 

приводит к «ValueError: матрицы не выровнены».

Моя первая мысль была в том, что длина из * media_out * не подходит. Я проверил его несколько раз и попытался передать другие серии как экзог. Длина exog такая же, как и количество шагов. Я пробовал временные ряды и также только * media_out.values ​​*.

Проверил документацию:

"exog : array 
If the model is an ARMAX, you must provide out of sample 
values for the exogenous variables. This should not include 
the constant." 

Насколько я понимаю, это то, что я делаю. Любые идеи, что я делаю неправильно? Кроме того, я нашел этот ipython ноутбук http://nbviewer.ipython.org/cb6e9b476a41586958b5, а ищет решение в Интернете. В В [53]: вы можете увидеть похожие ошибки. Комментарий автора предлагает общую проблему с предсказанием вне выборки, правильно?

Я запускаю python 2.7.3, pandas 0.12.0-1 и statsmodels 0.5.0-1.

+0

Можете ли вы отправить и/или отправить мне некоторые данные для тиражирования? – jseabold

+1

Нет, похоже, что параметры тренда не должны быть в экзоге, но exog должен быть 2d. Я буду размещать обновления здесь: https://github.com/statsmodels/statsmodels/issues/1076 – jseabold

ответ

1

А, я вижу проблему. Вам также нужно передать прошлые данные. Например, если вы хотите предсказать 12 шагов модели ARMAX (2, q), то exog должен иметь длину 14. Вам нужно два дополнительных лага, чтобы иметь возможность прогнозировать 1 шаг. Поэтому, если вы убедитесь, что exog - 2d, это должно работать должным образом.

Я все еще не вижу этого, но дайте мне знать, если вы думаете, что здесь есть что улучшить. Пока я остановлюсь на документах.

[Редактировать: Я понял, что это требование было глупо. Вам больше не нужно указывать какие-либо переменные в выборке при использовании прогноза ARMA https://github.com/statsmodels/statsmodels/pull/1124.]