TP R de séries chronologiques Table des matières
Transcription
TP R de séries chronologiques Table des matières
Niveau : M2 IS Cours : Séries chronologiques M2 Enseignant : Aude Illig Université Versailles Saint-Quentin Année 2014/2015 - 2ème semestre TP R de séries chronologiques *** Ce TP a pour but de revoir les notions acquises en M1 lors du cours de Séries Chronologiques et de s'initier aux méthodes de lissage exponentiel. *** Table des matières 1 Mise en place de l'environnement de travail 1.1 1.2 1.3 1.4 1.5 2 . . . . . 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Etude 2.1.1 2.1.2 Etude de EuStockMarkets . . . . . . Etude classique . . . . . . . . Etude par lissage exponentiel de uspop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Etude de séries chronologiques avec saisonnalité 3.1 3.2 Etude Etude 3.2.1 3.2.2 des données UKDriverDeaths des données AirPassengers . Etude classique . . . . . . . . Etude par lissage exponentiel . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . 2 2 2 3 3 4 Etude de séries chronologiques en l'absence de saisonnalité 2.1 3 Console R . . . . . . . . . . . . . . . . . . Editeur de texte . . . . . . . . . . . . . . Obtenir de l'aide . . . . . . . . . . . . . . Utilisation de packages . . . . . . . . . . . Représentations et sauvegardes graphiques 4 4 5 5 5 5 6 6 6 1 1.1 Mise en place de l'environnement de travail Console R Lorsque vous lancez R, s'ouvre alors une fenêtre appelée "R console" dans laquelle vous pouvez taper les lignes de commandes R. Vous constatez que le prompt en début de ligne est > lorsque R est en attente d'une commande, + lorsque la ligne tapée précedemment est incomplète (à dessein ou parce que vous avez oublié une ) ou une accolade } par exemple). 1.2 Editeur de texte Sous Mac OS X et Windows, le logiciel R intègre un éditeur de texte basique. Sous Windows, pour ouvrir un nouveau chier texte appelé script, cliquer sur l'onglet "File" puis "Open new script". Lorsque vous avez tapé des commandes dans le chier script, la commande Ctrl R permet d'exécuter la ligne de commandes R où se trouve le curseur ou bien le bloc que vous aurez sélectionné. Si le chier script se nomme fichier.R, on peut également taper directement dans R la commande source("fichier.R") an d'éxécuter les lignes de commandes du fichier.R. Remarque. Assurez vous que vous connaissez l'endroit où R enregistre les chiers source du type fichier.R. Par exemple sous Windows, sélectionnez l'onglet "File", puis "Change directory". Vous pouvez également spécier le répertoire source à l'aide de la commande setwd(). Remarque. Il est toutefois possible d'installer un autre éditeur plus ecace, notamment lorsque vous vous lancerez dans la programmation. De nombreux éditeurs intelligents comme emacs, Rstudio ou encore TINN-R sont disponibles gratuitement. Ils vous permettront de gagner du temps tout en en vous facilitant l'écriture du programme par l'utilisation de couleurs, de l'indentation automatique et de détection de ) ou accolades } manquantes. 1.3 Obtenir de l'aide Pour accéder aux renseignements sur une fonction R donnée, par exemple la fonction plot, on peut faire appel à l'aide en ligne de R > help(plot) ou bien > ?plot La commande > help.search("plot") ou alternativement > ??plot va quant à elle rechercher toutes les fonctions R pour lesquelles le mot-clef "plot" est utilisé dans le descriptif de cette fonction. Vous remarquerez qu'à la n de l'aide apparaît presque toujours un exemple illustrant l'usage de la fonction d'intérêt. L'exemple de la fonction plot peut être lancé par la commande > example(plot) Enn, la plupart des installations de R orent une aide au format HTML disponible à l'aide de la 2 commande > help.start() 1.4 Utilisation de packages Pour des études (statistiques) spéciques, il peut être nécessaire de faire appel à une ou plusieurs librairies (aussi appelées packages ) de R bien précise(s). La commande > library() ache ainsi les packages actuellement installés mais non nécessairement chargés au démarrage de R. Pour faire de l'analyse de survie, il peut vous être utile de charger le package survival : > library(survival) # Charge le package survival > library(help=survival) # Affiche la liste des fonctions disponibles du package > search() # Affiche la liste des packages chargés Remarque. Il est par ailleurs possible de télécharger de nouveaux packages et de les charger ensuite dans R. Par exemple, si vous souhaitez installer le package tseries et que votre système d'exploita- tion est Windows, cliquer sur l'onglet "Packages" de R (barre des tâches située en haut de la fenêtre R de Windows) puis sur "Install package(s)". Puis, choisissez le site miroir de téléchargement (par exemple France (Paris 1)) et cliquer sur le bouton "OK". Enn, choisissez, le package tseries et cliquer sur le bouton "OK". 1.5 Représentations et sauvegardes graphiques Le logiciel R possèdent des jeux de données de type séries chronologiques sur lesquels nous pouvons mettre à l'épreuve nos connaissances statistiques. Nous allons, dans un premier temps, représenter graphiquement certaines d'entre elles et eectuer une sauvegarde des graphiques au format eps ou pdf. 1. A titre d'exemple, tapez les commandes suivantes : > plot(AirPassengers,type="b",col="red",lwd=1,pch=20, main="Nombre de voyageurs aériens (en milliers)") > dev.copy2eps(file="Graph_AirPassengers.eps") > par(bg="lightblue") > plot(EuStockMarkets,type="l",col=4) > dev.copy2pdf(file="Graph_EuStockMarkets.pdf") > windows() # Ouverture d'un dispositif graphique > layout(matrix(1:2,2,1)) # partitionné en 2 fenêtres > layout.show(2) > DAX=EuStockMarkets[,1] > CAC=EuStockMarkets[,3] > plot(DAX,xlab=" ") > plot(CAC) > dev.off() 2. Représentez graphiquement les séries chronologiques uspop et UKDriverDeaths. 3 2 Etude de séries chronologiques en l'absence de saisonnalité 2.1 Etude de EuStockMarkets En tapant help(EuStockMarkets), vous constaterez que EuStockMarkets est une série chronologique multiple (type mts en R) à valeurs dans R4 . Nous nous intéressons à l'étude de la série chronologique CAC de l'indice des prix en France. Comme c'est souvent le cas dans l'étude d'actifs nanciers, nous considérons le logarithme de la série : > cac=c(EuStockMarkets[,3]) > plot(log(cac)) 2.1.1 Etude classique 1. Notons Xt le logarithme de l'indice des prix français (CAC). Dans le modèle additif sans saisonnalité Xt = mt + t , une méthode couramment employée pour estimer la tendance d'une série chronologique (xt )nt=1 consiste à utiliser un ltre linéaire. Le plus simple étant le ltre moyennes mobiles équipondéré : m̂t = q X 1 xt+i . 2q + 1 i=−q Tapez les lignes de commandes suivantes : > plot(log(cac)) > lines(filter(log(cac),rep(1/25,25)),col=4,lwd=2) > lines(filter(log(cac),rep(1/101,101)),col=5,lwd=2) et ajoutez au graphique produit les estimations de la tendance obtenues pour q = 2, 3. 2. La série représentée ne comporte pas de mouvement saisonnier et présente une tendance générale "constante". A l'aide de la commande diff(), enregistrez les diérences successives (correspondant aux rendements logarithmiques de la série CAC) Yt = Xt − Xt−1 dans un vecteur rcac et représentez les graphiquement. 3. Tapez les lignes de commandes suivantes an d'obtenir l'histogramme des rendements : 4. 5. 6. 7. > hist(rcac,prob=TRUE) > rug(rcac) > lines(density(rcac),lwd=2,col="red") > abs=seq(-100,50,length=100) > ord=dnorm(abs,mean(rcac),sd(rcac)) > lines(abs,ord,lwd=2,col=4) A l'aide des commandes qqnorm() et qqline(), évaluez la normalité des rendements. Utilisez les commandes ks.test() et shapiro.test() pour tester la normalité des rendements. On rappelle que les commandes mean() et sd() permettent de calculer la moyenne et l'écart-type empirique des données. Testez si les rendements rcac sont des réalisations de variables aléatoires indépendantes à l'aide de la fonction d'autocorrélation empirique (commande acf() en R). Eectuez également le test du portemanteau à l'aide de la commande Box.test(). A l'aide le la fonction d'autocorrélation partielle empirique (commande pacf() en R), proposez un modèle pour les rendements Yt puis pour Xt . 4 2.1.2 Etude par lissage exponentiel 1. Eectuons un lissage exponentiel simple sur la série log(cac) à l'aide de la commande HoltWinters() de R. Pour cela, tapez les lignes de commandes suivantes : >logcac=c(log(cac)) >logcac.hw=HoltWinters(logcac,alpha=0.5,beta=FALSE,gamma=FALSE) >plot(logcac,type="l",xlim=c(1800,1870)) >lines(c(fitted(logcac.hw)[,1],predict(logcac.hw,10)),col="red") >predict(logcac.hw,10) 2. A l'aide de la commande HoltWinters(), eectuez maintenant un lissage de Holt-Winters dans le modèle additif sans saisonnalité (précisez seulement gamma=FALSE) en laissant R déterminer les paramètres α et β . 2.2 Etude de uspop Cette section est dédiée à l'usage de la fonction lm() de R permettant d'eectuer une régression linéaire. Pour ajuster une parabole aux données uspop, nous nous plaçons dans le modèle suivant : Xt = a0 + a1 t + a2 t2 + t . 1. Créez un vecteur US numéroté de 1 à 19 à partir des données uspop et tapez les lignes de commandes suivantes : > > > > > > plot(US,type="b") t=seq(1,19,1) t2=t^2 reg=lm(US~t+t2) summary(reg) lines(reg$fit,lwd=2,col=5) 2. Créez un vecteur Residus contenant les résidus de la régression linéaire et tester leur normalité comme vu pécédemment. 3. Donnez une prédiction en 1970 de la population américaine en 1980. Quelle hypothèse sur le bruit (t )t∈Z avez-vous dû faire ? Utilisez la commande acf() pour vérier votre hypothèse. 4. Donnez une nouvelle prédiction en 1970 de la taille de la population en 1980 par lissage de Holt-Winters sans saisonnalité. 3 Etude de séries chronologiques avec saisonnalité 3.1 Etude des données UKDriverDeaths On s'intéresse ici au changement éventuel de régime dans les données UKDriverDeaths suite au changement dans la législation en janvier 1983. 1. Créez un vecteur UK composé des données de UKDriverDeaths renuméroté à partir de 1. Créez un vecteur safe composé de 0 et de 1 selon que le port de la ceinture pour le conducteur était obligatoire au moment du relevé des données. On remarquera que le mois de janvier 1983 correspond à l'indice 169 de la série renumérotée. > plot(UK,type="b") > points(169,UK[169],col="red",pch=20) 2. Eectuez une régression linéaire de UK en fonction de safe. Quelles sont vos conclusions ? 5 3. Nous nous restreignons désormais à l'étude de la série de longueur 168. En vous plaçant dans le modèle suivant 2πt 2πt Xt = a0 + a1 t + a2 cos + a3 sin + t 12 12 utilisez la commande lm() pour ajuster le modèle aux données. > > > > > > > 3.2 length(ShortUK) t=seq(1,168,1) cos.t=cos((pi/6)*t) sin.t=sin((pi/6)*t) reg=lm(ShortUK~t+cos.t+sin.t) summary(reg) lines(reg$fit,lwd=2,col=5) Etude des données AirPassengers La série AirPassengers est une série chronologique "classique" présentant une tendance linéaire et un mouvement saisonnier de période 12. 3.2.1 Etude classique 1. Utilisez la commande stl() avec s.window="periodic" pour décomposer la série en tendance, mouvement saisonnier et résidus. > > > > > decomp=stl(AirPassengers,s.window="periodic") plot(decomp) tendance=decomp$time.series[,2] saison=decomp$time.series[,1] residus=decomp$time.series[,3] 2. Tracez sur le même graphique les données AirPassengers et l'estimation de la tendance obtenue à la question précédente. 3. Etudiez la normalité et l'indépendance des résidus obtenus par cette décomposition. 3.2.2 Etude par lissage exponentiel 1. Utilisez la commande HoltWinters() pour décomposer selon l'algorithme de Holt-Winters avec saisonnalité la série en tendance, mouvement saisonnier et résidus. > AirPassengers.hw=HoltWinters(AirPassengers) > plot(AirPassengers.hw$fitted) 2. Tracez sur le même graphique les données AirPassengers et l'estimation de la tendance obtenue à la question précédente. 3. A l'aide de la fonction predict(), donnez en décembre 1960 une prédiction des 12 mois suivants. > predict(AirPassengers.hw,n.ahead=12) > plot(AirPassengers,xlim=c(1950,1962)) > lines(predict(AirPassengers.hw,n.ahead=12),col=5,lwd=2) 6