14
Chapitre 7 Simulation La simulation, c’est-à-dire la reconstitution d’événements aléatoires obéissant à un mécanisme choisi, est très utile sinon indispensable en statistique. Elle permet : – de vérifier qu’on a compris les phénomènes aléatoires qu’on étudie ; – d’apprécier ce que devient l’efficacité de méthodes d’estimation quand elles sont utilisées sur des données ne vérifiant pas les présupposés sous lesquelles elles se montrent optimales ; – d’estimer des fonctions complexes des v.a. sans effectuer des calculs théoriques. Ici on commence par rappeler des principes généraux de simulation. On détaille ensuite la simulation de différents modèles de séries temporelles et le choix de tels modèles selon qu’on doit simuler une série stationnaire ou non. Au passage apparaissent les fonctions de R pour la simulation de séries temporelles. En fin de chapitre figurent les modèles d’intervention. 7.1 Principe Les ordinateurs peuvent fabriquer des nombres pseudo-aléatoires, c’est-à-dire ob- tenus par des opérations déterministes, nombres qui peuvent donc réapparaître au cours des simulations, mais avec une période très longue. Ils sont tirés dans la loi uniforme sur (0, 1). Des transformations permettent ensuite d’obtenir des nombres tirés dans différentes lois : normale, Poisson, exponentielle, etc. Le dé- marrage d’une simulation se fait à partir d’un entier positif, la graine (seed ). Si l’utilisateur choisit cette graine, il peut recommencer, si nécessaire, les mêmes ti- rages. Alternativement on peut laisser l’ordinateur la choisir. Pour aller plus loin, le lecteur pourra consulter Bouleau (2002), qui donne des bases théoriques de la simulation, Kennedy & Gentle (1980), qui présentent les transformations des nombres pseudo-aléatoires vers les lois de probabilité, et bien d’autres ouvrages. Le générateur par défaut de nombres pseudo-aléatoires a une période égale à 2 19937 1 e 13819 . R propose par ailleurs des fonctions permettant de simuler sui- Y. Aragon, Séries temporelles avec R © Springer-Verlag France 2011

[Pratique R] Séries temporelles avec R || Simulation

  • Upload
    yves

  • View
    212

  • Download
    0

Embed Size (px)

Citation preview

Page 1: [Pratique R] Séries temporelles avec R || Simulation

Chapitre 7

Simulation

La simulation, c’est-à-dire la reconstitution d’événements aléatoires obéissant à unmécanisme choisi, est très utile sinon indispensable en statistique. Elle permet :– de vérifier qu’on a compris les phénomènes aléatoires qu’on étudie ;– d’apprécier ce que devient l’efficacité de méthodes d’estimation quand elles sont

utilisées sur des données ne vérifiant pas les présupposés sous lesquelles elles semontrent optimales ;

– d’estimer des fonctions complexes des v.a. sans effectuer des calculs théoriques.Ici on commence par rappeler des principes généraux de simulation. On détailleensuite la simulation de différents modèles de séries temporelles et le choix detels modèles selon qu’on doit simuler une série stationnaire ou non. Au passageapparaissent les fonctions de R pour la simulation de séries temporelles. En fin dechapitre figurent les modèles d’intervention.

7.1 Principe

Les ordinateurs peuvent fabriquer des nombres pseudo-aléatoires, c’est-à-dire ob-tenus par des opérations déterministes, nombres qui peuvent donc réapparaîtreau cours des simulations, mais avec une période très longue. Ils sont tirés dansla loi uniforme sur (0, 1). Des transformations permettent ensuite d’obtenir desnombres tirés dans différentes lois : normale, Poisson, exponentielle, etc. Le dé-marrage d’une simulation se fait à partir d’un entier positif, la graine (seed). Sil’utilisateur choisit cette graine, il peut recommencer, si nécessaire, les mêmes ti-rages. Alternativement on peut laisser l’ordinateur la choisir. Pour aller plus loin,le lecteur pourra consulter Bouleau (2002), qui donne des bases théoriques dela simulation, Kennedy & Gentle (1980), qui présentent les transformations desnombres pseudo-aléatoires vers les lois de probabilité, et bien d’autres ouvrages.Le générateur par défaut de nombres pseudo-aléatoires a une période égale à219937−1 e13819. R propose par ailleurs des fonctions permettant de simuler sui-

Y. Aragon, Séries temporelles avec R© Springer-Verlag France 2011

Page 2: [Pratique R] Séries temporelles avec R || Simulation

