Désagrégation d'une série temporelle en selon 3 motifs

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Frederic Baronnat
Messages : 4
Enregistré le : 23 Juil 2008, 10:58

Désagrégation d'une série temporelle en selon 3 motifs

Messagepar Frederic Baronnat » 24 Juil 2008, 14:51

Bonjour à tous :) ,

Je je dois effectuer un traitement sur des séries chronologiques à l'aide du logiciel R (mes finances ne me permettant pas de m'offrir le logiciel SAS dont j'ai appris à me servir en cours, j'utilise donc pour la première fois R pour ce travail).

Je dispose de séries de comptages du trafic routier heure par heure sur des périodes de plusieurs mois. Ces séries sont stationnaires, le trafic étant stable sur une période de plusieurs mois si on mets de côté les mois particuliers de juillet aout et septembre). Je voudrai réaliser une désagrégation de ces comptage de manière à trouver trois "sous courbes" de répartition de ma série chronologique entre sept et vingt heures, selon trois motifs liés aux déplacements.

En outre je dispose pour cela d'informations supplémentaires que j'aimerai pouvoir intégrer à ce problème, à savoir la répartition ( en pourcentage) de ces motifs cette période 7 à 20 h.

J'ai essayé de réaliser une analyse ARMA (bidouillé à partir d'un exemple d'analyse du niveau du lac Huron que j'ai trouvé sur internet, mais je ne suis pas convaincu du résultat) mais j'ai du mal à interpréter les coefficients et autre résultats donnés (le chapitre des séries chronologiques n' a pas été abordé cette année en cours :/ ).

Quelqu'un pourrait il m'expliquer comment choisir les paramètres p et q d'un modèle ARMA et comment interpréter les coefficients donnés en résultats.

D'autre part comment pourrai-je différencier les périodes aillant les mêmes caractéristiques au niveau de la circulation (même heures de la journée jour après jour, ou alors même profil dans les déplacement du mardi ou jeudi, un peu moins important le lundi et vendredi et beaucoup moins importants les Weekends)

Autrement si quelqu'un sait comment réaliser une analyse spectrale et interpréter les résultats je serait fortement intéressé.

Enfin pour être sur d'avoir bien compris, une pacf indique qu'on a pas de corrélation entre les données lorsqu'aucune autres barres que la première ne dépasse les lignes en pointillés , c'est bien ça ?

voici le code que j'ai utilisé, je l'ai trouvé à l'adresse http://foad.univ-tlse1.fr/mod/resource/ ... p?id=11406 pour parer à toute accusation de plagiat :p .

Les lignes qui commencent par le symbole * sont celles que j'ai modifiées pour les adapter à ma série, d'autre part j'ai enlevé les interprétations de
l'exemple sur le lac Huron qui ne servent pour le coup à rien dans le code affiché ici.

Enfin j'ai remplacé le nom de la variable étudié originellement à savoir niveau par debit pour rendre les choses plus explicites.

# lecture des données
*> debit = scan('g:/R/type1.txt')

> # conversion en série temporelle, annuelle commençant en 1
*> debit = ts(debit,start=1,frequency=1)

> # estimation MCO du débit ( j'ai repris de l'exemple sur le lac Huron cette régression, mais je ne suis aps convaincu de son utilité dans mon cas :/ )
> temps = 1:length(debit)
> regmco = lm(debit ~ temps)
> # examen des résidus. Si on ne sait où ils sont dans l’objet regmco, taper
> plot(temps, regmco$residuals, type="l")
> # ACF et PACF
> source("g:/R/identif_outils.R") #*fichier récupéré avec l'exemple, qui permet entre autre de lancer la commande acf2

> plot(debit)
*>= title("débit de la circulation heure par heure")
> acf2( debit)

> temps = 1:length(debit)
> regmco = lm(debit ~ temps)

> plot(temps, regmco$residuals, type="l")
> abline(h=0, untf = FALSE)
> title("Résidus MCO")

#On décide d'ajuster un modèle tenant compte de la dynamique de l'erreur révélée sur ces résidus. * C'est à dire dans mon cas ?
#Le modèle qu'on veut ajuster est
*#y_t est le débit de l'heure t, t= 1, 2,...n Z_t est un bruit blanc.
#C'est un exemple de modèle ARMAX.
#Il faut d'abord identifier les ordres p d'auto régression et q de moyenne mobile.
#On mène cette opération sur les résidus de l'ajustement MCO.

*> source("g:/R/identif_outils.R")
> acf2( regmco$residuals)

*> resimco<- regmco$residuals
#( j'ai rajouté cette ligne pour que r reconnaisse la variable resimco utilisée plus loin et qui n'était pas à la base définie)

