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