134 Séries temporelles avec R

vant les lois uniforme, normale, de Cauchy... (runif(), rnorm(), rcauchy()...), detirer avec ou sans remise un échantillon dans une population, sample(). Dans R, lagraine est choisie par l’intermédiaire de set.seed(), par exemple set.seed(1984).Une fois la graine choisie, on peut lancer un code pour simuler un ou plusieurséchantillons. Chaque fois qu’on relance un code de simulation à partir d’une mêmevaleur de graine, on obtient la même série de valeurs. Dans ce livre on a systé-matiquement utilisé set.seed() pour que le lecteur puisse retrouver les résultatsimprimés. Si l’utilisateur ne choisit pas de graine, elle est créée à partir de l’heurecourante. Dans la pratique, avant de fixer la graine, il est important de faire tournerune simulation pour pouvoir observer la variété des résultats.

7.2 Simulation de séries temporellesNous supposons qu’on dispose d’un générateur de bruit blanc, gaussien dans la plu-part de nos exemples, et nous nous intéressons à la simulation de trajectoires deséries obéissant à un modèle bâti à partir d’un bruit blanc. Considérons quelquessituations avant d’entrer dans le détail de simulations particulières. Dans cettesection, tous les paramètres φ, θ et la loi du bruit blanc sont donnés, soit arbitrai-rement, soit parce qu’on se situe après l’estimation d’un modèle.

7.2.1 PrincipeSimulation d’un autorégressif d’ordre 2. Considérons un AR d’ordre 2 :

(1− φ1B− φ2B2)yt = c+ zt

où c, φ1, φ2 et σ2z , la variance du bruit blanc gaussien zt, sont connus.On doit simuler une trajectoire de n valeurs de yt. On voit qu’il faut écrire larécurrence :

yt = c+ φ1yt−1 + φ2yt−2 + zt, t = −1, 0, 1, · · · , n

en se fixant 2 valeurs initiales : y−1, y0 et en tirant n valeurs i.i.d. N (0, σ2z) àl’aide de rnorm(). Une fois tirées les n valeurs, on fabrique y, observation parobservation : pour chaque t, on ajoute à zt, c+ φ1yt−1 + φ2yt−2 ce qui donne yt.Comme on l’a rappelé au chapitre 4, le processus simulé est (1) stationnaire, siles racines de 1 − φ1z − φ2z

2 = 0 sont de module strictement supérieur à 1, ou(2) non stationnaire et ARIMA, si une racine au moins est égale à 1 et aucunen’est inférieure à 1 en module, ou (3) non stationnaire et non ARIMA, si aumoins une racine est inférieure à 1 en module. Si le processus est stationnaire, onfait fonctionner le mécanisme de la récurrence un certain temps pour s’affranchirdes conditions initiales et atteindre le régime stationnaire avant de stocker lessimulations. Ainsi, les premières valeurs stockées sont elles-même des observationsdu processus. Si le processus n’est pas stationnaire, il faut aussi fixer deux valeursinitiales.

Page 3: [Pratique R] Séries temporelles avec R || Simulation

Chapitre 7. Simulation 135

Simulation d’un ARMA(1, 2). Considérons un ARMA(1,2) :

yt = μ+1 + θ1B+ θ2B2

1− φ1Bzt, zt ∼ BBN(0, σ2z), (7.1)

où μ, φ1, θ1, θ2 et σ2z , la variance du bruit blanc gaussien zt, sont connus, |φ1| < 1.On veut simuler une trajectoire de n valeurs y1, · · · , yn de yt. On voit qu’il fautécrire la récurrence suivante :

yt = c+ φ1yt−1 + zt + θ1zt−1 + θ2zt−2, t = · · · ,−1, 0, 1, · · · , n (7.2)

où c = μ(1 − φ1). On doit se fixer une valeur initiale y0 puis tirer n + 2 valeurszt i.i.d. N (0, σ2z). A partir de ces valeurs, on obtient le bruit wt = zt + θ1zt−1 +θ2zt−2, t = 1, · · · , n. Ensuite on programme une boucle qui fabrique y, observationpar observation : pour chaque t, on ajoute à wt, c+φ1yt−1. On aurait pu égalementsimuler l’ARMA centré (1 + θ1B + θ2B2)/(1 − φ1B)zt, t = 1, · · · , n et ajouterμ ensuite. Mais rien n’empêche d’ajouter une fonction du temps plutôt qu’uneconstante. C’est ainsi qu’on peut simuler les modèles ARMAX et les modèlesd’intervention.Remarques– Pour simuler un SARMA, c’est-à-dire un ARMA dont la partie autorégressive

