20.07.2015 Views

Mod`eles ARIMA et SARIMA Estimation dans R 1 et SAS 2 1 ...

Mod`eles ARIMA et SARIMA Estimation dans R 1 et SAS 2 1 ...

Mod`eles ARIMA et SARIMA Estimation dans R 1 et SAS 2 1 ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Modèles <strong>ARIMA</strong> <strong>et</strong> S<strong>ARIMA</strong><strong>Estimation</strong> <strong>dans</strong> R 1 <strong>et</strong> <strong>SAS</strong> 2Novembre 2007Yves Aragon — aragon@cict.frC<strong>et</strong>te note examine les différences entre R <strong>et</strong> <strong>SAS</strong> <strong>dans</strong> l’estimation des modèles <strong>ARIMA</strong> <strong>et</strong> S<strong>ARIMA</strong>. Elleillustre également l’emploi du package dse pour simuler un modèle <strong>ARIMA</strong>.1 <strong>Estimation</strong> d’un <strong>ARIMA</strong>Pour comprendre comment on lit les résultats d’estimation <strong>dans</strong> les deux logiciels, prenons l’exemplesuivant. On veut estimer un <strong>ARIMA</strong>(1,1,2) sur une série d’observations y t , t = 1, · · · , T , simulées suivantun tel modèle. Autrement dit on veut estimer le modèle :∆Y t = µ + 1 − θ 1B − θ 2 B 2Z t , Z t ∼ BBN(0, σ 21 − φ 1 BZ), (1)où ∆Y t = (1 − B)Y t Dans c<strong>et</strong>te expression, µ est bien la moyenne de (1 − B)Y t . Le modèle peut encores’écrire :(1 − B)(1 − φ 1 B)Y t = c + (1 − θ 1 B − θ 2 B 2 )Z t (2)<strong>et</strong> c = µ(1 − φ). Les observations sont <strong>dans</strong> le fichier y_112_data.txt, elles sont tirées suivant le modèle(1 − B)(1 + 0.8B)Y t = 5 + (1 + 0.4B + 0.2B 2 )Z t , Z t ∼ BBN(0, 16),la série est appelée y2 <strong>dans</strong> le code ci-dessous.<strong>Estimation</strong> d’un tel modèle <strong>dans</strong> <strong>SAS</strong>Le code10 data a;infile ’D:\Serie_T\TP_R_ST\Simulation ST R\y2_112b.txt’;input y2 @@;run;proc print data=a (obs=20); run;15proc arima data=a;i var=y2(1); run;e p=1 q=2 m<strong>et</strong>hod = ml; run;f out= pred_y2 lead= 5; run;20 quit;donne les résultats suivants.10 The <strong>ARIMA</strong> ProcedureName of Variable = y215Period(s) of Differencing 1Mean of Working Series 2.856751Standard Deviation 4.921667Number of Observations 199Observation(s) eliminated by differencing 120 Maximum Likelihood <strong>Estimation</strong>ErreurPr.1 http ://www.r-project.org/2 www.sas.com/france1


est.y2 =arima(y2,order= c(1,1,2),xreg= xmat0, m<strong>et</strong>hod = "ML"), par xreg= xmat0, Rcomprend le modèle <strong>ARIMA</strong>(p,1,q) comme un modèle de Y t de la formeY t = b + c t + e toù après différenciation à l’ordre 1, e t est ARMA(p,q) centré. C<strong>et</strong>te différenciation donne∆Y t = c + ∆e t ,c est le coefficient de t, la variable indiquée <strong>dans</strong> xreg = . c est aussi la dérive de Y t .Compléments.1. Observons que R note la partie MA : 1 + θ 1 B + θ 2 B 2 ....2. Pour l’estimation, on peut alternativement différencier y puis ajuster un ARMA(1,2) à la série différenciée.On obtient des estimations très proches des précédentes mais le calcul des prévisions sur y demandeun peu de réflexion.3. Egalement, on estime correctement le modèle par le code :require(forecast)(est.d = arima(y2, order = c(1,1,2), include.drift=TRUE, m<strong>et</strong>hod = "ML"))Attention ! Il existe deux versions de arima() l’une <strong>dans</strong> le package statschargé quand onlance R, l’autre <strong>dans</strong> le package forecast. Il faut éviter de revenir à la version de stats après avoirutilisé celle de forecast. La solution : sauver la session de R par save.image(), quitter R puisle relancer.Prévision <strong>dans</strong> R Suivant l’avertissement au paragraphe précédent, on a sauvé une image de la session,fermé R <strong>et</strong> rechargé l’image de la session sans charger forecast.> (pred.y2= predict(est.y2, n.ahead=5,newxreg =((length(y2)+1):(length(y2)+5))))$predTime Series:Start = 201End = 205Frequency = 1[1] 580.75 584.71 586.83 590.22 592.73$seTime Series:Start = 201End = 205Frequency = 1[1] 3.8180 4.3849 5.9855 6.5864 7.5374Prévision <strong>dans</strong> <strong>SAS</strong>Elle est faite par l’étape f ou forecast du code <strong>SAS</strong> précédent. On obtientThe <strong>ARIMA</strong> ProcedurePrévisions pour la variable y2Obs Forecast Std Error 95Limites de confiance %3


201 580.7421 3.8569 573.1827 588.3015202 584.7061 4.4297 576.0241 593.3881203 586.8175 6.0466 574.9663 598.6687204 590.2096 6.6537 577.1686 603.2505205 592.7163 7.6144 577.7924 607.6402On peut observer des différences avec R, notamment <strong>dans</strong> l’estimation de l’écart-type de l’erreur de prédiction.Elles peuvent être dues à des choix différents <strong>dans</strong> l’initialisation des récurrences.2 <strong>Estimation</strong> d’un S<strong>ARIMA</strong>ouConsidérons l’estimation d’un S<strong>ARIMA</strong>(1, 1, 1)(1, 1, 0) 4 . Le modèle est(1 − B)(1 − B 4 )Y t = µ +1 − θ 1 B(1 − φ 1 B)(1 − Φ 1 B 4 ) Z t, (3)(1 − B)(1 − B 4 )(1 − φ 1 B)(1 − Φ 1 B 4 )Y t = g + (1 − θ 1 B)Z t . (3+)Dans (3), µ est la moyenne de la série différenciée (1 − B)(1 − B 4 g)Y t , <strong>et</strong> on a : µ =(1−φ 1 )(1−Φ 1 ). On veutestimer un S<strong>ARIMA</strong>(1, 1, 1)(1, 1, 0) 4 sur une série d’observations y t , t = 1, · · · , T , simulées suivant un telmodèle.Les observations sont <strong>dans</strong> le fichier y3_111_110.txt, la série est appelée y3 <strong>dans</strong> le code ci-dessous<strong>et</strong> le modèle simulé est :<strong>Estimation</strong> <strong>dans</strong> R(1 − B)(1 − B 4 )(1 − 0.7B)(1 + 0.6B 4 )Y t = −2 + (1 + 0.7B)Z t , , Z t ∼ BBN(0, 1)R comprend le modèle S<strong>ARIMA</strong>(p, 1, q)(P, 1, Q) 4 comme un modèle de Y t de la formeY t = a + b t + c t 2 + e t (4)où après différenciation aux ordres 1 <strong>et</strong> 4, (1 − B)(1 − B 4 )e t est ARMA(p,q) centré. C<strong>et</strong>te différenciationdonne(1 − B)(1 − B 4 )Y t = 8c + (1 − B)(1 − B 4 )e t ,c est le coefficient de t 2 , alors que 8c est la moyenne de la série deux fois différenciée.> xmat1 = matrix(1:length(y3))> xmat2 = matrix((1:length(y3))ˆ2)> xmat = cbind(xmat1,xmat2)> (est.3=arima(y3,order=c(1,1,1),seasonal=list(order=c(1, 1, 0),period = 4),+ xreg=xmat2, m<strong>et</strong>hod = "ML"))Call:arima(x = y3,order = c(1, 1, 1), seasonal = list(order = c(1, 1, 0), period = 4),xreg = xmat2, m<strong>et</strong>hod = "ML")Coefficients:ar1 ma1 sar1 xmat20.765 0.755 -0.540 -0.758s.e. 0.056 0.095 0.071 0.042sigmaˆ2 estimated as 0.962: log likelihood = -274.95, aic = 559.94


Notons que -.758/((1-.765)*(1+.54)) = -2.0945, alors que la constante fournie pour la simulation est -2. Lecoefficient de xmat2 est donc l’estimation de c tandis que l’estimation de la moyenne de Y t est -0.758 * 8 =-6.064. (Ce qu’on peut comparer à ce que donne <strong>SAS</strong>, p.5 ligne 15 du VerbatimMean of Working Series -6.06498 <strong>et</strong> ligne 39 Estimated Mean -6.09301.)Il est clair que b n’est pas identifiable. On peut s’en convaincre en m<strong>et</strong>tant les deux régresseurs t <strong>et</strong> t 2par xreg= xmat. Le logiciel fournit alors notammentar1 ma1 sar1 xmat1 xmat20.763 0.756 -0.539 3.948 -0.762s.e. 0.056 0.095 0.071 1774.511 0.042qui montre que t <strong>dans</strong> (4) n’est pas significative.<strong>Estimation</strong> <strong>dans</strong> <strong>SAS</strong> Le code, y compris une étape de prévision à l’horizon 5, est :data a;infile ’D:/Serie_T/DESS_ST/2007-2008/S<strong>ARIMA</strong>_R_<strong>SAS</strong>/Simulation_ST_R/y3_111_110.txt’;input y3 @@;run;proc print data=a (obs=20); run;proc arima data=a;i var=y3(1,4); run;e p=(1)(4) q=1 m<strong>et</strong>hod = ml; run;/* prevision à l’horizon 5 */f out= pred_y2 lead= 5; run;quit;La sortie est de l’étape e ou estimate est10 The <strong>ARIMA</strong> ProcedureName of Variable = y3Period(s) of Differencing 1,415 Mean of Working Series -6.06498Standard Deviation 2.323683Number of Observations 195Observation(s) eliminated by differencing 520 Maximum Likelihood <strong>Estimation</strong>ErreurPr.Paramètre <strong>Estimation</strong> standard Valeur du test t Approx. > |t| R<strong>et</strong>ard25 MU -6.09301 0.33576 -18.15


Variance Estimate 0.982491Std Error Estimate 0.991207AIC 557.8861SBC 570.978135 Number of Residuals 195Model for variable y3Estimated Mean -6.0930140 Period(s) of Differencing 1,4Autoregressive FactorsFactor 1: 1 - 0.76434 B**(1)45 Factor 2: 1 + 0.53978 B**(4)Moving Average Factors50 Factor 1: 1 + 0.75346 B**(1)Prévision <strong>dans</strong> R Il faut fournir les valeurs prise par la variable explicative pour chaque date de l’horizonde prédiction, 5 <strong>dans</strong> c<strong>et</strong> exemple. La commande est de la forme :(pred.4c = predict(est.3, n.ahead = 5,newxreg = ((length(y2)+1):(length(y2)+5))ˆ2))3 SimulationSimulation d’un <strong>ARIMA</strong> <strong>dans</strong> R Supposons qu’on veuille simuler un <strong>ARIMA</strong>(2,1,1). Le principe esttoujours le même : il faut expliciter l’équation de récurrence que suit la série <strong>et</strong> fournir le bruit blanc. S’iln’existe pas de fonction adaptée <strong>dans</strong> le logiciel, on programme ensuite la récurrence en utilisant des boucles.Exemple. Simulation de 200 observations de Y t vérifiant(1 − B)(1 + .7B)Y t = 2 + (1 + .4B + .2B 2 )Z toù Z t ∼ BBN(0, σ 2 Z = 4). Notons que (1 − B)Y t est stationnaire de moyenne 2/(1+0.7) = 1.1765. Y t n’étantpas stationnaire, la simulation dépend des valeurs initiales choisies.1 Préalablement, on peut s’assurer que la partie MA est inversible en calculant les modules des racines deson polynôme :require(polynom)> Mod(polyroot(c(1,.4,.2)))[1] 2.2361 2.2361le processus est donc bien inversible.2 On simule un bruit blanc gaussien de longueur supérieure à la longueur de la série à simuler. Les valeursen trop nous fourniront les valeurs initiales.6


s<strong>et</strong>.seed(1) # c<strong>et</strong>te commande perm<strong>et</strong> d’avoir constamment la même# suite de simulations# c’est nécessaire quand on veut comparer des résultatslong.sim = 200n.init = 30bb = rnorm(long.sim+n.init,0,2) # BB N(0,4)3 Pour la simulation, nous n’avons pas de boucle à programmer car plusieurs fonctions sont proposées <strong>dans</strong> R.Nous utilisons simulate() du package dse. Il faut fournir les polynômes d’autorégression <strong>et</strong> de moyennemobile sous forme développée. Le polynôme d’autorégression étant un produit de deux polynômes, on effectued’abord ce produit.> autopol = polynomial(c(1,0.7))*polynomial(c(1,-1))> # les coeff du poly du deg 0 au deg max> vecauto = as.vector(autopol)> vecauto[1] 1.0 -0.3 -0.74 Il faut maintenant écrire le modèle <strong>ARIMA</strong> à simuler. (Utiliser l’aide en ligne (help(simulate))pourcomprendre le détail de ce qui suit.)> AR =array( vecauto,c(length(vecauto),1,1))> AR, , 1[,1][1,] 1.0[2,] -0.3[3,] -0.7> MA=array(c(1,.4,.2),c(3,1,1))> MA, , 1[,1][1,] 1.0[2,] 0.4[3,] 0.2> constant=2> mod4b mod4bTREND= 2A(L) =1-0.3L1-0.7L2B(L) =1+0.4L1+0.2L2Maintenant on simule, en choisissant les valeurs initiales de la série <strong>dans</strong> le bruit blanc simulé. Observonsque l’opérateur r<strong>et</strong>ard est noté L <strong>et</strong> non B <strong>dans</strong> ce package.asim4b =simulate(mod4b, y0=bb[1:n.init],input=as.matrix(rep(constant,long.sim)),input0=NULL,noise=as.matrix(bb[(n.init+1):(n.init+long.sim)]),sampleT=long.sim)7


asim4b est un obj<strong>et</strong> assez complexe. On examine sa structure : str(asim4b) <strong>et</strong> on voit que la sériesimulée est la composante asim4b$output.Référence. http://lib.stat.cmu.edu/general/stoffer/tsa2/Rissues.htm8

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!