Valeurs ajustées du modèle ARMA


11

J'essaie de comprendre comment les valeurs ajustées sont calculées pour les modèles ARMA (p, q). J'ai déjà trouvé une question ici concernant les valeurs ajustées des processus ARMA, mais je n'ai pas pu le comprendre.

Si j'ai un modèle ARMA (1,1), c'est-à-dire

Xt=α1Xt1+ϵtβ1ϵt1

et on me donne une série chronologique (stationnaire) dont je peux estimer les paramètres. Comment calculer les valeurs ajustées à l'aide de ces estimations. Pour un modèle AR (1), les valeurs ajustées sont données par

Xt^=α1^Xt-1.

Étant donné que les innovations dans un modèle ARMA ne sont pas observables, comment pourrais-je utiliser l'estimation du paramètre MA? Dois-je simplement ignorer la partie MA et calculer les valeurs ajustées de la partie AR?

Réponses:


10

Pour répondre à vos questions, vous devez essentiellement savoir comment les résidus, c'est-à-dire sont calculés dans un modèle. Parce . Générons d'abord une fausse donnée ( ) à partir du modèle (sans moyenne):^ X t = X t - e t X tetarmaXt^=Xt-etXtarima(.5,.6)arma

library(forecast)
n=1000
ts_AR <- arima.sim(n = n, list(ar = 0.5,ma=0.6))
f=arima(ts_AR,order=c(1,0,1),include.mean=FALSE)
summary(f)
    Series: ts_AR 
    ARIMA(1,0,1) with zero mean     

    Coefficients:
             ar1     ma1
          0.4879  0.5595
    s.e.  0.0335  0.0317

    sigma^2 estimated as 1.014:  log likelihood=-1426.7
    AIC=2859.4   AICc=2859.42   BIC=2874.12

    Training set error measures:
                         ME    RMSE       MAE      MPE     MAPE      MASE
    Training set 0.02102758 1.00722 0.8057205 40.05802 160.1078 0.6313145

Maintenant je crée les résidus comme suit: (puisqu'il n'y a pas de résidu à 1) et pour nous avons: , où et sont la partie moyenne auto-régressive et mobile estimée dans le modèle ajusté ci-dessus. Voici le code:e1=0t=2,...,net=Xt-UNErXt-1-Muneet-1UNErMune

e = rep(1,n)
e[1] = 0 ##since there is no residual at 1, e1 = 0
for (t in (2 : n)){
  e[t] = ts_AR[t]-coef(f)[1]*ts_AR[t-1]-coef(f)[2]*e[t-1]
}

Une fois que vous avez trouvé les résidus , les valeurs ajustées sont simplement . Donc, dans ce qui suit, j'ai comparé les 10 premières valeurs ajustées obtenues à partir de R et celles que je peux calculer à partir de j'ai créées ci-dessus (c'est-à-dire manuellement).etXt^=Xt-etet

cbind(fitted.from.package=fitted(f)[1:10],fitted.calculated.manually=ts_AR[1:10]-e[1:10])
      fitted.from.package fitted.calculated.manually
 [1,]          -0.4193068                 -1.1653515
 [2,]          -0.8395447                 -0.5685977
 [3,]          -0.4386956                 -0.6051324
 [4,]           0.3594109                  0.4403898
 [5,]           2.9358336                  2.9013738
 [6,]           1.3489537                  1.3682191
 [7,]           0.5329436                  0.5219576
 [8,]           1.0221220                  1.0283511
 [9,]           0.6083310                  0.6048668
[10,]          -0.5371484                 -0.5352324

Comme vous le voyez, ils sont proches mais pas exactement les mêmes. La raison en est que lorsque j'ai créé les résidus, j'ai mis . Il y a cependant d'autres choix. Par exemple sur la base du fichier d'aide à , les résidus et leur variance trouvés par un filtre de Kalman et donc leur calcul de seront légèrement différents de moi. Mais avec le temps, ils convergent. Maintenant pour le modèle Ar (1). J'ai ajusté le modèle (sans moyenne) et je vous montre directement comment calculer les valeurs ajustées à l'aide des coefficients. Cette fois, je n'ai pas calculé les résidus. Notez que j'ai signalé les 10 premières valeurs ajustées en supprimant la première (comme encore, ce serait différent selon la façon dont vous le définissez). Comme vous pouvez le voir, ils sont complètement identiques.e1=0arimaet

f=arima(ts_AR,order=c(1,0,0),include.mean=FALSE)
cbind(fitted.from.package=fitted(f)[2:10],fitted.calculated.manually=coef(f)*ts_AR[1:9])
      fitted.from.package fitted.calculated.manually
 [1,]          -0.8356307                 -0.8356307
 [2,]          -0.6320580                 -0.6320580
 [3,]           0.0696877                  0.0696877
 [4,]           2.1549019                  2.1549019
 [5,]           2.0480074                  2.0480074
 [6,]           0.8814094                  0.8814094
 [7,]           0.9039184                  0.9039184
 [8,]           0.8079823                  0.8079823
 [9,]          -0.1347165                 -0.1347165

Dans le fichier d'aide, arimails disent: "(...) les innovations et leur variance trouvées par un filtre de Kalman." La fonction utilise donc apparemment le filtre de Kalman pour les valeurs initiales.
DatamineR
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.