Time Serie, Zoo, Moyenne Mobile

Groupe des utilisateurs du logiciel R

Un forum francophone d'échange autour du logiciel de calcul statistique R

Vers le contenu

Rechercher Recherche avancée

Time serie, zoo, moyenne mobile

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

Répondre Rechercher Recherche avancée 10 messages • Page 1 sur 1 Didier ILLAN Messages : 23 Enregistré le : 27 Sep 2010, 07:59

Time serie, zoo, moyenne mobile

  • Citation

Messagepar Didier ILLAN » 27 Sep 2010, 13:07

Bonjour, voila je suis nouveau sur R, et je pose surement des questions maintefois posées (j'espère pas). Je souhaiterai pouvoir comparer des données qui sont relevés à intervalle régulier (par heure), chaque jour. Je suis parti donc sur l'apprentissage (je ne suis pas statisticiens à l'origine) des séries chronologiques. J'ai donc un fichier csv qui à cette forme
    DATE;RCMetro;RCRER;REMetro;SEC;Tetracite01/09/2010 00:00 ; NA; NA; NA; NA; NA01/09/2010 01:00 ; NA; NA; NA; NA; NA01/09/2010 02:00 ; NA; NA; NA; NA; NA01/09/2010 03:00 ; 23.0000000000; NA; 22.0000000000; 33.0000000000; NA01/09/2010 04:00 ; 78.0000000000; NA; 23.0000000000; 10.0000000000; NA01/09/2010 05:00 ; 362.0000000000; NA; 818.0000000000; 38.0000000000; NA01/09/2010 06:00 ; 397.0000000000; 1.0000000000; 335.0000000000; 10.0000000000; NA
Après beaucoup de recherche, je suis parti pour utiliser le package "zoo" et la fonction read.zoo afin de créer une time serie à partir de ces données. Ce qui me semble marche pas trop mal. avec la commande : TabZOO <- read.zoo("CAPACITE_cdr_nbre_com_services.rrd.csv", format="%d/%m/%Y %H:%M", FUN=as.chron, regular=TRUE, index.column=1, sep=";", dec=".", header=TRUE, na.strings="NA") j'obtiens en résultat: > str(TabZOO) ‘zooreg’ series from (09/01/10 00:00:00) to (09/23/10 23:00:00) Data: chr [1:552, 1:5] NA NA NA "23" "78" "362" "397" "644" "469" "553" "540" "405" "399" "236" "321" "463" "528" "483" "447" ... - attr(*, "dimnames")=List of 2 ..$ : NULL ..$ : chr [1:5] "RCMetro" "RCRER" "REMetro" "SEC" ... Index: Classes 'chron', 'dates', 'times' atomic [1:552] 14853 14853 14853 14853 14853 ... ..- attr(*, "format")= Named chr [1:2] "m/d/y" "h:m:s" .. ..- attr(*, "names")= chr [1:2] "dates" "times" ..- attr(*, "origin")= Named num [1:3] 1 1 1970 .. ..- attr(*, "names")= chr [1:3] "month" "day" "year" Frequency: 24 c'est maintenant que je suis ennuyé, parce que mes données sont de type "caractère" et je souhaiterai quelles soient de type "numerique". Avez-vous une idée, en sachant que j'ai essayé as.numeric mais cela n'a pas l'air de marcher. Ensuite je voudrais réaliser des moyennes mobiles, et là cela ne semble pas fonctionner avec le moyen: filter et kernel Auriez-vous des idées et conseils?? Merci Haut Aline Deschamps Messages : 133 Enregistré le : 11 Mai 2010, 07:49 Contact : Contacter Aline Deschamps Site Internet
  • Citation

Messagepar Aline Deschamps » 27 Sep 2010, 14:42

Bonjour, Je ne connais pas le package "zoo", mais pour la gestion des dates/heures, le package "chron" me semble assez bien approprié (peut-être en effectuant quelques petites modifications sur la forme des données...). Il permettrait je pense de simplement transformer la 1ère colonne en format date, et de passer les autres en "as.numeric". Cordialement, A.D. Haut Serge Rapenne Messages : 1426 Enregistré le : 20 Aoû 2007, 15:17 Contact : Contacter Serge Rapenne Site Internet
  • Citation

Messagepar Serge Rapenne » 27 Sep 2010, 15:19

Bonjour, je ne connais pas le package zoo mais l'aide de la fonction read.zoo indique qu'elle est une interface à la fonction read.table. Dans ce cas les paramètres de read.table sont disponibles dans read.zoo et notamment la paramètre colClasses qui permet de spécifier le type de données dans les colonnes.

Code : Tout sélectionner

?read.table pour les détails. Si tu as besoin d'aide pour définir ce paramètre donne nous un bout de ton fichier de donnée (le fichier CAPACITE_cdr_nbre_com_services.rrd.csv pas l'objet TABZOO) pour pouvoir faire des testsSergeEdit; Il y a un exemple de l'utilisation de colClasses dans read.zoo dans l'aide de read.zoo

Code : Tout sélectionner

?read.zoo Haut Didier ILLAN Messages : 23 Enregistré le : 27 Sep 2010, 07:59
  • Citation

Messagepar Didier ILLAN » 27 Sep 2010, 17:23

Merci pour vos remarques. J'avais vu ce paramètre "colClass" dans read.table, mais je n'ai pas compris comment l'utiliser. Je souhaite que mes colonnes autres que le temps (1er colonne index) soit des entiers. Je veux bien donner un bout de mon fichier csv mais comment fait-t-on pour l'ajouter?? Mon but est de créer un Time Serie pour effectuer des fonctions simples, tendance, regression lineaire, moyenne mobile, coef de variation saisonnier ce genre de chose. Si vous avez une autre méthode simple, je suis preneur. Merci encore de votre patiente, je fait mon stage de fin d'année de Master en Télécom et je ne suis pas doué en Stats. Haut Serge Rapenne Messages : 1426 Enregistré le : 20 Aoû 2007, 15:17 Contact : Contacter Serge Rapenne Site Internet
  • Citation

Messagepar Serge Rapenne » 28 Sep 2010, 06:33

En utilisant les données qui sont dans ton message d'origine ceci semble fonctionner :

Code : Tout sélectionner

TabZOO <- read.zoo("r:/toto.txt", format="%d/%m/%Y %H:%M", FUN=as.chron, regular=TRUE, index.column=1, sep=";", dec=".", header=TRUE, na.strings="NA", colClasses=c("character","numeric","numeric","numeric","numeric","numeric")) En ce qui concerne les moyennes mobiles, il semble que la fonction rollmean du package ZOO fasse ça Serge Haut Didier ILLAN Messages : 23 Enregistré le : 27 Sep 2010, 07:59
  • Citation

Messagepar Didier ILLAN » 29 Sep 2010, 11:48

Merci, la commande read.zoo avec le paramètre colClass fonctionne bien. En revanche je rencontre un problème pour réaliser ma moyenne mobile. En effet j'ai un comportement périodique toutes les 24h, je souhaite donc faire une moyenne mobile d'ordre 24 (je crois que c'est cela). Mais je ne vois pas comment réaliser cela avec rollmean. Est-ce que quelqu'un aurait un idée. En vous remerçiant par avance. Haut Dominique Soudant Messages : 758 Enregistré le : 23 Avr 2008, 11:12 Contact : Contacter Dominique Soudant Site Internet
  • Citation

Messagepar Dominique Soudant » 29 Sep 2010, 12:37

Didier ILLAN a écrit :Est-ce que quelqu'un aurait un idée.
?decomposeZoo répond à un besoin particulier :
An S3 class with methods for totally ordered indexed observations. It is particularly aimed at irregular time series of numeric vectors/matrices and factors. zoo's key design goals are independence of a particular index/date/time class and consistency with ts and base R by providing methods to extend standard generics.
Si tu n'as pas ce besoin (ta série temporelle à l'air bien régulière, vue d'ici ... ), tu te mets peut être des cailloux dans les chaussures pour rien. En même temps ça ne fait que déplacer le pb : pour décompose() il faudra que tu fasses une ts avec tes données. Haut Didier ILLAN Messages : 23 Enregistré le : 27 Sep 2010, 07:59
  • Citation

Messagepar Didier ILLAN » 29 Sep 2010, 13:12

Oui effectivement c'est peut être trop lour pour mon besoin dont les données sont absolument régulière. Que me conseillerai vous alors comme solution. Je suis avec mon fichier excel, et je souhaiterai donc constituer ma time série en utlisant la valeur temps (étant donné quelle est fournie, je trouve dommage de ne pas en profiter). en utilisant un read.csv, mais quelle fonction pour récupérér l'index temps et est-ce que je peux garder mes valeurs en type "numerique" avec colClass? je pensais à cela mais ce n'est peut être pas le plus adapté: Tab2$DATE ← strptime(Tab2$DATE, format= "%d/%m/%Y %H:%M") Par contre ensuite je ne sais pas transformer ces données en TS? Merci Haut Dominique Soudant Messages : 758 Enregistré le : 23 Avr 2008, 11:12 Contact : Contacter Dominique Soudant Site Internet
  • Citation

Messagepar Dominique Soudant » 29 Sep 2010, 13:50

Soit une data frame :

Code : Tout sélectionner

> head(Série[,c("Année","Trimestre","Observée")]) Année Trimestre Observée1 1979 1 5.9436132 1979 2 3.6424283 1979 3 3.5680244 1979 4 5.8063055 1980 1 6.5477556 1980 2 4.104974Attendu que la série est absolument régulière et donc que j'ai comblé les irrégularités par des NA :

Code : Tout sélectionner

> tail(Série[,c("Année","Trimestre","Observée")]) Année Trimestre Observée115 2007 3 NA116 2007 4 NA117 2008 1 5.402427118 2008 2 NA119 2008 3 NA120 2008 4 NAJe peux transformer ce DF en TS via :

Code : Tout sélectionner

TSObservée <- ts(Série$Observée ,frequency=4 ,start=c(min(Série$Année),1) ,end=c(max(Série$Année),4))Dans ton problème, tu as des jours subdivisés en heures. Il faut que tu te fasses une variable jour et une variable heure. Jour est une série régulière (i.e. 0,1,2, ... ) Heure vaut de 0 à 23.EDITPour générer la série des jours (e.g. 34) tu peux utiliser un

Code : Tout sélectionner

rep(1:34,each=24)pendant que pour les heures tu peux faire un

Code : Tout sélectionner

rep(0:23,34)Si tu préfères t'appuyer sur ta date, pour les jour tu peux t'appuyer sur la fonction julian() mais il faut que ta date arrive en format date, ce que tu pourras faire avec un

Code : Tout sélectionner

as.Date(substr(<taVariableDate>,1,10),"%d/%m/%Y")), et pour la variable Heure un

Code : Tout sélectionner

substr(<taVariableDate>,12,13)Je garantis pas le code dans les détails, mais l'essentiel est là. L'erreur n'est pas l'erreur, l'erreur c'est de commencer. J'ai commencé, je fini ... Haut Didier ILLAN Messages : 23 Enregistré le : 27 Sep 2010, 07:59
  • Citation

Messagepar Didier ILLAN » 30 Sep 2010, 14:41

Bonjour, bon j'avance tout de même, j'ai utilisé le package "timeSeries". J'ai pu donc convertir mon data.frame en time série. maintenant je voudrais réaliser ma moyenne mobile, j'ai vu qu'il y avait une fonction "kernel" Je crois comprendre (je ne suis pas expert) qu'avec la fonction "modified.Daniell" ça me permet d'avoir des coefficients pour ma moyenne pondérée paire. ex: k2 <- kernel("modified.daniell", 24) j'ai vu qu'il fallait faire un "kernapply()" pour appliquer cette fonction. Dans le package timeSerie, la fonction pour appliquer une fonction est fapply(x, from, to, FUN). Je pense que c'est dans la partie FUN qu'il faut que je rentre l'information du kernapply mais je ne vois pas comment. Si quelqu'un peut m'aider? Merci Didier Haut Afficher les messages postés depuis : Tous1 jour7 jours2 semaines1 mois3 mois6 mois1 an Trier par AuteurDateSujet CroissantDécroissant Répondre 10 messages • Page 1 sur 1

Retourner vers « Questions en cours »

Aller à
  • Annonces
  • Annonces
  • Fichiers
  • Fiches
  • Packages
  • Liens
  • Scripts et fonctions R
  • Discussions
  • Questions en cours
  • Archives : Environnement de R
  • Archives : Manipulation de données avec R
  • Archives : Fonctions graphiques
  • Archives : Fonctions statistiques
  • Archives : Autres

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

Développé par phpBB® Forum Software © phpBB Limited Traduit par phpBB-fr.com

Tag » Code R Moyenne Mobile