> (ajustar1 = arima(resimco, order = c(1, 0, 0),include.mean = FALSE))
> # test de blancheur * ( je ne sais pas exactement à quoi sert ce test si quelqu un le sait ça m'interesse aussi)
> tsdiag(ajustar1)
> # version alphanumérique du test
> Box.test.2(ajustar1$residuals, 1:10)
# On essaie maintenant avec un modèle AR(2) pour l'erreur.

> (ajustar2 = arima(resimco, order = c(2, 0, 0),include.mean = FALSE))

> # significativité des coefficients
> t_stat(ajustar2)

> # examen de l’ACF des résidus de l'ajustement du modèle AR(2) ci-dessus
> # et test de blancheur
> tsdiag(ajustar2)
> # version alphanumérique du test

> # ajustement simultané de la moyenne et de la structure de covariance par maximum de vraisemblance

> (ajustsim2 = arima(debit, order = c(2, 0, 0),xreg = temps, method="ML"))

Un exemple de fichier de comptage est accessible à l'adresse suivante : http://cjoint.com/?hyqLdVwDHw

Matthieu Stigler
Messages : 141
Enregistré le : 07 Sep 2007, 11:30

Re: Désagrégation d'une série temporelle en selon 3 motifs

Messagepar Matthieu Stigler » 25 Juil 2008, 14:32

Frederic Baronnat a écrit :Bonjour à tous :) ,

Je je dois effectuer un traitement sur des séries chronologiques à l'aide du logiciel R (mes finances ne me permettant pas de m'offrir le logiciel SAS dont j'ai appris à me servir en cours, j'utilise donc pour la première fois R pour ce travail).

Je dispose de séries de comptages du trafic routier heure par heure sur des périodes de plusieurs mois. Ces séries sont stationnaires, le trafic étant stable sur une période de plusieurs mois si on mets de côté les mois particuliers de juillet aout et septembre). Je voudrai réaliser une désagrégation de ces comptage de manière à trouver trois "sous courbes" de répartition de ma série chronologique entre sept et vingt heures, selon trois motifs liés aux déplacements.

En outre je dispose pour cela d'informations supplémentaires que j'aimerai pouvoir intégrer à ce problème, à savoir la répartition ( en pourcentage) de ces motifs cette période 7 à 20 h.

J'ai essayé de réaliser une analyse ARMA (bidouillé à partir d'un exemple d'analyse du niveau du lac Huron que j'ai trouvé sur internet, mais je ne suis pas convaincu du résultat) mais j'ai du mal à interpréter les coefficients et autre résultats donnés (le chapitre des séries chronologiques n' a pas été abordé cette année en cours :/ ).

Quelqu'un pourrait il m'expliquer comment choisir les paramètres p et q d'un modèle ARMA et comment interpréter les coefficients donnés en résultats.

R a un algorithme interne utilisé automatiquement pour déterminer p et q (selon le critère AIC). L'interprétation des coefficients par contre n'est pas aisée du tout... surtout si tu as en plus des composantes MA. Taditionellement, on interprète pas ces paramètres d'ailleurs.


D'autre part comment pourrai-je différencier les périodes aillant les mêmes caractéristiques au niveau de la circulation (même heures de la journée jour après jour, ou alors même profil dans les déplacement du mardi ou jeudi, un peu moins important le lundi et vendredi et beaucoup moins importants les Weekends)

Autrement si quelqu'un sait comment réaliser une analyse spectrale et interpréter les résultats je serait fortement intéressé.

Enfin pour être sur d'avoir bien compris, une pacf indique qu'on a pas de corrélation entre les données lorsqu'aucune autres barres que la première ne dépasse les lignes en pointillés , c'est bien ça ?

Oui c'est juste!
voici le code que j'ai utilisé, je l'ai trouvé à l'adresse http://foad.univ-tlse1.fr/mod/resource/ ... p?id=11406 pour parer à toute accusation de plagiat :p .

Les lignes qui commencent par le symbole * sont celles que j'ai modifiées pour les adapter à ma série, d'autre part j'ai enlevé les interprétations de
l'exemple sur le lac Huron qui ne servent pour le coup à rien dans le code affiché ici.

Enfin j'ai remplacé le nom de la variable étudié originellement à savoir niveau par debit pour rendre les choses plus explicites.

# lecture des données
*> debit = scan('g:/R/type1.txt')

> # conversion en série temporelle, annuelle commençant en 1
*> debit = ts(debit,start=1,frequency=1)

