Valori adattati del modello ARMA


11

Sto cercando di capire come vengono calcolati i valori adattati per i modelli ARMA (p, q). Ho già trovato una domanda qui sui valori adattati dei processi ARMA, ma non sono riuscito a dargli un senso.

Se ho un modello ARMA (1,1), ad es

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

e mi viene data una serie storica (stazionaria) che posso stimare i parametri. Come calcolerei i valori adattati usando tali stime. Per un modello AR (1) i valori adattati sono indicati da

Xt^=α1^Xt1.

Poiché le innovazioni in un modello ARMA non sono osservabili, come dovrei utilizzare la stima del parametro MA? Vorrei semplicemente ignorare la parte MA e calcolare i valori adattati della parte AR?

Risposte:


10

Per rispondere alle tue domande, devi sostanzialmente sapere come vengono calcolati i residui, ad es. in un modello. Perché allora . prima un dato falso ( ) da e il modello (senza media):etarmaXt^=XtetXtarima(.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

Ora creo i residui come segue: (poiché non vi è alcun residuo in 1) e per abbiamo: , in cui e rappresentano la parte media auto-regressiva stimata e mobile nel modello sopra montato. Ecco il codice:e1=0t=2,...,net=XtArXt1Maet1ArMa

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]
}

Una volta trovati i residui , i valori adattati sono solo . Quindi, nel seguito, ho confrontato i primi 10 valori adattati ottenuti da R e quelli che posso calcolare da ho creato sopra (cioè manualmente).etXt^=Xtetet

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

Come vedi ci sono vicini ma non esattamente gli stessi. Il motivo è che quando ho creato i residui ho impostato . Ci sono altre scelte però. Ad esempio in base al file della guida per , i residui e la loro varianza rilevata da un filtro Kalman e quindi il loro calcolo di sarà leggermente diverso da me. Ma col passare del tempo stanno convergendo. Ora per il modello Ar (1). Ho montato il modello (senza media) e ti faccio vedere direttamente come calcolare i valori adattati usando i coefficienti. Questa volta non ho calcolato i residui. Si noti che ho riportato i primi 10 valori adattati rimuovendo il primo (come ancora sarebbe diverso a seconda di come lo si definisce). Come puoi vedere, sono completamente uguali.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

Nel file della guida arimadicono: "(...) le innovazioni e la loro varianza rilevate da un filtro Kalman." Quindi apparentemente la funzione usa in qualche modo il filtro Kalman per i valori iniziali.
DatamineR
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.