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
Si ça intéresse du monde... c'est fait maison..donc prudence !
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.
%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... !
ça rend fou toutes ces boucles 'DO' !
Any comments ?
Hors ligne