ou la partie moyenne mobile s’exprime comme un produit de deux polynômes,on peut effectuer ce produit puis écrire la récurrence ou dans les cas simples,faire appel à une fonction de R.

– Pour simuler un ARIMA(p, d, q) on peut simuler le processus différencié d fois,c’est-à-dire le processus stationnaire correspondant, puis l’intégrer d fois pardiffinv().

Dans la section suivante, nous illustrons ces situations en suivant ces étapes pas àpas ou, quand c’est possible, en utilisant les fonctions de R généralement optimiséespour cette tâche.

7.2.2 Illustration numériqueDans les exemples qui suivent, on se donne un mécanisme qui décrit un processus{yt} et on veut simuler une trajectoire, yt, t = 1, · · · , 200, de la série obéissant àce mécanisme. La série des valeurs obtenues est notée yt, t = 1, · · · , 200.Exemple 7.1 (Simulation d’un ARMA(1, 2)) Nous souhaitons simuler unesérie temporelle de T = 200 observations obéissant au modèle ARMA(1,2) :

yt = −0.5 +1− 0.3B+ 0.6B2

1 + 0.8Bzt, zt ∼ BBN(0, 1.5). (7.3)

La série est stationnaire, de moyenne −0.5. En multipliant des deux côtés par ledénominateur on obtient :

yt = −0.9− 0.8yt−1 + zt − 0.3zt−1 + 0.6zt−2. (7.4)

Page 4: [Pratique R] Séries temporelles avec R || Simulation

136 Séries temporelles avec R

Examinons deux façons de réaliser cette simulation : sans fonctions de simulationpropres à cette tâche, puis avec les fonctions de R prévues à cet effet.

A. On simule d’abord l’erreur vt = zt − 0.3zt−1 + 0.6zt−2 à partir d’une sériesimulée de bruit blanc :

> require(caschrono)

> set.seed(951)

> n2=250

> z0=rnorm(n2+2,sd=sqrt(1.5))

> vt=z0-0.3*Lag(z0,1)+0.6*Lag(z0,2)

> str(vt)

num [1:252] NA NA 0.315 0.214 -0.175 ...

> vt=vt[-(1:2)]

Comme la partie MA est d’ordre 2, nous avons simulé 250+2 valeurs et éliminé lesdeux premières, qui sont d’ailleurs manquantes. Nous devons maintenant calculerpar récurrence yt = −0.8 ∗ yt−1 + vt − 0.9. D’abord nous formons wt = vt − 0.9,noté wt, puis nous calculons la récurrence yt = −0.8 ∗ yt−1 + wt :

> moy=-.5; cc=moy*(1+0.8)

> wt=vt+cc

> y.n=filter(wt[-1],c(-0.8),method='recursive')> y.n=y.n[-(1:50)]

Nous n’avons pas donné de valeur initiale pour y, filter() choisit alors 0. Enfinnous avons abandonné les 50 premières valeurs, qu’on peut considérer comme unepériode de rodage du mécanisme.

B. Nous pouvons simuler ce processus ARIMA à l’aide de arima.sim(). Tenantcompte du fait qu’on a déjà simulé le bruit blanc dans z0 nous pouvons l’utiliserdans la fonction :

> yc.n=moy+arima.sim(n=200,list(ar=-0.8,ma=c(-0.3,0.6)),

+ innov=z0[53:252],n.start=50,start.innov=z0[1:50])

On voit que la période de rodage est précisée par n.start=50. Si on n’utilise pasun bruit blanc précédemment simulé, on peut obtenir directement la simulationpar :

> set.seed(281)

> yd.n=moy+arima.sim(n=200,list(ar=-0.8,ma=c(-0.3,0.6)),

+ sd = sqrt(1.5),n.start=50)

Si l’on compare la simulation obtenue en utilisant le bruit blanc fabriqué précé-demment, notée yc.n, avec y.n n’utilisant pas arima.sim(), on ne trouve pas lesmêmes valeurs. En effet, la fonction arima.sim() n’utilise pas les mêmes valeursinitiales.

Page 5: [Pratique R] Séries temporelles avec R || Simulation

Chapitre 7. Simulation 137

C. Nous pouvons aussi utiliser la fonction simulate() de dse pour cette tâche.Cette fonction peut gérer des modèles multidimensionnels où yt a p composantes.Un modèle ARMA multidimensionnel doit y être écrit sous la forme

