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 tetarma
Xt^= 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- A r ∗ Xt - 1- Ma ∗ et - 1A rMune
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= 0arima
et
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
arima
ils 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.