Le forum du Master ESA économétrie et statistique appliquée - Université d'Orléans

Vous n'êtes pas identifié.

Annonce

Vous êtes sur le forum du master ESA !

Le site du master ESA - description de la formation, notes de cours, contacts... vient de déménager !!!

Venez visiter notre nouveau site : www.master-esa.fr

#1 04-05-2009 13:17:04

lepack
membre extérieur
Date d'inscription: 04-05-2009
Messages: 11

harmonisation de données

Bonjour,

Je travaille sur un petit projet d'économétrie sous RATS.
On doit télécharger des données puis les harmoniser (car certaines sont trimestrielles et d'autres mensuelles).
Nous n'avons jamais fait cela en TP, je n'ai pas trouvé quelque chose de similaire dans le manuel de Laurent Ferrara et je ne connais pas la traduction pour "harmonisation de données" (donc c'est mort pour le manuel officiel de 250pages)...

Bref, si quelqu'un pouvait me donner un ptit tuyaux ça serait vraiment sympa smile

++
L.

Hors ligne

 

#2 04-05-2009 17:46:58

lepack
membre extérieur
Date d'inscription: 04-05-2009
Messages: 11

Re: harmonisation de données

Rebonjour,

N'ayant toujours pas trouvé de réponse j'ai décidé de faire une procédure.
Problème: lorsque je déclare ma procédure ça me met une erreur CP18.

Voici mon raisonnement:
J'ai une série trimestrielle que je veux transformer en série mensuelle par approximation linéaire.
- Admettons que ma série commence au 1er trimestre 1975 et finisse au 4ème trimestre 2008: soit 136 données.
- En mensuelle ça donnerait 406 données.
- Je dois donc multiplier ma série par une matrice à 136 collonnes et 406 lignes.
Je pense que la matrice est du style:
|1     0     0................0|
|2/3  1/3  0................0|
|1/3  2/3  0................0|
|0     2/3  1/3  0.........0|
etc etc
|0.........................0  1|


Voici l'appel de la procédure:

Code:

source 'h:\econapp\projet\qtom.src'
@qtom(print) MatChom 406 136

Voici la procédure:

Code:

procedure qtom name row column

* Declaration des variables d'entrée
type rec name
type integer row column

* Declaration des variables locales
local integer i j

* Spécification des options
option switch print 1


* Declaration de la matrice
dim name(row,column)

* initialisation de la matrice
ewise Mat(i,j) = 0
com name(1,1) =1
com name(row,column) =1

* Boucle de remplissage de la matrice
do j=1, column-1
{
do i=2, row-2, 2
{
com name(i,j) = 2/3
com name(i,j+1) = 1/3
}
}
do j=1, column-1
{
do i=3, row-1, 2
{
com name(i,j) = 1/3
com name(i,j+1) = 2/3
}
}

*option d'affichage
if print
{
write name
}


end procedure

voici l'erreur:

Code:

## CP18. QTOM is not the Name of a PROCEDURE. (Did you forget to SOURCE?)

Si quelqu'un qui s'y connait un peu sur RATS pourrait m'aider ça serait cool smile

++
L

Dernière modification par lepack (04-05-2009 17:49:14)

Hors ligne

 

#3 04-05-2009 18:20:03

esa_sr
Administrator
Date d'inscription: 21-02-2007
Messages: 5898
Site web

Re: harmonisation de données

on a bien un spécialiste RATS parmi nous mais il est un peu (beaucoup) débordé...

wait and see

A+

SR

Hors ligne

 

#4 04-05-2009 20:30:29

esa_gc
Moderator
Date d'inscription: 21-02-2007
Messages: 421

Re: harmonisation de données

En fait vous avez des erreurs de syntaxe dans votre procedure qtom.src. Donc quand Rats compile il doit signaler ces erreurs et évidemment ne créé pas l'exécutable correspondant. Du coup, à la fin de votre commande source  'h:\econapp\projet\qtom.src', il n'existe pas de procédure exécutable et du coup quand vous l'appelez avec "@qtom(print) MatChom 406 136", RATS vous répond logiquement que "QTOM is not the Name of a PROCEDURE".
Les erreurs de syntaxe sont nombreuses. Par exemple, vous appelez qtom avec comme argument une matrice : name, type rect. Mais avec cette syntaxe, la matrice en question est passée à la procédure qtom qui n'a pas le droit d'en changer le contenu. Du coup quand RATS rencontre des lignes de commande du type
com name(1,1) =1
com name(row,column) =1
et toute la suite avec les boucles en i et j, évidemment il émet un message d'erreur. Si vous voulez autoriser la procédure à modifier le contenu d'une argument, il vous faut remplacer type rect name par type rect *name
Le signe "*" est crucial. Par ailleurs, vous avez une ligne : "ewise Mat(i,j) = 0", mais il n'y a jamais eu de déclaration d'une quelconque matrice Mat.
Un détail, dans RATS faites toujours la distinction entre les réels et les entiers : mettez 0. ou 1. lorsque vous travaillez avec des objets contenant des réels. Il peut arriver en mettant 0 ou 1 que RATS comprenne que vous définissez un objet contenant des entiers...et là on peut courrir à la catastrophe en se demandant par exemple pourquoi 4/8 = 0 alors qu'on attend 0.5, ou chez vous, pourquoi 2/3 fait 0 (comme 1/3 d'ailleurs), ce qui donne une allure toute différente de celle attendue à votre matrice de pondération.
Mais, maintenant, en dehors de ces problèmes de syntaxe, je ne suis pas sûr du tout que votre matrice fait bien ce que vous voulez (au passage vous dites que vous avez une série de 136 points et ensuite vous manipulez des matrices. Or avec RATS matrice et séries sont des objets différents, ainsi le premier se gère avec compute, le second avec set, mais il y a plein d'autres différences. Par exemple la gestion des dates, et des décalages est beaucoup plus simple avec les objets séries) En tout cas, si vos données initiales sont dans une matrice (136,1) et qu'à la sortie vous voulez récupérer une matrice (408,1), il faut multiplier la première par une (408,136) et si je regarde ce que vous utilisez
|1     0     0................0|
|2/3  1/3  0................0|
|1/3  2/3  0................0|
je comprends qu'en janvier 1975 (pour reprendre votre exemple), on a la valeur du 1er trimestre 1975; qu'en février 1975, on a une valeur égale aux 2/3 de la valeur du 1er trimestre augmentée du tiers de la valeur du second trimestre....est-ce bien cela que vous voulez ?
Quand vous voulez harmoniser avec des données mensuelles d'un côté et des trimestrielles de l'autre, il est certainement plus simple, et plus juste, de tout mettre en trimestriel (en prenant des moyennes sur 3 mois, ou la donnée du dernier mois de chaque trimestre par exemple), que de faire l'inverse. Si vous voulez quand même mettre tout en mensuel, allez voir du côté de la procédure "interpol.src" donnée par estima et disponible sur leur site.

Hors ligne

 

#5 05-05-2009 06:29:38

lepack
membre extérieur
Date d'inscription: 04-05-2009
Messages: 11

Re: harmonisation de données

Merci beaucoup pour votre réponse.
C'est ma première procédure et nous n'en avions jamais fait en TP donc désolé pour les erreurs de "base".

Pour ma matrice la première ligne renverra la valeur de mars vu que je crois que la première valeur trimestriel correspond à la 3ème valeur en mensuel.
Effectivement la deuxième ligne prend 2/3 de la première valeur et 1/3 de la seconde valeur...etc
J'ai pensé que faire une approximation linéaire (comme demandé dans l'énoncé de mon projet) correspondait à ça.
Ensuite ma matrice est fausse car toute les lignes 1+3n auraient dues contenir un 1 (pour reprendre la valeur donnée dans la série de base). J'y ai pensé en me réveillant... Ca devient grave smile

Merci pour le tuyaux sur la procédure interpol.src et pour la "correction" de ma procédure en tout cas.

++
L

Hors ligne

 

#6 05-05-2009 17:37:58

lepack
membre extérieur
Date d'inscription: 04-05-2009
Messages: 11

Re: harmonisation de données

Juste une remarque: Sachant que mes données (taux de chomage) commencent au premier trimestre 1975 je ne peux pas calculer linéairement janvier et février: d'où mon 406 et non 408.
J'ai bon?

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

[ Generated in 0.011 seconds, 6 queries executed ]