A(B)yt = B(B)zt + C(B)ut, (7.5)

où :– A(a×p×p) est l’array contenant le polynôme d’autorégression, de retard maxi-

mum a− 1 ;– B(b × p × p) est l’array contenant le polynôme de moyenne mobile, de retard

maximum b− 1 ;– C(c× p×m) donne les coefficients d’un input ut à m composantes et c retards.La fonction ARMA() définit ensuite le modèle à partir de ces arrays. Pour les sériesunidimensionnelles, p = 1. Observons que cette fonction se contente de décrirel’algèbre d’une équation de récurrence telle que (7.5), indépendamment du typedes séries zt et ut. L’aide en ligne de ARMA() de dse donne des détails indispensables.Le tableau 7.1 résume et compare les fonctions arima.sim() et simulate(). Les... sont précisés dans le code ci-dessous.

Tableau 7.1 – Fonctions de simulation dans R.

Fonction Simulation de yt = φ1yt−1 + zt + θ1zt−1 + θ2zt−2 + c

arima.sim() yt = φ1yt−1︸ ︷︷ ︸ar=c(φ1)

+zt + θ1zt−1 + θ2zt−2︸ ︷︷ ︸ma=c(θ1,θ2)

+ c︸︷︷︸mean=c

simulate() (1− φ1B)︸ ︷︷ ︸A=...

yt = zt + θ1zt−1 + θ2zt−2︸ ︷︷ ︸B=...

+ C ut︸︷︷︸C=1,ut=c

Pour simuler une trajectoire suivant (7.4), nous commençons par écrire le modèleavec les conventions de dse. Nous définissons donc la partie autorégressive, AR, lapartie moyenne mobile, MA, et la matrice C que nous notons Cmat, coefficient del’input. Ceci nous donne le modèle mod1 :

> require(dse)

> vecauto=c(1,0.8)

> (AR =array(vecauto,c(length(vecauto),1,1)))

, , 1

[,1]

[1,] 1.0

[2,] 0.8

Page 6: [Pratique R] Séries temporelles avec R || Simulation

138 Séries temporelles avec R

> vecma=c(1,-0.3,0.6)

> MA=array(vecma,c(length(vecma),1,1))

> MA

, , 1

[,1]

[1,] 1.0

[2,] -0.3

[3,] 0.6

> Cmat=1

> mod1=ARMA(A=AR,B=MA,C=Cmat)

Ensuite, on définit l’input : c’est la constante de (7.4). La simulation est maintenantbien définie.

> sampleT.a=250

> ut=cc*matrix(1,ncol=1,nrow=sampleT.a)

> y0.a=c(-.5,-.5) # on affecte la moyenne de la serie aux 2 valeurs initiales

> set.seed(951)

> bb=rnorm(sampleT.a*sqrt(1.5))

> asim=simulate(mod1,y0=y0.a,noise=as.matrix(bb),input=ut,

+ sampleT=sampleT.a,nrow=sampleT.a)

> mean(asim$output)

[1] -0.5330506

> (m3=Arima(asim$output,order=c(1,0,2)))

Series: asim$output

ARIMA(1,0,2) with non-zero mean

...

Coefficients:

ar1 ma1 ma2 intercept

-0.7584 -0.4349 0.594 -0.5296

s.e. 0.0449 0.0511 0.059 0.0400

sigma^2 estimated as 0.923: log likelihood = -346.14

AIC = 702.28 AICc = 702.53 BIC = 719.89

Les deux dernières lignes de code permettent des vérifications sommaires : onvérifie ainsi que la moyenne de la série simulée est proche de la moyenne théoriqueet que le modèle estimé est proche de celui qui a gouverné la simulation. Ce queR nomme intercept est ici la moyenne de la série (stationnaire).

Exemple 7.2 (Simulation d’un ARIMA(p, 1, q)) Pour simuler un ARIMAdont la série différenciée une fois obéit à (7.4), il suffit d’intégrer la série pré-cédemment simulée :

y.int = diffinv(y.n)

Page 7: [Pratique R] Séries temporelles avec R || Simulation

Chapitre 7. Simulation 139

ou bien directement, en s’inspirant de l’équation (5.6, chap. 5) :y2.int=moy*(0:199)+arima.sim(n=199,list(order=c(1,1,2),

ar=-0.8,ma=c(-0.3, 0.6)),sd=sqrt(1.5),n.start=50)

