[R] R2winbugs : vectorization

Philip A. Viton viton.1 at osu.edu
Mon Dec 15 18:23:39 CET 2008


I'm new to bugs, so please bear with me. Can someone tell me if the 
following two models are doing the same thing? The reason I ask is 
that with the same data, the first (based on 4 separate coeffs 
a1--a4) takes about 50 secs, while the second (based on a vectorized 
form, a[]) takes about 300. The means are about the same, though 
R-hat's in the second version are quite a bit better.


(Also, and completely unrelated: is there any way to get more than 2 
decimal places in the display of the means?)


Thanks!!



Here are the two models: (these are censored regressions, the first 
is essentially a copy of code in Gelman+Hill):

===================== model 1 : 4 separate a's
model{
  for (i in 1:n){
    z.lo[i]<- C * equals(y[i],C)
    z[i]~dnorm(z.hat[i],tau.y)I(z.lo[i],)
    z.hat[i]<-a1*x[i,1]+a2*x[i,2]+a3*x[i,3]+a4*x[i,4]
  }
a1~dunif(0,100)
a2~dunif(0,100)
a3~dunif(0,100)
a4~dunif(0,100)
tau.y<-pow(sigma.y,-2)
sigma.y~dunif(0,100)
}


============== model 2 : vector of a's
model{
  for (i in 1:n){
    z.lo[i]<- C * equals(y[i],C)
    z[i]~dnorm(z.hat[i],tau.y)I(z.lo[i],)
    z.hat[i]<-inprod(a[],x[i,])
  }
  for (j in 1:k){
    a[j]~dunif(0,100)
  }
tau.y<-pow(sigma.y,-2)
sigma.y~dunif(0,100)
}


and here, for reference, is the R calling code:

x<-as.matrix(iv)
y<-dv
C<-cens
z<-ifelse(y==C,NA,y)
n<-length(z)
data1<-list(x=x,y=y,z=z,n=n,C=C)
inits1<-function(){
   list(a1=runif(1),a2=runif(1),a3=runif(1),a4=runif(1),sigma.y=runif(1))}
params1<-c("a1","a2","a3","a4","sigma.y")

## now the bugs call for model 1
proc.time()
aasho.1<-bugs(data1,inits1,params1,"aasho1.bug",n.iter=10000,debug=FALSE)
proc.time()
print(aasho.1,digits=4)

now we try a vector approach
k<-4 # niv
data2<-list(x=x,y=y,z=z,n=n,C=C,k=k)
inits2<-function(){
   list(a=runif(k),sigma.y=runif(1))}
params2<-c("a","sigma.y")

## now the bugs call for model 2
proc.time()
aasho.2<-bugs(data2,inits2,params2,"aasho2.bug",n.iter=10000,debug=FALSE)
proc.time()
print(aasho.2,digits=6)

------------------------
Philip A. Viton
City Planning, Ohio State University
275 West Woodruff Avenue, Columbus OH 43210
viton.1 at osu.edu



More information about the R-help mailing list