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 26-04-2010 10:41:35

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

test de chow après ridge sous rats?

Bonjour,

J'ai besoin d'un petit conseil (au passage, la fonction recherche du forum ne me donne jamais de résultats...Jdois avoir un pb).

Je pose la situation:
J'utilise donc rats et j'ai fait un test de colinéarité.
Pour corriger cela j'ai fait une ridge regression avec un k=0.0105 pour que tous mes indices passent en dessous de 30.
Avant cela il y avait de l'instabilité à plein de périodes différentes (j'ai testé ça avec le test de chow).

Problème:
Vu que la colinéarté est source d'instabilité et que je l'ai corrigé j'aurais voulu faire iun test de chow sur ma ridge regression.
J'ai donc tenté de modifier la procédure "chow.src" afin d'y inclure la correction de colinéarité.
Le soucis c'est que ça me renvoit des valeurs complètement incohérente (genre F(-136,126) pour mon fisher...). Ca ne calcule évidement pas la significativité...

Mes questions:
-Est-ce idiot de vouloir refaire chow après une ridge regression?
- Si ce n'est pas le cas, connaissez-vous un moyen de le faire sous rats?


Voici a quoi ressemble la procédure sans modif:

Code:

lin(noprint) explic start end
# reglist
com startl = end-%nobs+1
smpl startl end
lin(noprint,define=reg) explic start end
# reglist

compute scro=%rss , ndlo=%ndf
com deb = startl+%nreg+1
com arret = end-%nreg-1
dis '*************************************************************'
do i=deb,arret,1
smpl startl i
lin(noprint,equation=reg)
compute scr1=%rss , ndl1=%ndf
 smpl i+1 end
lin(noprint,equation=reg)
compute scr2=%rss , ndl2=%ndf
compute scra=scr1+scr2 , ndla=ndl1+ndl2
compute ndl=ndlo-ndla , fstat= ((scro-scra)/ndl)/(scra/ndla)

dis 'sous-périodes utilisées' %datelabel(startl)  %datelabel(i) $
 %datelabel(i+1) %datelabel(end)
cdf ftest fstat ndl ndla
dis '*************************************************************'
if %signif<0.05.and.fstat>schow
{
com instabilite = 1
com schow = fstat
com pointrup = i+1
com signifchow = %signif
}

end do i

Voici a quoi ressemble la procédure avec modif:

Code:

lin(noprint) explic start end
# reglist
com startl = end-%nobs+1
smpl startl end
lin(noprint,define=reg) explic start end
# reglist

cmoment(equation=reg)
do row=1,%ncmom-1
com %cmom(row,row)= %cmom(row,row)+ 0.0105
end do row
lin(noprint,equation=reg,cmoment)
compute scro=%rss , ndlo=%ndf
com deb = startl+%nreg+1
com arret = end-%nreg-1
dis '*************************************************************'
do i=deb,arret,1
smpl startl i
lin(noprint,equation=reg,cmoment)
compute scr1=%rss , ndl1=%ndf
 smpl i+1 end
lin(noprint,equation=reg,cmoment)

(....La suite est la même)

Je dois certainment faire un truc idiot sans m'en rendre compte en ajoutant "cmoment" dans les regressions...

Hors ligne

 

#2 27-04-2010 07:52:07

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

Re: test de chow après ridge sous rats?

Plusieurs points à regarder :
- d'abord la ridge : le fait d'augmenter artificiellement la diagonale afin d'améliorer le conditionnement pour l'inversion est une correction qui n'est pas neutre. A ma connaissance, il n'y a pas de fondement solide quand au choix du paramètre à ajouter (vous avez pris 0.0105, mais une infinité d'autres valeurs sont possibles). Ce ne serait pas un problème si les résultats de la ridge ne dépendaient pas de la veleur de ce paramètre. Or (j'ai oublié la référence, mais il s'agit d'un article assez ancien), on peut vraiment obtenir n'importe quoi, y compris des changements de signe dans le résultat des estimations des coefficients en modifiant cette valeur. C'est donc une technique "dangereuse" qui, par un artifice purement technique essaie d'effacer une caractéristique bien réelle des données à savoir la multicolinéarité, mais au prix d'une perte de sens des résultats.
- Ceci étant dit, si on en vient à votre procédure, il y a des petites choses qui pourraient simplifier l'écriture, et un problème plus grave qui est certainement à l'origine de vos malheurs.
     - petites remarques :
  . votre startl ne sert à rien (2ième ligne), il est égal au paramètre start de la commande linreg. Par ailleurs il peut y avoir un problème si vous avez des observations manquantes en fin d'échantillon (le paramètre end de la commande linreg devient alors supérieur à la date de la dernière observation de la régression). Si vraiment vous voulez récupérer les dates de début et de fin de la régression, il vaut mieux faire
         compute startl=%regstart(), endl=%regend()
  (et bien sûr, remplcer vos end ensuite par endl)