Notons que moy est la moyenne pour le processus ARMA (7.1). Pour le processusARIMA, où la moyenne n’est pas définie, c’est la dérive. arima.sim() simule unesérie de longueur n + l’ordre d’intégration.

Exemple 7.3 (Simuler un SARMA) Nous allons simuler 200 observations de

yt = 4 +1 + 0.6B2

(1 + 0.8B)(1− 0.7B4)zt, zt ∼ BBN(0, 1.5).

C’est un processus stationnaire saisonnier. Il n’est pas possible d’utiliser directe-ment arima.sim() ou simulate(). Se présentent deux possibilités : (1) effectuerd’abord le produit des polynômes décrivant l’autorégression ou (2) suivre les étapespar lesquelles on a présenté les SARMA.� Première méthode : on effectue le produit des polynômes d’autorégression de

façon à entrer dans les possibilités de la fonction arima.sim(), ce qui nousdonne l’objet autopol. Au passage nous calculons les modules des racines dupolynôme d’autorégression. Ensuite on peut simuler par arima.sim(), ce quinous donne :> require(polynom)

> autopol=polynomial(c(1,0.8))*polynomial(c(1,0,0,0,-0.7))

> #verification (facultative) de la stationnarite

> Mod(polyroot(autopol))

[1] 1.093265 1.093265 1.093265 1.093265 1.250000

> #simulation

> ys=4+arima.sim(n=200,list(ar=-autopol[-1],ma=c(0,0.6)),sd=sqrt(1.5))

Pour la fonction arima.sim(), yt doit être exprimé en fonction des y retar-dés comme dans (7.2). C’est pourquoi on a donné dans ar=-autopol[-1] lescoefficients du polynôme changés de signe.

� Deuxième méthode : nous reproduisons la démarche qui a introduit les SARMAau chapitre 4. L’objet bt du code ci-dessous correspond à bt de l’équation (4.41)reproduite ici :

bt =Θs(Bs)

Φs(Bs)zt,

> bt=arima.sim(n=230,list(ar=c(0,0,0,+.7)),sd=sqrt(1.5))

> yt=4+arima.sim(n=200,list(ar=-0.8,ma=c(0,0.6)),innov=bt[31:230],

+ n.start=30,start.innov=bt[1:30])

Pour estimer le modèle de la série simulée, on doit imposer la nullité du coef-ficient MA d’ordre 1. On le fait par l’option fixed= de arima(), en indiquantpour chaque coefficient s’il est libre (NA) ou la valeur qu’il prend. On a rencontrécette démarche (section 4.5.1) pour l’estimation du modèle de y2.

Page 8: [Pratique R] Séries temporelles avec R || Simulation

140 Séries temporelles avec R

7.3 Construction de séries autorégressivesDans la section précédente, les modèles des séries à simuler étaient entièrementspécifiés. Quand on veut s’assurer des qualités d’une méthode ou vérifier qu’on acompris son fonctionnement, on est amené à simuler des séries ayant des carac-téristiques particulières. Dans cette perspective, nous examinons la simulation deséries autorégressives d’après les racines du polynôme d’autorégression.Une autorégression s’écrit :

(1− φ1B− φ2B2 − · · · − φpBp)yt = zt.

La stationnarité de yt dépend des racines du polynôme d’autorégression. Pourfabriquer une série stationnaire, les racines doivent être en module > 1 (chap. 4,section 4.2). Dès que l’ordre dépasse 2, il est commode de se donner les modulesdes racines puis d’en tirer le polynôme.

Exemple 7.4 Simulons une autorégression dont le polynôme d’autorégression ad-met les racines 1.4, −1.2 et 2. (On prendra comme erreur un bruit blanc gaussiende variance 1.52). Nous construisons d’abord le polynôme d’autorégression parl’intermédiaire de ses facteurs :

(1− B1.4

)(1 +B1.2

)(1− B2).

Le polynôme d’autorégression est :> (autopol=polynomial(c(1,-1/1.4))*polynomial(c(1,1/1.2))*

+ polynomial(c(1,-1/2)))

1 - 0.3809524*x - 0.6547619*x^2 + 0.297619*x^3

enfin on peut simuler l’ARMA correspondant :

asim7 = arima.sim(n=200, list(ar = -autopol[-1]), sd=1.5)

Exercice 7.1 (ARIMA)On veut simuler une serie de 200 valeurs d’une autoregression dont le polynome a deux racinesstrictement superieures a 1 et une racine egale a 1 :

