J'ai 100 valeurs de données d'entraînement d'une série temporelle et j'utilise auto.arima pour trouver l'ordre du modèle et les coefficients de la même .un pas en avant, sur une prévision d'échantillon à partir d'une seule valeur reçue à la fois, en R
Je reçois des valeurs de streaming à partir d'un capteur, une à la fois. A la réception d'une valeur, j'ai besoin de prévoir/prédire la valeur suivante (un seul pas en avant/valeur unique seulement), à partir de l'objet-modèle obtenu à partir de auto.arima. Je mets à jour les coefficients du modèle sur certains événements, mais pour l'instant il n'est pas nécessaire de les mentionner. Les prédictions en avance sont faites jusqu'à ce que le capteur fonctionne.
Ce sont ma formation d'échantillons et des données de test: https://drive.google.com/open?id=0B3UpwQBKryLleXdtMkQyOXVDcW8
Ceci est mon code. Il existe certaines contraintes sur le modèle, qui sont définies en conséquence.
data<-read.csv('stackoverflow_data.csv',header=TRUE, sep=",");
data1<-data[[1]]; # first 100 points of data - training data
mdl<-auto.arima(data1,max.p=3, max.q=3,max.d=1, stepwise=FALSE, approximation = FALSE,allowdrift=TRUE, allowmean=TRUE);
summary(mdl);
Series: data1
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 intercept
0.7456 0.2775 767.7463
s.e. 0.0804 0.1197 0.1072
sigma^2 estimated as 0.04944: log likelihood=9.34
AIC=-10.69 AICc=-10.27 BIC=-0.27
Training set error measures:
ME RMSE MAE MPE MAPE
Training set -0.004354719 0.2189945 0.1706344 -0.0005753987 0.02222701
MASE ACF1
Training set 0.9063639 -0.01022176
Pour dans l'échantillon de données, une étape d'avance des prédictions ont été produites manuellement (courbe rouge) ainsi que l'utilisation intégrée (MDL) dans (courbe verte). Ci-dessous est représenté l'intrigue combinée d'entre eux avec les données d'entraînement d'origine (tracé noir).
Ceci est le code pour la prévision manuelle en une étape.
res_1 = 0;
res_2 = 0;
constant_1 = mdl$coef [["intercept"]] * (1 - mdl$coef [["ar1"]]);
fc = 0;
for (i in 1:length(data1)){
fc[i] <-constant_1 +(mdl$coef [["ar1"]]*(data1[i])) + (mdl$coef [["ma1"]]*(res_1)); # one-step ahead forecast for in-sample data
res_2[i] = data1[i] - fc[i];
res_1 = data1[i] - fc[i];
}
one step ahead forecast : in-sample data plot
Ce sont mes questions:
(1) En observant l'intrigue (j'ai partagé lien d'image ci-dessus, je ne peux pas poster des images en raison de score de réputation), il semble que les prévisions ajustées (mdl) sont éteintes d'une unité de temps. Comment cela peut-il être corrigé? (2) Les données de test dans la liaison partagée sont des données futures pour lesquelles une prévision en une étape doit être effectuée. Ces données viennent séquentiellement une valeur à la fois. Comment pouvons-nous prévoir une valeur unique unique à partir de la valeur unique reçue à ce moment-là, jusqu'à ce que l'algorithme conserve ses valeurs?
Est-ce la bonne façon de faire un pas de prédiction avant données2 = données [[2] ] fit2 <- Arima (c (données1, données2 [1]), modèle = mdl) a = (prévision (ajustement2, h = 1) $ ajusté [101]) –
ou je devrais considérer: données2 = données [[2 ]]; fit2 <- Arima (c (données1, données2 [1]), modèle = mdl) a = (prévisions (ajustement2, h = 1) $ moyenne [1]) –