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... est ici :

http://www.univ-orleans.fr/deg/masters/ESA/

#1 05-05-2007 14:54:32

alaa-eddine
Member
Date d'inscription: 07-03-2007
Messages: 398

Macro : Spatial Discret Choice Model

Si ça intéresse du monde... c'est fait maison..donc prudence ! smile

Principe :

y=1 si y'>0     avec    y' : variable latent telle que : y' = rWy' + Xb + Ui      Ui -> iid (0 , sigma²)
y=0 sinon                  r : scalaire à estimé ( auto-corrélation spatial )
                                b : vecteur des k régressereurs.
                                W : matrice des distances exogène calculée à partir des coordonnées X et Y de mes observation.

En gros : P[y=1] = P[y' > 0] = P[ ei < (I – rW)^-1 * Xb ] = F( (I – rW)^-1 * Xb ).

avec ei = (I – rW)^-1 * Ui
et l'index n'est plus linéaire à cause du (I – rW)^-1.

Comme je ne connais pas 'F', je décide de l'estimer avec la méthode semi-paramètriques de klein & spady puis faire du maximum de vraisemblance sur F_chapeau pour trouver les paramètres estimés.

Code:

%macro probitspatial(base=,xcoor=,ycoor=,listvar=,depvar=,kernel=,h=);

proc iml;

    use &base ;
    read all var {&xcoor &ycoor} into x;
    use &base ;
    read all var {&listvar &depvar} into g;

        nbcol=ncol(g);
        p=nbcol+1;
        nbrlin=nrow(x);
        n=j(nbrlin,nbrlin,0);

            do i=1 to nbrlin;

                do j=1 to nbrlin;
                if j^=i then distij=1/sqrt((x[i,1]-x[j,1])##2+(x[i,2]-x[j,2])##2);
                else distij=0;
                n[i,j]=distij;
                end;

            end;

        start loglik(beta) global(n,g);

            nbreg=ncol(g);
            nbindiv=nrow(n);

            o=I(nbindiv);
            h=j(nbindiv,nbindiv,0);
            do i=1 to nbindiv;
            do j=1 to nbindiv;
            h[i,j]=n[i,j]*beta[nbreg+1];
            end;
            end;

            z=inv(o-h);

            xbeta=j(nbindiv,1,0);
            score=j(nbindiv,1,0);

            do i=1 to nbindiv;

                    bidul=0;
                    do j=1 to nbreg-1;
                    bidulj=beta[j+1]*g[i,j];
                    bidul=bidul+bidulj;
                    end;

                    xbeta[i,1]=bidul+beta[1];
            end;

            score=j(nbindiv,1,0);
            
            do i=1 to nbindiv;

                    score1=0;
                    do k=1 to nbindiv;
                    bidul3=z[i,k]*xbeta[k];
                    score1=score1+bidul3;
                    end;

            score[i]=score1;

            end;

            ll=0;
            *m=j(nbindiv,3,0);

            do i=1 to nbindiv;

            wn=0;
            wd=0;

            do j=1 to nbindiv;

                kervar=(score[j]-score[i])/&h;

                    %if &kernel=normal %then %do;                    
                     kernelj=(1/sqrt(2*3.14))*exp(-0.5*(kervar)##2);
                    %end;

                    %if &kernel=epanechnicov %then %do;
                      if -1<=kervar<=1 then do;
                      kernelj=3/4*(1-kervar##2);
                      end;
                      else do;
                      kernelj=0;
                      end;
                     %end;

                    %if &kernel=triangulaire %then %do;
                     if -1<=kervar<=1 then do;
                      kernelj=1-abs(kervar);
                      end;
                     else do;
                      kernelj=0;
                      end;
                    %end;

                    %if &kernel=uniforme %then %do;
                    if -1<=kervar<=1 then do;
                      kernelj=0.5;
                      end;
                     else do;
                      kernelj=0;
                      end;
                    %end;

                            w1=kernelj*g[j,nbreg];

                            wn=wn+w1;
                            wd=wd+kernelj;

            end;

                            ri=wn/wd;
                            *m[i,1]=ri;
                            *m[i,2]=score[i];
                            *m[i,3]=g[i,nbreg];

                            lli=g[i,nbreg]*log(ri)+(1-g[i,nbreg])*log(1-ri);
                            ll=ll+lli;
            end;

            return(ll);

        finish loglik;

    options = {1,2};
    parmin=j(1,p,1.44);

    call nlpqn(rc,betahat,"loglik",parmin,options);


quit;

%mend;
%probitspatial(base=baltim,xcoor=X,ycoor=Y,listvar=PRICE NROOM AGE LOTSZ SQFT,depvar=AC,kernel=epanechnicov,h=0.088);

Ici c'est même plus un probit (ni logit d'ailleurs) comme je ne fait pas d'hypothèse sur la distribution des résidus, c'est pour cela qu'on va appeler ce truc la « Modèle à Choix Discret Spatial ».

Ce que j'aimerais bien faire maintenant c'est de tester la significativité des coefficients , mais j'ai un prolème car je ne connais pas leur propriétés asymptotiques.

petite astuces : une fois les paramètres recuperés ! enlever les '*' avant les ' m[i,.. ' et 'm=j(nb..' puis faites un create from m...sans le call bien sûr mais avec un run loglik(vos_parametres). ce qui vous donne une table avec les proba estimées, les evenement observés et les indexs.

Pour plus d'infos :

http://sal.uiuc.edu/users/anselin/papers/hood.pdf (Anselin 2002).

Fleming, M. (2002). Techniques for estimating spatially dependent discrete choice models. In Anselin, L., Florax, R. J., and Rey, S. J., editors, Advances in Spatial Econometrics. Springer-Verlag, Heidelberg. forthcoming.




( ya le « Modèle à Choix Discret Spatial II » qui sort bientôt avec 'Arnold schwarzGMM' actuellement en tournage ) la Vielle blague c'est honteux...  !http://smileys.sur-la-toile.com/repository/Boulet/bouleth.gif
ça rend fou toutes ces boucles 'DO' !

Any comments ?

Hors ligne

 

Pied de page des forums

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson