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
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:
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:
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
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
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
...eh oui c'est le master esa...
Hors ligne