0% found this document useful (0 votes)
26 views2 pages

"C://mvnprob - Dat1" "C://mvnprob - Dat1": Inf Inf

This R program estimates a multivariate probit model using Gibbs sampling. It reads in data on independent and dependent variables, initializes parameters, and performs the following steps in each iteration: 1) draws latent dependent variables conditional on current parameters, 2) updates thresholds using Cowles' algorithm, 3) draws coefficients from their multivariate normal distribution, 4) calculates model fit and acceptance statistics, and 5) updates covariance matrix parameters. Model parameters are saved periodically over 6,000 iterations.

Uploaded by

sommukh
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
26 views2 pages

"C://mvnprob - Dat1" "C://mvnprob - Dat1": Inf Inf

This R program estimates a multivariate probit model using Gibbs sampling. It reads in data on independent and dependent variables, initializes parameters, and performs the following steps in each iteration: 1) draws latent dependent variables conditional on current parameters, 2) updates thresholds using Cowles' algorithm, 3) draws coefficients from their multivariate normal distribution, 4) calculates model fit and acceptance statistics, and 5) updates covariance matrix parameters. Model parameters are saved periodically over 6,000 iterations.

Uploaded by

sommukh
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

D:\Data\p297.

Friday, February 01, 2013 3:46 PM

#R program for multivariate probit model


x=as.matrix(read.table("c:\\mvnprob.dat1")[,1:7])
z=as.matrix(read.table("c:\\mvnprob.dat1")[,8:9])
#create variables and starting values
zstar=matrix(0,nrow(z),2)
d=2;k=7
b=matrix(0,(d*k))
s=cs=diag(d)
tz=matrix(0,d,4);ctz=matrix(0,d,4)
tz[,1]=-Inf; tz[,2]=0; tz[,4]=Inf
tz[1,3]=qnorm(sum(z[,1]<=2)/nrow(z), mean=-qnorm(sum(z[,1]==1)/nrow(z),mean=0,sd=1), sd=1)
tz[2,3]=qnorm(sum(z[,2]<=2)/nrow(z), mean=-qnorm(sum(z[,2]==1)/nrow(z),mean=0,sd=1), sd=1)
ctz=tz
acc1=acc2=acctot=0
write(c(0,t(b),t(s),tz[1,3],tz[2,3]),file="c:\\mvnprob.out",ncol=(d*k+k*k +3),append=T)
#begin Gibbs sampling
for(i in 2:6000){
#draw latent data: one-iteration gibbs sampler for tmvn simulation
bb=matrix(b,k,2)
m=x%*%bb
for(j in 1:d)
{
mm=m[,j] + t(s[j,-j])%*%solve(s[-j,-j])%*%(zstar[,-j]-m[,-j])
ss=s[j,j]-t(s[j,-j])%*%(solve(s[-j,-j]))%*%s[j,-j]
zstar[,j]=qnorm(runif(nrow(z),
min=pnorm(tz[j,z[,j]],mm,sqrt(ss)),
max=pnorm(tz[j,(z[,j]+1)],mm,sqrt(ss))),mean=mm,sd=sqrt(ss))
}
#draw thresholds using Cowles' algorithm
ctz[1,3]=qnorm(runif(1,min=pnorm(0,mean=tz[1,3],sd=.01),max=1),tz[1,3],sd=.01)
r=as.matrix((pnorm(ctz[1,z[,1]+1]-m[,1],0,1)-pnorm(ctz[1,z[,1]]-m[,1],0,1))/(pnorm(tz[1,z[,1
]+1]-m[,1],0,1)-pnorm(tz[1,z[,1]]-m[,1],0,1)))
r=t(log(r))%*%matrix(1,nrow(z))+log((1-pnorm(-tz[1,3]/.01,0,1))/(1-pnorm(-ctz[1,3]/.01,0,1)))
if(r>log(runif(1,0,1))){tz[1,3]=ctz[1,3]; acc1=acc1+1}
ctz[2,3]=qnorm(runif(1,min=pnorm(0,mean=tz[2,3],sd=.01),max=1),tz[2,3],sd=.01)
r=as.matrix((pnorm(ctz[2,z[,2]+1]-m[,2],0,1)-pnorm(ctz[2,z[,2]]-m[,2],0,1))/(pnorm(tz[2,z[,2
]+1]-m[,2],0,1)-pnorm(tz[2,z[,2]]-m[,2],0,1)))
r=t(log(r))%*%matrix(1,nrow(z))+log((1-pnorm(-tz[2,3]/.01,0,1))/(1-pnorm(-ctz[2,3]/.01,0,1)))
if(r>log(runif(1,0,1))){tz[2,3]=ctz[2,3]; acc2=acc2+1}

#draw b from mvn


vb=solve(solve(s)%x%(t(x)%*%x))
mn=vb%*%(as.vector(t(x)%*%zstar%*%t(solve(s))))
-1-

D:\Data\p297.R

Friday, February 01, 2013 3:46 PM

b=mn+t(rnorm((d*k),0,1)%*%chol(vb))
e=matrix((as.vector(zstar)-(diag(d)%x%x%*%b)),nrow(z),d)
v=t(e)%*%e
like=-.5*(d+nrow(z)+1)*log(det(s))-.5*sum(diag(v%*%solve(s)))
cs[1,2]=cs[2,1]=s[1,2]+rnorm(1,mean=0,sd=.01)
if(abs(cs[1,2])<1){
cslike=-.5*(d+nrow(z)+1)*log(det(cs))-.5*sum(diag(v%*%solve(cs)))
if((cslike-like)>log(runif(1,0,1)))
{s[1,2]=s[2,1]=cs[1,2]; acctot=acctot+1}
}
if(i%%10==0){print(i)}
if(i%%5==0){
write(c(i,t(b),t(s),tz[1,3],tz[2,3]),file="c:\\mvnprob.out",ncol=(d*k+k*k+3),append=T)}
}

-2-

You might also like