(1− B

1.4)(1− B)(1− B

1.9)

et la variance du bruit est egale a 1.– Calculer le polynome d’autoregression.

– Si on essaie de simuler cette serie directement a l’aide de arima.sim(), qu’observe-t-on ?La serie obeit a un ARIMA(2, 1, 0). Apres avoir consulte l’aide en ligne de cette fonction,reformuler la simulation pour pouvoir utiliser arima.sim().

– Simuler la serie a l’aide de simulate().

Exercice 7.2 (Simulation d’un SARMA)On veut simuler une serie obeissant a (1.3).

– Tirer d’abord 290 observations i.i.d. suivant la loi de zt.

– Simuler d’apres cette serie une serie de 240 valeurs obeissant a (1.3).

Page 9: [Pratique R] Séries temporelles avec R || Simulation

Chapitre 7. Simulation 141

7.4 Construction de séries subissant une interven-tion

Une intervention est une action brutale, un choc, sur le niveau moyen d’une série.Schématiquement cette action peut avoir :

1. un effet ponctuel : à une certaine date le niveau moyen fait un saut et revientà la valeur habituelle à la date suivante ;

2. un effet brutal qui s’atténue progressivement : à une certaine date le niveaumoyen fait un saut et revient progressivement à la valeur habituelle ;

3. un effet brutal et durable : le niveau moyen fait un saut et reste à cettenouvelle valeur ;

4. un effet brutal complété par un effet progressif : il y a d’abord une variationbrutale de la moyenne qui atteint ensuite progressivement une nouvelle valeurd’équilibre.

On fait par ailleurs l’hypothèse que la série est la somme d’une fonction du tempsqui décrit notamment ces interventions et d’une série stationnaire de moyennenulle dont le modèle ne change pas au cours de la période étudiée. En somme lasérie suit un modèle ARMAX avec une moyenne qui a une dynamique.Nous allons maintenant donner une expression quantitative aux quatre situationsci-dessus. Ensuite nous simulerons un tel mécanisme et nous estimerons le modèle.

7.4.1 Réponses typiques à une intervention

Notons t0 la date du choc. Une intervention ponctuelle est représentée par lafonction impulsion :

P t0t =