> # estimation MCO du débit ( j'ai repris de l'exemple sur le lac Huron cette régression, mais je ne suis aps convaincu de son utilité dans mon cas :/ )
> temps = 1:length(debit)
> regmco = lm(debit ~ temps)
> # examen des résidus. Si on ne sait où ils sont dans l’objet regmco, taper
> plot(temps, regmco$residuals, type="l")
> # ACF et PACF
> source("g:/R/identif_outils.R") #*fichier récupéré avec l'exemple, qui permet entre autre de lancer la commande acf2

> plot(debit)
*>= title("débit de la circulation heure par heure")
> acf2( debit)

> temps = 1:length(debit)
> regmco = lm(debit ~ temps)

> plot(temps, regmco$residuals, type="l")
> abline(h=0, untf = FALSE)
> title("Résidus MCO")

#On décide d'ajuster un modèle tenant compte de la dynamique de l'erreur révélée sur ces résidus. * C'est à dire dans mon cas ?
#Le modèle qu'on veut ajuster est
*#y_t est le débit de l'heure t, t= 1, 2,...n Z_t est un bruit blanc.
#C'est un exemple de modèle ARMAX.


#Il faut d'abord identifier les ordres p d'auto régression et q de moyenne mobile.
#On mène cette opération sur les résidus de l'ajustement MCO.

*> source("g:/R/identif_outils.R")
> acf2( regmco$residuals)

*> resimco<- regmco$residuals
#( j'ai rajouté cette ligne pour que r reconnaisse la variable resimco utilisée plus loin et qui n'était pas à la base définie)

> (ajustar1 = arima(resimco, order = c(1, 0, 0),include.mean = FALSE))
> # test de blancheur * ( je ne sais pas exactement à quoi sert ce test si quelqu un le sait ça m'interesse aussi)

test de blancheur veut dire à mon avis voir si la série peut être apprentée à un bruit blanc (hypothèse du modèle)
> tsdiag(ajustar1)
> # version alphanumérique du test
> Box.test.2(ajustar1$residuals, 1:10)
# On essaie maintenant avec un modèle AR(2) pour l'erreur.

> (ajustar2 = arima(resimco, order = c(2, 0, 0),include.mean = FALSE))

> # significativité des coefficients
> t_stat(ajustar2)

> # examen de l’ACF des résidus de l'ajustement du modèle AR(2) ci-dessus
> # et test de blancheur
> tsdiag(ajustar2)
> # version alphanumérique du test

> # ajustement simultané de la moyenne et de la structure de covariance par maximum de vraisemblance

> (ajustsim2 = arima(debit, order = c(2, 0, 0),xreg = temps, method="ML"))

Un exemple de fichier de comptage est accessible à l'adresse suivante : http://cjoint.com/?hyqLdVwDHw


Petite remarque: il est conseillé d'utiliser <- plutôt que = dans l'assignement des variables. Sinon, je n'ai pas assez bien compris ce que tu voulais exactement faire pour te dire qqch sur le code. Remarque que la première étape enlève le trend des données, ce qui ne te concerne pas vu que tu dis que tes variables sont stationnaires.

L'utilisation des modèles temporels sans avoir étudié la chose au préalable est très difficile... je te conseille de lire avant un manuel la-dessus.La démarche utilisée dans et exemple est celle classique dite à la Box-Jenkins: cherche un modèle, teste (de blancheur) les résidus, s'ils sont des bruits bancs ton modèle est bon, sinon essaie autre modèle.

Frederic Baronnat
Messages : 4
Enregistré le : 23 Juil 2008, 10:58

Re: Désagrégation d'une série temporelle en selon 3 motifs

Messagepar Frederic Baronnat » 11 Aoû 2008, 14:56

Matthieu Stigler a écrit :
R a un algorithme interne utilisé automatiquement pour déterminer p et q (selon le critère AIC). L'interprétation des coefficients par contre n'est pas aisée du tout... surtout si tu as en plus des composantes MA. Taditionellement, on interprète pas ces paramètres d'ailleurs.



Comment faire pour utiliser la détection automatique de p et q ?
Si je ne rentre pas ces paramètres, R semble considérer que la valeur à leur attribuer est 0 :/

Matthieu Stigler
Messages : 141
Enregistré le : 07 Sep 2007, 11:30

Messagepar Matthieu Stigler » 11 Aoû 2008, 16:06

je me suis un peu trompé, seulement la fonction ar() a un algorithme automatique (min AIC) de sélection, arima pas. Par contre, dans le package forecast, la fonction auto.arima devrait t'être utile! les algos font min AIC ou BIC jette-y un coup d'oeil.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité