Vous n'êtes pas identifié.
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
Pages: 1 2
Bonjour à tous,
Je dois prédire la VaR out-of-sample des mes rendements de Brent par l'intermédiaire d'un GED-EGARCH(1,1)
pour cela j'utilise la macro SAS suivante:
/*importation des données*/
data brent;
infile 'F:\chemin\brent.csv' dlm=';';
input date rdt;
run;
data brent(keep=date rdt);
proc sort data = in.brent; by date; run; quit;
*------------ Représentation Graphique des Rendements --------------;
title 'Rendements du cours du Brent';
proc gplot data=in.brent;
plot rdt*date / legend;
symbol i=join c=black;
label rdt='rendement';
run;
quit;
*----------------- Construction Macro VaR Out of Sample ---------------------;
/*------- Idée de la Macro : Estimation du modèle GARCH sur les 75% premières observations
et prévision de la VaR out-of-sample pour les 25% restantes en utilisant
des échantillons glissants */
/* Les inputs de la macro sont :
database : Nom de la base de données où se trouve les rendements;
varname : Le nom donné à la série des rendements dans la base précédente
insize : la taille de l échantillon d estimation (in-sample). Elle est ici
égale à T*0.75 avec T la taille totale de l échantillon
tc : le taux de couverture de la VaR (1% ou 5%) */
%macro VaROutofSample(database=brent,varname=rdt,insize=1311,tc=5%);
*---- On change le nom de la variable de rendement en y;
data ChangeName;
set brent;
rename rdt=y;
run;
*---- On récupère le nombre total d observations dans la macro-variable nobs;
data ChangeName;
set brent;
call symput('nobs',_n_);
run;
*------------------------ Grande boucle pour calcul des VaR out-of-sample;
*------- Construction de l échantillon d estimation rolling;
%let fin = %sysevalf(&nobs-&insize);
%do i=1 %to &fin;
%let o = %sysevalf(&insize-1+&i);
data insample;
set ChangeName;
if _n_>=&i and _n_<=&o then output;
run;
*------ Estimation du modèle Garch sous loi normale;
proc model data = insample outparms=param;
parms c .0 arch0 .1 arch1 .2 garch1 .75 ;
/* Equation moyenne*/;
y = c ;
/* Equation variance*/;
h.y = arch0 + arch1*xlag(resid.y**2,mse.y)+garch1*xlag(h.y,mse.y);
/* Estimation du modèle*/;
fit y / method = marquardt fiml out=ResultGarchNormal(drop=_estype_ _type_ _weight_) outactual;
outvars date y h.y;
run ;
quit ;
data ResultGarchNormalLast;
set ResultGarchNormal;
if _n_=&insize then output;
run;
data param;
set param;
call symput('const',c);
call symput('w',arch0);
call symput('alpha',arch1);
call symput('beta',garch1);
run;
data VaR;
set ResultGarchNormalLast;
h_prev = &w+&alpha*(y-&const)**2+&beta*h_y;
VaR = &const+quantile('normal',&tc)*sqrt(h_prev);
run;
%if &i=1 %then %do;
data RecupVaR;
set VaR;
run;
%end;
%else %do;
data RecupVaR;
set RecupVaR VaR;
run;
%end;
%end;
proc gplot data=RecupVaR;
plot y*date=1 VaR*date=2 / overlay;
symbol1 i=join v=none c=black;
symbol2 i=join v=none c=red;
run; quit;
%mend;
%VaROutofSample(database=in.brent,varname=rdt,insize=1311,tc=0.05);
Lorsque je run ce programme, le programme tourne mais je n'obtiens aucun résultats et je reçois le message d'erreur suivant
ERROR: Variable DATE introuvable.
ERROR: Variable DATE introuvable.
NOTE: L'instruction précédente a été supprimée.
NOTE: Aucune observation dans la table WORK.RECUPVAR.
NOTE: Procédure GPLOT a utilisé (Durée totale du traitement) :
temps réel 0.00 secondes
temps UC 0.00 secondes
Si quelqu'un pouvait m'aider je lui serai très reconnaissant.
Merci d'avance.
Hors ligne
commençons par le commencement :
/*importation des données*/ data brent; infile 'F:\chemin\brent.csv' dlm=';'; input date rdt; run;
quelle forme ont vos dates dans votre fichiers CSV ?
il est étonnant que vous puissiez gérer vos dates dans utiliser d'INFORMAT...
a+
Hors ligne
Bonjour esa_sr,
mes données ont le format txt dans mon fichier csv.
Cdt.
Hors ligne
et la question suivante sera :
qu'est ce qui sépare dans votre fichier CSV les modalités de date et de rdt
et la question d'après sera :
mais quelle est le séparateur décimal de votre rendement ? . ou , ?
a+
Hors ligne
esa_sr,
-Les dates sont de la forme mm/dd/yy c'est à dire 8/20/2003 par exemple
-Les modalités de date et les rdt sont séparés par des ";".
-Le séparateur décimal des rendements est "."
Merci.
Hors ligne
alors votre table n'est pas créée (et donc, calculer une VaR à partir d'une table qui n'existe pas..)
/*importation des données*/ data brent; infile 'F:\chemin\brent.csv' dlm=';'; input date :mmddyy10. rdt; run;
vous me semblez être un bon candidat pour devenir lecteur de mon bouquin ;-)
www.sas-sr.com
a+
Hors ligne
Merci. J'ai fait le code suivant
/*importation des données*/
data brent;
infile 'F:\chemin\brent.csv' dlm=';';
input date :mmddyy10. rdt;
run;
et j'obtient
NOTE: Données incorrectes pour rdt à la ligne 1 11-12.
REGLE : ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
1 8/20/2003;NA 12
date=15937 rdt=. _ERROR_=1 _N_=1
NOTE: 1748 enregistrements lus dans infile 'F:\Mémoire mineur\Modélisation appliquée à la finance\brent.csv'.
La longueur min. de l'enregistrement était 12.
La longueur max. de l'enregistrement était 20.
NOTE: La table WORK.BRENT a 1748 observation(s) et 2 variable(s).
NOTE: L'étape DATA a utilisé (Durée totale du traitement) :
temps réel 0.18 secondes
temps UC 0.14 secondes
Hors ligne
Il n'y a que deux variables: la variable "date" qui correspond à ma dimension temporelle et la variable "rdt" pour mes rendements.
Hors ligne
esa_sr,
J'ai retiré la première ligne avec la valeur NA, importé les données, puis run le programme et j'ai toujours le même problème la variable DATE est introuvable.
Hors ligne
passons maintenant à la seconde instruction de votre programme :
data brent(keep=date rdt); proc sort data = in.brent; by date; run; quit;
à la fin du premier lot d'instruction, vous avez créé une table BRENT
maintenant, avec la première instruction de ce second lot :
data brent (keep=date rdt);
vous demandez à SAS de créer à nouveau brent (et donc SAS va le faire mais il va détruire la table brent créée précédemment)
il manque une instruction SET BRENT;
Petite remarque (ne le prenez pas mal) : tel que je le vois actuellement, vous tentez de faire fonctionner une macro que vous avez récupéré certainement sur notre site de prévision de la VaR en ligne sans n'avoir jamais utilisé SAS.
Ça ne va pas être simple...
Hors ligne
esa_sr,
La macro m'a été transmise pas l'un des mes prof, mais comme je suis novice en sas il est effectivement difficile
pour moi de la comprendre et de la faire tourner.
Cdt
Hors ligne
ensuite, autre problème, vous faites référence à une bibliothèque IN
(proc sort data=in.brent..)
qui n'existe pas
remplacez par proc sort data=brent
mais, il faudrait que je vérifie, cette macro me semble sortir de chez nous :
http://193.49.79.89/esa_prof/index.php
a+
Hors ligne
Elle sort très certainement de chez vous car c'est Mr Tokpavi qui me l'a transmise.
En fait j'ai cré la bibliothèque IN avec un libname.
Hors ligne
Bonjour,
Au fait c'est pour quand la mise en place de la VAR-multivariée sur le site (prevision value at risk)......il m'a semblé que des étudiants ont obtenu des résultats plutôt satisfaisant lors des derniers projets
Bien à vous,
Dernière modification par sspdiddy (13-08-2010 13:54:35)
Hors ligne
sspdiddy a écrit:
Bonjour,
Au fait c'est pour quand la mise en place de la VAR-multivariée sur le site (prevision value at risk)......il m'a semblé que des étudiants ont obtenu des résultats plutôt satisfaisant lors des derniers projets
Bien à vous,
et bien on vous colle dessus à la rentrée ?
a+
Hors ligne
cumpaz23 a écrit:
Elle sort très certainement de chez vous car c'est Mr Tokpavi qui me l'a transmise.
En fait j'ai cré la bibliothèque IN avec un libname.
il faudra lui donner notre bonjour !
a+
Hors ligne
Pas de problème!
Pour le chargement des données, j'ai fait comme vous m'avez dit mais lorsque je fais tourner la macro la macro-variable "nobs"
n'est pas connue.
Hors ligne
Refonte du site programmée pour novembre : modification de la mise en page, inclusion du VaR multi etc.. + intégration des données utilisateurs...
CH
Hors ligne
cumpaz23 a écrit:
Pas de problème!
Pour le chargement des données, j'ai fait comme vous m'avez dit mais lorsque je fais tourner la macro la macro-variable "nobs"
n'est pas connue.
nobs est crée ici :
data ChangeName;
set brent;
call symput('nobs',_n_);
run;
si elle n'est pas créée, c'est que la table BRENT n'existe toujours pas...
faites un proc print sur brent et regardez ce que vous avez dans cette table (si elle existe...)
a+
Hors ligne
Bonjour esa_sr,
La bibliothèque "in" est créée et les données importées par les commandes:
*---------------------------- Création Bibliothèque -------------------------;
libname in 'F:\chemin;
*----------------------- Importation Base de Données -----------------------;
/*importation des données*/
data brent;
infile 'F:\chemin\brent.csv' dlm=';';
input date:mmddyy10. rdt;
format date:mmddyy10.;
run;
data brent(keep= date rdt);
set brent;
run;
PROC PRINT DATA=in.brent;
RUN; QUIT;
proc sort data = brent; by date; run; quit;
j'ai vérifié, la table "Brent" existe bien.
J'ai ensuite contruit la macro
*----------------- Construction Macro VaR Out of Sample ---------------------;
%macro VaROutofSample(database=brent,varname=rdt,insize=1311,tc=5%);
*---- On change le nom de la variable de rendement en y;
data ChangeName;
set &brent;
rename &rdt=y;
run;
*---- On récupère le nombre total d observations dans la macro-variable nobs;
data ChangeName;
set ChangeName;
call symput('nobs',_n_);
run;
*------------------------ Grande boucle pour calcul des VaR out-of-sample;
*------- Construction de l échantillon d estimation rolling;
%let fin = %sysevalf(&nobs-&insize);
%do i=1 %to &fin;
%let o = %sysevalf(&insize-1+&i);
data insample;
set ChangeName;
if _n_>=&i and _n_<=&o then output;
run;
*------ Estimation du modèle Garch sous loi normale;
proc model data = insample outparms=param;
parms c .0 arch0 .1 arch1 .2 garch1 .75 ;
/* Equation moyenne*/;
y = c ;
/* Equation variance*/;
h.y = arch0 + arch1*xlag(resid.y**2,mse.y)+garch1*xlag(h.y,mse.y);
/* Estimation du modèle*/;
fit y / method = marquardt fiml out=ResultGarchNormal(drop=_estype_ _type_ _weight_) outactual;
outvars date y h.y;
run ;
quit ;
data ResultGarchNormalLast;
set ResultGarchNormal;
if _n_=&insize then output;
run;
data param;
set param;
call symput('const',c);
call symput('w',arch0);
call symput('alpha',arch1);
call symput('beta',garch1);
run;
data VaR;
set ResultGarchNormalLast;
h_prev = &w+&alpha*(y-&const)**2+&beta*h_y;
VaR = &const+quantile('normal',&tc)*sqrt(h_prev);
run;
%if &i=1 %then %do;
data RecupVaR;
set VaR;
run;
%end;
%else %do;
data RecupVaR;
set RecupVaR VaR;
run;
%end;
%end;
proc gplot data=RecupVaR;
plot y*date=1 VaR*date=2 / overlay;
symbol1 i=join v=none c=black;
symbol2 i=join v=none c=red;
run; quit;
%mend;
%VaROutofSample(database=in.brent,varname=rdt,insize=1311,tc=0.05);
et j'obtient la chose suivante:
- -
22 200
200
ERROR 22-322: Erreur de syntaxe ; syntaxe requise : un nom, une chaîne entre guillemets, ;, END, INDSNAME, KEY, KEYS, NOBS, OPEN,
POINT, _DATA_, _LAST_, _NULL_.
ERROR 200-322: Le symbole n'est pas reconnu et sera ignoré.
1 ! data ChangeName; set &brent; rename &rdt=y; run;
-
22
WARNING: Référence symbolique apparente BRENT non traitée.
WARNING: Référence symbolique apparente RDT non traitée.
ERROR 22-322: Erreur de syntaxe ; syntaxe requise : un nom, ;.
NOTE: Le Système SAS a interrompu le traitement de cette étape en raison d'erreurs.
WARNING: La table WORK.CHANGENAME est peut-être incomplète. Lorsque cette étape a été stoppée, il y avait 0 observation(s) et 2
variable(s).
NOTE: L'étape DATA a utilisé (Durée totale du traitement) :
temps réel 0.01 secondes
temps UC 0.01 secondes
NOTE: Valeurs numériques converties en valeurs caractères aux emplacements indiqués par : (Ligne):(Colonne).
1:104
NOTE: 0 observation(s) lue(s) dans la table WORK.CHANGENAME.
NOTE: La table WORK.CHANGENAME a 0 observation(s) et 2 variable(s).
NOTE: L'étape DATA a utilisé (Durée totale du traitement) :
temps réel 0.01 secondes
temps UC 0.01 secondes
WARNING: Référence symbolique apparente NOBS non traitée.
WARNING: Référence symbolique apparente NOBS non traitée.
ERROR: Opérande caractère trouvé dans la fonction %EVAL ou condition %IF là où un opérande numérique est requis. La condition
était : &nobs-1311
ERROR: L'exécution de la macro VAROUTOFSAMPLE va s'arrêter.
Pourtant le table "brent" existe bien.
Merci d'avance.
Hors ligne
Bonjour,
il y a une erreur dans le paramétrage de votre macro, par exemple
%macro VaROutofSample(database=brent,varname=rdt,insize=1311,tc=5%);
*---- On change le nom de la variable de rendement en y;
data ChangeName;
set &brent;************ici c'est plutot &database
rename &rdt=y;*************ici plutot &varname,il ya un souci avec la synatxe du rename aussi réf.(bouquin de mr ringuédé)
run;
remplacer ceci dans le programme
a+
Dernière modification par sspdiddy (16-08-2010 08:05:23)
Hors ligne
Ok merci je vais essayer.
a+
Hors ligne
sspdiddy,
Merci pour tes conseils, la macro a marchée pour un garch sous loi normale. Reste maintenant à voir si elle marche pour un
EGARCH sous GED....!
Hors ligne
Pages: 1 2