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 11-03-2010 10:45:35

hadrien
membre extérieur
Date d'inscription: 10-03-2010
Messages: 3

Estimation d'un modèle de déséquilibre

Bonjour,

Je cherche à estimer un modèle déséquilibre. J’ai écrit la vraisemblance comme le propose  Maddala Nelson (1974) en SAS IML. Malheureusement, la maximisation ne converge pas.
L’estimation semble sensible aux paramètres initiaux. Y a-t-il une écriture de la vraissemblance plus simple ? Avez-vous des idées sur le sujet ?

Dans le cas le plis simple :

/*model :
y1=x1*beta1+u1
y2=x2*beta2+u2
q=min(y1,y2)
*/
DATA dist;
DO i=1 TO 100;
q=RANNOR(1)*9+5;
x1=RANNOR(2)*4+12;
x2=RANNOR(1)*5+5;
u1=RANNOR(0);
u2=RANNOR(0);
OUTPUT;
END;
RUN;


PROC IML;
USE dist;

READ ALL VAR {q} INTO q;
READ ALL VAR {x1} INTO x1;
READ ALL VAR {x2} INTO x2;

n=NROW(q);print n;

START reml(theta) GLOBAL(n,x1,x2,q);
beta1 = theta[1];
sigma1 = theta[2];
beta2 = theta[3];
sigma2 = theta[4];

ll=0;
do t=1 to n;
l1=(q[t]-t(x1[t])*beta1)/sigma1;
l2=(t(x2[t])*beta2-q[t])/sigma2;
l3=(q[t]-t(x2[t])*beta2)/sigma2;
l4=(t(x1[t])*beta1-q[t])/sigma1;

func = 1/sigma1*(pdf('NORMAL',l1))*probnorm(l2)+1/sigma2*(pdf('NORMAL',l3))*probnorm(l4);

end;

if func <= 0 then func=1e-6;
log_func=log(func);


ll=ll+log_func;

RETURN(ll);
FINISH reml;

x0 = {1. 2. 1. 2.}; /** Initial values **/

optn = {1 1};

con={. 0 . 0}; /** Constraint that variance > 0 **/

CALL NLPNRA(rc,covs,"reml",x0,optn,con);

f_opt = reml(covs);
PRINT "Reason for termination of optimization:"
rc [FORMAT=2.0 LABEL=""],,,
"ML Estimates:"
covs [COLNAME={beta1 sigma1 beta2 sigma2} LABEL=""],,,
"Maximum of Log-likelihood
Function:" f_opt [LABEL=""];
QUIT;

Hors ligne

 

#2 12-03-2010 19:23:32

jeremy
Member
Date d'inscription: 04-02-2008
Messages: 72

Re: Estimation d'un modèle de déséquilibre

Bonjour,

Je n'ai pas encore eu le temps de copier coller ton code pour en voir exactement le résultat, mais as tu essayer d'autres routines d'optimisation?

Bien à toi.

Hors ligne

 

#3 15-03-2010 20:41:55

hadrien
membre extérieur
Date d'inscription: 10-03-2010
Messages: 3

Re: Estimation d'un modèle de déséquilibre

Merci
L'utilisation d'un autre algorithme d'optimisation ne change pas grand chose.
J'ai retravaillé un peu le programme : il existe pour ce cas précis une forme plus simple de la vraisemblance détaillée dans Maddalla (1983).
Sur ces données simulées, la maximisation converge désormais.
Je reste néanmoins sceptique sur la sensibilité au paramètres initiaux et à l'écart par rapport à l'estimation OLS.


/*Exemple de modèle de déséquilibre: la quantité observée, q,
est le minimum de la quantité offerte  et de la quantité demandée.
"La sélection de l'échantillon est inconnue",
Voir Maddala (1983), p.298 (10.21).*/

DATA dist;
DO i=1 TO 100;
q=RANNOR(0)*3+2/**/;
x1=RANNOR(0);
x2=RANNOR(0)*2+4/**/;
OUTPUT;
END;
RUN;

/*OLS pour valeurs initiales*/
proc reg data=dist;
model q=x1 / noint;
model q=x2 / noint;
run;quit;


PROC IML;
USE dist;

READ ALL VAR {q} INTO q;
READ ALL VAR {x1} INTO x1;
READ ALL VAR {x2} INTO x2;


n=NROW(q);print n;
pi = CONSTANT("PI");
ybar=q[:];
ssq=SSQ(q-J(n,1,1)*ybar);


START reml(theta) GLOBAL(n,x1,x2,q,pi,ssq,ybar);
beta1 = theta[1];
sigma1 = theta[2];
beta2 = theta[3];
sigma2 = theta[4];
*beta01 = theta[5];
*beta02 = theta[6];

ll=0;
do t=1 to n;
l1=(q[t]/*-beta01*/ - beta1*(x1[t]));
l2=(q[t] /*-beta02*/ - beta2*(x2[t]));

func = ((1/sigma2)*(pdf('NORMAL',l2/sigma2)))*(1-probnorm(l1/sigma1))+((1/sigma1)*(pdf('NORMAL',l1/sigma1)))*(1-probnorm(l2/sigma2));

end;

if func <= 0 then func=1e-6;
log_func=log(func);

ll=ll+log_func;

RETURN(ll);
FINISH reml;

x0 = {1. 1. 1. 1./* 1. 1.*/}; /** Initial values **/

optn = {1 1};

con={ . 0 . 0}; /** Constraint that variance > 0 **/

CALL NLPNRA(rc,covs,"reml",x0,optn,con);

f_opt = reml(covs);
PRINT "Reason for termination of optimization:"
rc [FORMAT=2.0 LABEL=""],,,
"ML Estimates:"
covs [COLNAME={beta1 sigma1 beta2 sigma2} LABEL=""],,,
"Maximum of Log-likelihood
Function:" f_opt [LABEL=""];
QUIT;

Hors ligne

 

#4 15-03-2010 22:53:00

jeremy
Member
Date d'inscription: 04-02-2008
Messages: 72

Re: Estimation d'un modèle de déséquilibre

Bonsoir,

Ce n'est pas de moi, mais il te suffit d'indicer ton func, c'est à dire de le réécrire func[i,:]=......... pour que cela marche.
Tu n'utilises pour le moment qu'un scalaire!!!!

Bien à toi.

Hors ligne

 

#5 18-03-2010 21:05:03

hadrien
membre extérieur
Date d'inscription: 10-03-2010
Messages: 3

Re: Estimation d'un modèle de déséquilibre

Merci pour tes réponses,

A ce stade, l'estimation des paramètres converge mais ils restent très instables selon les valeurs initiales ou les contraintes imposées. Un fait stylisé de cet type de modèle l'écart type des résidus converge souvent vers zéro. Je ne pense pas qu'il y ait d'erreurs dans le programme (?)
Maddala ou autre signale que la vraisemblance de ce type de modèle est hautement non linéaire ce que je peux constater etant donné l'instabilité des paramètres et n'est pas contrainte (unbounded) ce que je ne constate pas.
En revanche, l'estimation des écarts types s'est revellée quasi impossible (call nlpfdd); la plupart du temps la matrice hessienne n'est pas inversible.
Avez-vous déjà rencontré ce problème ?

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson

[ Generated in 0.014 seconds, 8 queries executed ]