Python-ARMA Функция прогнозирования в выборке со Statsmodels

Я подгоняю модель ARMA(1,0) с одной экзогенной переменной (то есть модель ARX(1)), используя статистические модели. Для проверки реальности я применяю эту модель к обучающим данным:

y_hat_i=arparam*y_true_i-1 + beta*x_true_i+const

Затем я сравниваю этот результат с statsmodels.ARMA.predict(), и они не совпадают. Я проверил исходный код sm, и он использует endo_true минус остаток как предсказание в образце, но я до сих пор не понимаю, почему эти два значения отличаются.

##################### fit an ARX(1) model ###############################
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm

exog = [0.05006667 ,0.05036667, 0.05143333, 0.04983333 ,0.05006667 ,0.04843333,
        0.04406667, 0.04496667, 0.0487,     0.0463  ,   0.0426,     0.0401, 
        0.03973333, 0.03763333, 0.03493333 ,0.0336 ,    0.03536667 ,0.0389,
        0.0438 ,    0.0429    ] # exogenous variable
endog = [-0.00747451 ,-0.01205813 ,-0.00899203 , 0.00942409, -0.00727726, -0.0278912,
         -0.01763623 , 0.00745353 , 0.00438131 ,-0.01059955, -0.00413446 , 0.01286785,
         0.00805098 , 0.00516204 , 0.01551592 , 0.01543293,  0.00837698  ,0.00882242,
         0.01890189 , 0.01434118] # endogenous variable
arma_model = sm.tsa.ARMA(endog,order=(1,0),exog=exog)
arma_res = arma_model.fit()
sresult = arma_model.predict(arma_res.params) #in sample fit returned from predict() function
print(arma_res.summary())
#########################################################################


myresult=[sresult[0]] # list for my own in sample fit result
arparam= 0.2675  # arparam from statsmodel   
beta=-1.2765 # exogenous coeffcient from statsmodel  
const=0.0576 # const param from sm

for idx in range(1,len(endog)): # apply the ARX model 
    prediction = arparam*(endog [idx-1]) + beta*(exog [idx]) + const
    myresult.append(prediction )


fig=plt.figure(figsize=(5,5))
ax=fig.add_subplot(111)
ax.plot(np.array(myresult),"red",label = "my result")
ax.plot(sresult, label = "stats model result")
ax.set_title("Why they are different?")
ax.legend()
plt.show()

###############################################################

введите описание изображения здесь

Вы собираетесь показать нам данные или даже график, который показывает, что они разные?

Edeki Okoh 25.04.2019 22:30

только что обновил.

Azukei 25.04.2019 22:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
630
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Окончательный ответ заключается в том, что Statsmodels соответствует «регрессии с ошибками AR». Подробнее см. в моем ответе здесь: https://stats.stackexchange.com/questions/394593/manually-calculate-sarimax-forecast/399103#399103

Большое спасибо, cfulton! Это решило мою проблему! Я также заметил, что в статистических моделях AR const представлен как (Yt+1+c)=b(yt+c).

Azukei 26.04.2019 23:08

Другие вопросы по теме