プロビットモデル
プログラム
#include <oxstd.h> main() { decl cburn,cm,cn,cnobs,crepeat; decl file,mdata,mbeta_s,mx,vy,vystar; decl mB0,mB1; decl i,vb0,vb1,vb; // Read Data File // PUB12 PUB34 PUB5 PRIV YEARS SCHOOL LOGINC PTCON YESVM // We use PRIV SCHOOL LOGINC PTCON to explain YESVM cnobs=95; file = fopen("choice.txt");fscan(file,"%#m",cnobs,9,&mdata);fclose(file); // dependent varible: yesvm vy=mdata[][8]; // yesvm //independent variables: Constant PRIV SCHOOL LOGINC PTCON mx=ones(cnobs,1)~mdata[][3]~mdata[][5:7]; // // prior for beta vb ~ N(vb0,mB0). vb0=0,mB0=100*I cm=columns(mx);vb0=zeros(cm,1);mB0=100*unit(cm); // initialize latent variable: vystar vystar=zeros(cnobs,1); // mB1=invert(mx'*mx+invert(mB0)); // Burn-in period: 2000, Number of repetition: 10000 cburn=3000;crepeat=10000;mbeta_s=zeros(crepeat,cm); for(cn=-cburn;cn<crepeat;++cn){ // vb | ystar ~ N(vb1,mB1) vb1=mB1*(mx'*vystar+invert(mB0)*vb0); vb=vb1+choleski(mB1)*rann(cm,1); // ystar | vb ~TN for(i=0;i<cnobs;++i){ if(vy[i]==0){ do{vystar[i]=mx[i][]*vb+rann(1,1); }while(vystar[i] >=0); } else{ do{vystar[i]=mx[i][]*vb+rann(1,1); }while(vystar[i] <0); } } // save samples for vb //println(vb'); println(cn); if(cn>=0){mbeta_s[cn][]=vb';} } format(100); file = fopen("beta.txt","w");fprint(file,"%15.10f",mbeta_s);fclose(file); }