Valores ajustados do modelo ARMA

11

Estou tentando entender como os valores ajustados são calculados para os modelos ARMA (p, q). Eu já encontrei uma pergunta aqui sobre valores ajustados dos processos ARMA, mas não consegui entender isso.

Se eu tiver um modelo ARMA (1,1), ou seja,

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

e recebo uma série temporal (estacionária). Posso estimar os parâmetros. Como eu calcularia os valores ajustados usando essas estimativas. Para um modelo AR (1), os valores ajustados são dados por

Xt^=α1^Xt1.

Como as inovações em um modelo ARMA são inobserváveis, como eu usaria a estimativa do parâmetro MA? Eu simplesmente ignoraria a parte MA e calcularia os valores ajustados da parte AR?

user2249626
fonte

Respostas:

10

Para responder às suas perguntas, você basicamente precisa saber como os resíduos, por exemplo, são calculados em um modelo. Porque então . Vamos primeiro gerar dados falsos ( ) e ajustar o modelo (sem dizer):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

Agora, crio os resíduos da seguinte maneira: (já que não há resíduo em 1) e para temos: , em que e são a parte média móvel e auto-regressiva estimada no modelo ajustado acima. Aqui está o código: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]
}

Depois de encontrar os resíduos , os valores ajustados são apenas . Portanto, a seguir, comparei os 10 primeiros valores ajustados obtidos de R e os que posso calcular a partir de que criei acima (ou seja, 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

Como você vê, existem coisas próximas, mas não exatamente iguais. O motivo é que, quando criei os resíduos, defino . Existem outras opções embora. Por exemplo, com base no arquivo de ajuda para , os resíduos e sua variação encontrada por um filtro Kalman e, portanto, o cálculo de será um pouco diferente de mim. Mas com o passar do tempo eles estão convergindo. Agora, para o modelo Ar (1). Eu ajustei o modelo (sem média) e mostrei diretamente como calcular os valores ajustados usando os coeficientes. Dessa vez não calculei os resíduos. Observe que eu relatei os 10 primeiros valores ajustados removendo o primeiro (mais uma vez, seria diferente dependendo de como você o define). Como você pode ver, eles são completamente iguais.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
Estado
fonte
No arquivo de ajuda, arimaeles dizem: "(...) as inovações e suas variações encontradas por um filtro de Kalman". Portanto, a função aparentemente usa o filtro Kalman para os valores iniciais.
DataMiner