. comme c'est la même régression qui est estimée sur des sous-échantillons différents, ce n'est pas la peine de se compliquer la vie pour la gestion des degrés de liberté. Si ndl0 est initialisé avec la première régression, alors pour le fisher le nombre de degrés du numérateur est ndl0 et celui du dénominateur est (%nobs-2*ndl0). Vous pouvez donc certainement faire l'économie de ndl et ndla, ndl1, ndl2

- beaucoup plus important, si vous regardez bien le manuel et ce qui concerne l'emploi de l'option cmom dans la commande linreg, on y lit que 'RATS will ignore the linreg start and end parametrs, and carry over the range from CMOMENT.'. En d'autres termes, il semble que vous croyez ajuster votre équation sur deux sous-échantillons (dans votre boucle en i), alors qu'en fait c'est toujours la même période totale qui est considérée. Par exemple si vous avez des variables observées sur 100 points, que vous faites:
linreg(define=reg) y
#constant x1 x2
cmoment(equation=reg)
linreg(equation=reg,cmoment)
linreg(equation=reg,cmoment) * 1 50

et bien vous pouvez vérifier que les deux dernières régressions seront faites sur 100 observations et ont des résulats identiques.

Donc : si vous croyez vraiment à la ridge, ce qu'il faut faire c'est rentrer la commande cmoment dans la boucle en i en 2 exemplaires, le premier pour calculer %cmom de deb à i (auquel vous ajoutez naturellement 0.0105 (?) sur la diagonale, le second pour calculer %cmom valide pour i+1 à end (auquel vous ajoutez...)

Eventuellement, allez voire du côté de la régression  en composantes principales. C'est a priori plus sympathique que la ridge (bien sûr il faut quand même pouvoir interprêter les axes factoriels pour raconter une histoire), cela évite une correction purement ad hoc qui doit, si on a du temps, doit permettre d'obtenir le résultat que l'on veut en ajustant finement la diagonale de X'X

Dernière modification par esa_gc (27-04-2010 18:08:48)

Hors ligne

 

#3 29-04-2010 14:45:40

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

Re: test de chow après ridge sous rats?

Bonjour,

Merci beaucoup pour votre réponse complète!
Dans le cadre de ce "mémoire" nous devons utiliser (au moins dans un premier temps) des méthodes vues en cours (or nous n'avons pas vu l'analyse en composantes principales). Je n'ai malheureusement plus le temps d'apprendre cette analyse mais je ne m'en priverai pas!

Cela fait deux fois que je pose une question ici.
J'ai le même sentiment quand je lis vos réponses, à savoir: dans ma fac j'apprend vraiment du "bricolage économétrique"...
Je me rassure en me disant que je suis en économie appliquée et non en économétrie...

L'an dernier c'était sur l'harmonisation des séries (passage de trimestrielle à mensuelle), et vous m'aviez déconseillé de faire cela (il aurait fallu plutôt que je fasse l'inverse).

Bref, j'espère que cela va s'arranger en M2...

Merci encore en tout cas!

Dernière modification par lepack (29-04-2010 14:46:35)

Hors ligne

 

#4 30-04-2010 14:05:02

sspdiddy
Member
Date d'inscription: 29-04-2009
Messages: 146

Re: test de chow après ridge sous rats?

...eh oui c'est le master esa...smile

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

[ Generated in 0.024 seconds, 6 queries executed ]