2013-09-04 3 views
10

j'utilise statsmodels pour ajuster un modèle ARMA.ARMA hors échantillon de prédiction avec statsmodels

import statsmodels.api as sm 
arma = sm.tsa.ARMA(data, order =(4,4)); 
results = arma.fit(full_output=False, disp=0); 

Lorsque data est un réseau à une dimension. Je sais que pour obtenir dans l'échantillon des prévisions:

pred = results.predict(); 

Maintenant, étant donné un second jeu de données data2, comment puis-je utiliser le modèle calibré précédemment pour générer une série avec des prévisions (prédictions) basée dans cette observation?

Répondre

12

Je pensais qu'il y avait un problème pour cela. Si vous déposez un sur github, je serai plus susceptible de vous rappeler d'ajouter quelque chose comme ça. Les machines de prédiction ne sont pas (encore) disponibles en tant que fonctions orientées utilisateur, vous devez donc faire quelque chose comme ça.

Si vous avez un modèle déjà s'adapter, alors vous pouvez le faire.

# this is the nsteps ahead predictor function 
from statsmodels.tsa.arima_model import _arma_predict_out_of_sample 
res = sm.tsa.ARMA(y, (3, 2)).fit(trend="nc") 

# get what you need for predicting one-step ahead 
params = res.params 
residuals = res.resid 
p = res.k_ar 
q = res.k_ma 
k_exog = res.k_exog 
k_trend = res.k_trend 
steps = 1 

_arma_predict_out_of_sample(params, steps, residuals, p, q, k_trend, k_exog, endog=y, exog=None, start=len(y)) 

Ceci est une nouvelle prédiction de 1 pas en avant. Vous pouvez ajouter ceci à y et vous devrez mettre à jour vos résidus.

+3

Savez-vous si cela est encore un problème avec statsmodels? Est-ce mieux supporté dans le paquet maintenant? Est-ce – dimab0

+0

équivalent à faire res.forecast() http://www.statsmodels.org/dev/generated/statsmodels.tsa.arima_model.ARMAResults.forecast.html#statsmodels.tsa.arima_model.ARMAResults.forecast –

Questions connexes