{1 si t = t00 si t �= t0.

Une intervention qui dure est représentée par la fonction échelon :

St0t =

{0 si t < t01 si t ≥ t0.

On observe que :P t0t = St0

t − St0t−1 = (1− B)St0

t .

Classiquement on peut schématiser l’effet d’une intervention ponctuelle en t0,d’abord important puis qui tend progressivement vers 0, par une suite géomé-trique : 1, δ, δ2, · · · où δ ∈ (0, 1) est un facteur d’amortissement. Comme l’effet estnul avant t0, on peut décrire cet effet sur toute la période d’observation par lafonction :

ω (1 + δB+ δ2B2 + · · · )P t0t =

ω

1− δBP t0t (7.6)

Page 10: [Pratique R] Séries temporelles avec R || Simulation

142 Séries temporelles avec R

où ω est positif ou négatif suivant le sens de l’intervention. De même un effet quiaugmente progressivement à partir de t0 peut être schématisé par

ω (1 + δB+ δ2B2 + · · · )St0t =

ω

1− δBSt0t (7.7)

Le tableau 7.2 illustre ces effets avec ω = 1.

Tableau 7.2 – Effets progressifs, par 1/(1− δB), d’une impulsion et d’un échelon.

instant t0 − 1 t0 t0 + 1 t0 + 2 t0 + 3 · · ·effet sur P t0

t 0 1 δ δ2 δ3 · · ·effet sur St0

t 0 1 1 + δ 1 + δ + δ2 1 + δ + δ2 + δ3 · · ·

Notons que les mécanismes déterministes (7.6 ou 7.7) sont exactement ceux d’uneautorégression, appliqués à un échelon ou une impulsion et non à un bruit blanc.

Exemple 7.5 Calculons l’effet d’une intervention qui commence en t0 = 3 parune impulsion de 4 et qui s’amortit ensuite avec un facteur d’amortissement de .8sur une série de 20 dates consécutives. Nous posons donc ω = 4 et δ = .8. Il nousfaut aussi définir une fonction dans R dont les arguments sont une suite 1, 2 · · · , n,et t0 la date dans la suite où a lieu l’impulsion et qui renvoie l’impulsion, c’est-à-dire une suite de n termes tous nuls, sauf celui d’indice t0. La fonction imp.fun()ci-dessous fait ce travail. Il nous faut enfin décrire (7.6) avec le vocabulaire de lafonction ARMA(). Nous illustrons avec n = 7.> imp.fun=function(temps,t0){a=rep(0,length(temps));a[t0]=1;a}

> t0=3; dates=1:20; ldat=length(dates)

> y.imp=imp.fun(dates,t0)

> delta=.8; omega=4; vecauto=c(1,-delta)

> AR=array(vecauto,c(length(vecauto),1,1))

> vecma=1; MA=array(vecma,c(length(vecma),1,1))

> mod1=ARMA(A=AR,B=MA)

> y1=as.vector(simulate(mod1,y0=0,noise=as.matrix(omega*y.imp),

+ sampleT=ldat)$output)

> y1[1:6]

[1] 0.000 0.000 4.000 3.200 2.560 2.048

On observe bien l’impulsion de 4 à la date 3 qui s’amortit ensuite. Si l’effet au lieude s’atténuer se cumule, on pourra décrire la situation par le même mécanismemais appliqué à un échelon. Nous devons écrire d’abord la fonction qui calculel’échelon : ech.fun().> ech.fun=function(temps,t0){a=rep(0,length(temps));a[temps >= t0]=1;a}

> y.ech=ech.fun(dates,t0)

> y2=as.vector(simulate(mod1,y0=0,noise=as.matrix(omega*y.ech),

+ sampleT=ldat)$output)

> y2[1:6]

Page 11: [Pratique R] Séries temporelles avec R || Simulation

Chapitre 7. Simulation 143

[1] 0.000 0.000 4.000 7.200 9.760 11.808

Les effets de l’impulsion et de l’échelon sont représentés sur la figure 7.1.0

12

34

répon

se

Amortissement progressif d'une impulsion

05

1015

20

temps

répon

se

1 t0 5 10 15 20

Réponse progressive à un échelon

Fig. 7.1 – Action progressive d’une impulsion et d’un échelon.

Plus généralement, une intervention peut être décrite par une fraction rationnelle :

yt =ω(B)δ(B)

xt + ut,

ou par une somme de fractions rationnelles :

yt =

m∑k=1

ωk(B)δk(B)

xkt + ut,

où les ωk(B) et δk(B) sont des polynômes de l’opérateur retard.Nous avons passé en revue quelques mécanismes permettant de décrire la moyenned’une série quand elle a une dynamique. Ces questions sont de nature purementdéterministe.

7.4.2 Simulation d’une interventionCet exemple est inspiré d’une étude sur la piraterie aérienne (Enders, 1995). Ala fin des années 60, on observe une augmentation du nombre mensuel d’actes de

Page 12: [Pratique R] Séries temporelles avec R || Simulation

144 Séries temporelles avec R

piraterie aérienne aux Etats-Unis. Des portiques détecteurs de métaux sont misen place progressivement à partir d’une date t0 dans les différents aéroports. Lamesure, mise en place de portiques, est permanente : on la schématise donc parun échelon, mais son effet, au niveau de l’ensemble des aéroports, est progressif :le nombre moyen trimestriel d’actes de piraterie décroît à mesure que le nombred’aéroports équipés augmente, jusqu’à atteindre un niveau plus faible. L’action del’intervention est finalement décrite par une fraction rationnelle ω0

1−δB appliquée àl’échelon St0

t avec ω0 négatif. Pour conduire la simulation on se fixe : ω0 = −2 etδ = 0.6. Par ailleurs, avant cette intervention et loin après, le nombre d’actes depiraterie est approximativement un AR(1) de paramètre φ = 0.8 et de moyenneb0 = 3.1, et la variance du bruit blanc est 0.55. On simule une série de 100 valeurset l’intervention est supposée prendre place à la date t0 = 51. Finalement le modèleà simuler est

yt = 3.1− 2

1− 0.6BSt0t +

1

1− 0.8Bzt, zt ∼ BBN(0, 0.55). (7.8)

Pour effectuer cette simulation, on peut écrire la récurrence en multipliant à gaucheet à droite par le dénominateur ou bien, et c’est ce que nous ferons, calculer lamoyenne et lui superposer un AR(1). La moyenne de yt est 3.1− 2

1−0.6BSt0t , qu’on

calcule à l’aide de simulate().> temps=1:100; t0=51

> echel=rep(1,length(temps))*(temps >= t0)

> delta=.6; omega=-2

> vecauto=c(1,-delta)

> (AR=array(vecauto,c(length(vecauto),1,1)))

, , 1

[,1]

[1,] 1.0

[2,] -0.6

> vecma=-2

> (MA=array(vecma,c(length(vecma),1,1)))

, , 1

[,1]

[1,] -2

> mod2=ARMA(A=AR,B=MA)

> moy0=as.matrix(rep(3.1,100))

> moy=moy0+simulate(mod2,y0=0,noise=as.matrix(echel),sampleT=100)$output

On simule maintenant le processus centré de l’erreur pour différentes valeurs del’écart type du bruit blanc en utilisant simulate() avec un bruit blanc en entrée.> # bruit AR(1)

> set.seed(329)

> vecauto1=c(1,-.8)

Page 13: [Pratique R] Séries temporelles avec R || Simulation

Chapitre 7. Simulation 145

> mod3=ARMA(A=array(vecauto,c(length(vecauto),1,1)),B=1)

> bruit1=simulate(mod3,y0=0,sd=.5,sampleT=100)

> bruit2=simulate(mod3,y0=0,sd=1,sampleT=100)

> bruit3=simulate(mod3,y0=0,sd=1.5,sampleT=100)

Enfin, on additionne moyenne et bruit pour obtenir la série.> # datation de la serie

> ts.temps=ts(temps,start=c(60,3),frequency=4)

> str(ts.temps)

Time-Series [1:100] from 60.5 to 85.2: 1 2 3 4 5 6 7 8 9 10 ...

> signal1=moy+bruit1$output

> signal2=moy+bruit2$output

> signal3=moy+bruit3$output

> ser2=cbind(moy,signal1,signal2,signal3)

> colnames(ser2)=c('Moyenne','sigma=0.5','sigma=1','sigma=1.5')> sign.br=ts(ser2,start=c(60,3),frequency=4)

Pour dater la série sans tâtonnement, de façon que la 51e valeur corresponde bienau 1er trimestre 73, on a créé une série contenant le temps (1, 2, 3 . . . ). Il est ainsifacile de vérifier notre datation.

−2−1

01

23

Moy

enne

−20

24

sigm

a=0.

5

−4−2

02

46

sigm

a=1

−40

24

6

60 65 70 75 80 85

sigm

a=1.

5

temps

Fig. 7.2 – Intervention : moyenne de la série et trois simulations.

On peut voir (fig. 7.2) que plus l’écart type de l’erreur augmente (de haut en bas,sd= .5, 1, 1.5) plus il est difficile de mettre en évidence le mécanisme d’intervention.

Page 14: [Pratique R] Séries temporelles avec R || Simulation

146 Séries temporelles avec R

7.4.3 Estimation d’une interventionRemarquons d’abord la ressemblance formelle entre (7.8) et la description du mé-canisme ARMA, ressemblance que nous avons exploitée pour la simulation. Pourestimer des modèles d’intervention, on utilisera arimax() de TSA. Cette fonctiondispose, en plus des options habituelles de arima(), de xtransf= qui indique lamatrice des données affectant la série, une colonne par variable, et de transfer=

qui donne les ordres, à la façon d’un ARMA, de la fraction rationnelle qui décritl’intervention.Estimons les paramètres du modèle figurant dans l’équation (7.8) grâce à la sé-rie simulée signal1. Nous devons indiquer l’échelon ou l’impulsion, c’est la sérieechel1 ci-dessous. Ensuite l’intervention dans (7.8), terme − 2

1−0.6BSt0t a un mé-

canisme AR et l’option à préciser est transfer=list(c(1,0)).> require(TSA)

> temps=1:length(signal1)

> echel1=rep(1,length(temps))*(temps>=51)

> (pirate.m1=arimax(signal1,order=c(1,0,0),xtransf=data.frame(echel1),

+ transfer=list(c(1,0)),method='ML'))

Series: signal1

ARIMA(1,0,0) with non-zero mean

...

Coefficients:

ar1 intercept echel1-AR1 echel1-MA0

0.5815 3.1421 0.6418 -1.8406

s.e. 0.0803 0.1503 0.0565 0.2874

sigma^2 estimated as 0.2084: log likelihood = -63.68

AIC = 135.36 AICc = 136 BIC = 148.39

On obtient bien un résultat proche du modèle.Les modèles d’intervention sont présentés dans Box et al. (1999), Wei (2006) etCryer & Chan (2008) qu’accompagne TSA.