SAS exécute un test de Fisher pour tester la spécification. Or selon la théorie il faut faire un test de Fisher lorsque la présence de racine unitaire n'est pas rejetée (p.value > 5%). Dans le cas contraire, le test convenable est en principe celui de student pour tester uniquement la significativité de la tendance ou de la constante. Ce résultat n'est pas fourni par défaut par SAS. Dans ces conditions, il est alors recommandé de construire le test avec une proc reg.
Je propose ici une macro pour implémenter ce test. les résultats de cette macro, en plus de la proc arima son suffisants pour tester la stationnarité. Pour bien comprendre la nuance entre le test de Fisher et Celui de Student dans le processus du test de stationnarité, je vous invite à lire cette petite note en cliquant ici .
Pour ce qui concerne la macro, Data permet de renseigner la table contenant la variable, var la variable, p le nombre de retards qu'il faut prendre (à déterminer sur le chorellogramme de la différence première). Pour cette dernière variable macro, la valeur par défaut est fixée à 2. Si la variable macro dif=0 alors, le test est effectué sur la variable à niveau, dif=1 veut dire qu'on veut tester le présence de racine unitaire sur la variable différenciée, et ainsi de suite
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | /*Test de stationnarité*/Options sasmstore=Mmacro mstored; %macro DFA(data= ,var= ,p=2 ,dif=0)/STORE DES="TEST DE DIVKEY FULLER AUGMENTE"; ; data _DFA_; set &Data; D1_&var=dif(&var); run; /*J'ai créé la l'odre d'intégration de la variable à modéliser*/ %if &dif >=1 %then %do; %let k=%sysevalf(&dif+1); %do i=2 %to &k; %let j=%sysevalf(&i-1); data _DFA_; set _DFA_; D&i._&var=dif(D&j._&var.); run; %end; /*le premier facteur de corrélation*/ %if &p>=1 %then %do; data _DFA_; set _DFA_; L1_D&k._&var=lag(D&k._&var.); label L1_D&k._&var="TETA 1"; run; %end; /*J'ai créé le rho y t-1 selon le modele*/ data _DFA_; set _DFA_; L1_D&dif._&var=lag(D&dif._&var); label L1_D&dif._&var="PHI"; run; %end; %else %do; data _DFA_; set _DFA_; L1_&var=lag(&var); label L1_&var="PHI"; run; %if &p>=1 %then %do; data _DFA_; set _DFA_; L1_D1_&var=lag(D1_&var.); label L1_D1_&var="TETA 1"; run; %end; %end; /*Créer les facteur d'autocorrélation*/ %if &p>=2 %then %do; %do i=2 %to &p; %let k=%sysevalf(&dif+1); %let j=%sysevalf(&i-1); data _DFA_; set _DFA_; L&i._D&k._&var=lag(L&j._D&k._&var); label L&i._D&k._&var="TETA &i"; run; %end; %end; /*Prise en compte des var non manquantes*/ %if &dif=0 %then %do; data _DFA_; set _DFA_; if not missing(L1_&var); run; %end; %else %do; data _DFA_; set _DFA_; if not missing(L1_D&dif._&var); run; %end; %if &p>=1 %then %do; %let k=%sysevalf(&dif+1); data _DFA_; set _DFA_; if not missing(L&p._D&k._&Var); run; %end; data _DFA_; set _DFA_; _trend_=_n_; _constante_=1; label _trend_="TREND"; label _constante_="CONSTANTE"; run; /*Définition du vecteur de retard*/ %if &p=0 %then %do; %if &dif=0 %then %do; proc autoreg data=_DFA_ ; model D1_&var =L1_&var/ noint plots=none; model D1_&var = _constante_ L1_&var / noint plots=none; model D1_&var= _trend_ _constante_ L1_&var/ noint plots=none; run; %end; %else %do; %let k=%sysevalf(&dif+1); proc autoreg data=_DFA_ ; model D&k._&var =L1_D&dif._&var/ noint plots=none; model D&k._&var = _constante_ L1_D&dif._&var /noint plots=none; model D&k._&var= _trend_ _constante_ L1_D&dif._&var/ noint plots=none; run; %end; %end; %else %do; /*Construction de vesteur des p autocorrélation*/ %let k=%sysevalf(&dif+1); %let A=L1_D&k._&var; %if &p>=2 %then %do; %do i=2 %to &p; %let A=&A L&i._D&k._&var ; %end; %end; %if &dif=0 %then %do; proc autoreg data=_DFA_ ; model D1_&var =L1_&var &A/ noint plots=none; model D1_&var =_constante_ L1_&var &A/ noint plots=none; model D1_&var= _trend_ _constante_ L1_&var &A/ noint plots=none; run; %end; %else %do; %let k=%sysevalf(&dif+1); proc autoreg data=_DFA_ ; model D&k._&var =L1_D&dif._&var &A/ noint plots=none; model D&k._&var = _constante_ L1_D&dif._&var &A / noint plots=none; model D&k._&var= _trend_ _constante_ L1_D&dif._&var &A/ noint plots=none; run; %end; %end; proc datasets nolist; delete _dfa_; run; %put ***************************************************************************************; %put MACRO CREEE PAR ARISTIDE HOUNDETOUNGAN, CONTRIBUER EN ENVOYANT VOS; %put CRITIQUES: ariel92and@gmail.com; %put ***************************************************************************************; %mend; |