/* GENMCDATA.GPR: procedure to generate and save data for prisoner's dilemma problem for use in monte carlo study of the performance of the MLE and semiparametric two-step estimators Arguments: mctype: specifies type of monte carlo data set to generate: mle: generates data needed to run full information maximum likelihood estimator using the nested fixed point algorithm semi: generates data needed to run the semi-parametric two step estimator that estimates only player A's decision, using a nonparametric estimate of player B's probability of confessing. semifl: generates data needed to run the "full information" version of the semiparametric 2-step estimation method, where the likelihood contains the confess/don't confess decisions of both prisoners A and B, not just one of them (as per the 'semi' option above) npemeth: non-parametric estimation method for the probabilities of confessing and not confessing, estimated from the monte carlo data generated below. true use the true equilibrium probabilities of confessing/not confessing kernel estimate the probabilities using a nonparametric regression kernel smoothing method that treats the conditional choice probabilities as unknown regression functions series estimate the probabilities via a polynomial series logit maximum likelihood esitmator where the logit probabilities are approximated via a polynomial series in (x_a,x_b) terms. llr estimate the choice probabilities via local linear regression, treating the conditional choice probabilities as unknown regression functions lll estimate the choice probabilities via local linear logit maximum likelihood, Generated variables (saved to disk for subsequent use by max.g) x_a, x_b: randomly generated covariates, the observed "state variables" that are common knowledge to both prisoners and also observed by the econometrician p_a, p_b: the equilibrium probabilities for each of the nobs prisoner's dilemma games that are solved in the do loop below, and realized decisions are simulated ep_a, ep_b: nonparametric estimates of the equilibrium probabilities, computed for each observation by local maximum likelihood method John Rust, University of Maryland, October, 2006 */ proc (0)=genmcdata(mctype,npemeth); local x_a,x_b,p_a,p_b,ep_a,ep_b,q_a,q_b,y,seeds,vnames,dat,iloc,i,j; let vnames=d_a d_b x_a x_b; x_a=rndu(nobs,1); x_b=rndu(nobs,1); p_a=zeros(nobs,1); p_b=zeros(nobs,1); y=zeros(nobs,2); seeds=rndu(nobs,2); qa=q; qb=q; i=1; do until i > nobs; {p_a[i],p_b[i]}=equil(x_a[i],x_b[i]); y[i,1]=(seeds[i,1] < p_a[i]); y[i,2]=(seeds[i,2] < p_b[i]); i=i+1; endo; "summary statistics"; " Mean equilibrium probability of confessing: "; meanc(p_a)~meanc(p_b); " Mean of a,b's actions (1=confess, 0 don't confess)"; meanc(y)'; " Mean of a,b's observed types "; meanc(x_a)~meanc(x_b); if (mctype $== "semi"); if (npemeth $== "true"); saved(y[.,1]~ones(nobs,1)~x_a~x_a.*p_b,"pa",vnames); elseif (npemeth $== "series"); ep_b=series(0~0,y[.,2],x_a~x_b,"q_b"); load q_b; load iloc; ep_b=zeros(nobs,1); dat=seriesdt(0,x_a[i],x_b[i]); j=1; do until j > nobs; ep_b[j]=1/(1+exp(dat[iloc]*q_b)); j=j+1; endo; " Mean estimated equilibrium probability of confessing (player b): ";; ftos(meanc(ep_b),"*.*lf",9,5); " Min, max estimated probabilitiies "$+ftos(minc(ep_b),"*.*lf",9,5)$+" "$+ftos(maxc(ep_b),"*.*lf",9,5); " Mean difference true vs estimated choice probabilities "$+ftos(meanc(p_b-ep_b),"*.*lf",9,5); saved(y[.,1]~ones(nobs,1)~x_a~x_a.*ep_b,"pa",vnames); else; ep_b=npest(y[.,2],x_a,x_b,npemeth); " Mean estimated equilibrium probability of confessing (player b): ";; ftos(meanc(ep_b),"*.*lf",9,5); " Min, max estimated probabilitiies "$+ftos(minc(ep_b),"*.*lf",9,5)$+" "$+ftos(maxc(ep_b),"*.*lf",9,5); " Mean difference true vs estimated choice probabilities "$+ftos(meanc(p_b-ep_b),"*.*lf",9,5); saved(y[.,1]~ones(nobs,1)~x_a~x_a.*ep_b,"pa",vnames); endif; elseif (mctype $== "semifl"); if (npemeth $== "true"); saved(y~x_a~x_a.*p_b~x_b~x_b.*p_a,"papb_s",vnames); elseif (npemeth $== "series"); ep_a=series(0~0,y[.,1],x_a~x_b,"q_a"); ep_b=series(0~0,y[.,2],x_a~x_b,"q_b"); load q_a; load q_b; load iloc; ep_a=zeros(nobs,1); ep_b=zeros(nobs,1); dat=seriesdt(zeros(nobs,1),x_a,x_b); j=1; do until j > nobs; ep_a[j]=1/(1+exp(dat[j,iloc]*q_a)); ep_b[j]=1/(1+exp(dat[j,iloc]*q_b)); j=j+1; endo; " Mean estimated equilibrium probability of confessing: "; meanc(ep_a)~meanc(ep_b); " Mean difference true vs estimated choice probabilities (a) "$+ftos(meanc(p_a-ep_a),"*.*lf",9,5); " Mean difference true vs estimated choice probabilities (b) "$+ftos(meanc(p_b-ep_b),"*.*lf",9,5); saved(y~x_a~x_a.*ep_b~x_b~x_b.*ep_a,"papb_s",vnames); else; ep_a=npest(y[.,1],x_a,x_b,npemeth); ep_b=npest(y[.,2],x_a,x_b,npemeth); " Mean estimated equilibrium probability of confessing: "; meanc(ep_a)~meanc(ep_b); " Mean difference true vs estimated choice probabilities (a) "$+ftos(meanc(p_a-ep_a),"*.*lf",9,5); " Mean difference true vs estimated choice probabilities (b) "$+ftos(meanc(p_b-ep_b),"*.*lf",9,5); saved(y~x_a~x_a.*ep_b~x_b~x_b.*ep_a,"papb_s",vnames); endif; else; saved(y~x_a~x_b,"papb",vnames); endif; endp;