[R] R2WinBUGS Error

Liu, J. j.liu.31 at student.rug.nl
Thu Mar 9 22:10:00 CET 2017


Hi,

I'm trying to run R2WinBUGS using the R code below (Thinkpad Yoga 260,
Win8, system x86_64, mingw32, R version 3.3.1). It worked fine for several
times but then one error began to pop up in every run: command #Bugs:set
cannot be executed (is greyed out). I've been trying for more than one week
but still can't figure out where is the problem. It would be great if
someone could help me with this. Thanks in advance!

Kind regards,
JLiu

Here's the code:

sink("mod1.txt")
cat("
    model {

    for( k in 1 : n ) {
    for( i in 1 : n - 1 ) {
    for( j in i + 1 : n ) {
    y[k , i , j] ~ dbern(p[k , i , j])
    y[k , j , i] ~ dbern(p[k , j , i])
    logit(p[k , i , j]) <- mu + a[i] + b[j] + g[k] + ab[i , j] + ag[i , k]
+ ag[j , k]
    logit(p[k , j , i]) <- mu + a[j] + b[i] + g[k] + ab[j , i] + ag[j , k]
+ ag[i , k]
    }
    }
    }

    # Compute difference ab[1,2] - ab[2,1] for Figure 3 of the paper
    dif12 <- ab[1 , 2] - ab[2 , 1]

    # Prior for the overall mean effect mu
    mu ~ dnorm(0, 1)

    # Tri-normal prior for actor, partner, rater effects (a, b, g)
    # with zero-sum constraints
    for( i in 1 : n ) {
    a[i] <- a1[i , 1] - mean(a1[ , 1])
    b[i] <- a1[i , 2] - mean(a1[ , 2])
    g[i] <- a1[i , 3] - mean(a1[ , 3])

    # without zero-sum constraints will make the code run faster
    # for( i in 1 : n ) {
    # a[i] <- a1[i,1]
    # b[i] <- a1[i,2]
    # g[i] <- a1[i,3]

    a1[i , 1:3] ~ dmnorm(zero[1:3], S1[ , ])
    }

    # Wishart prior for precision matrix S1 = Sigma_1-inverse
    # degrees of freedom nu = 3
    # Om1 = nu*Identity Matrix is provided in the data list
    S1[1:3 , 1:3] ~ dwish(Om1[1:3 , 1:3], 3)
    Sig1[1:3 , 1:3] <- inverse(S1[1:3 , 1:3])

    # Compute the correlations and the variances for the main effects
    rho1 <- Sig1[1 , 2] / sqrt(Sig1[1 , 1] * Sig1[2 , 2])
    rho2 <- Sig1[1 , 3] / sqrt(Sig1[1 , 1] * Sig1[3 , 3])
    rho3 <- Sig1[2 , 3] / sqrt(Sig1[3 , 3] * Sig1[2 , 2])
    sig.a <- Sig1[1 , 1]
    sig.b <- Sig1[2 , 2]
    sig.g <- Sig1[3 , 3]

    # Standard deviation values are reported in the paper (Table 2)
    sd.a <- sqrt(sig.a)
    sd.b <- sqrt(sig.b)
    sd.g <- sqrt(sig.g)
    # A vector of zero's is needed for the mean values of some vectors
    for( i in 1 : 4 ) {
    zero[i] <- 0
    }

    # Priors for interaction effects ab_ij and ag_ij in equation (3) of the
paper
    for( i in 1 : n ) {
    # alpha_beta[i,i] is not defined in the model, just put  =0
    ab[i , i] <- 0

    # del[i] = personal bias of subject i in reporting his tendency to
establish friendship ties
    # The posterior distribution of del[i]'s is shown as boxplots in Figure
3 of the paper.
    # Side-by-side boxplots are created using Inference -> Compare menu in
WinBUGS

    del[i] <- ag[i , i] - ag.mean[i]
    ag.mean[i] <- (sum(ag[i , ]) - ag[i , i]) / (n - 1)
    ag[i , i] ~ dnorm(0, tau.ag)
    }

    # Generate 4 pair-wise interaction parameters as Normal_4 with
precision matrix S2
    for( i in 1 : n - 1 ) {
    for( j in i + 1 : n ) {
    ab[i , j] <- a2[i , j , 1]
    ab[j , i] <- a2[i , j , 2]
    ag[i , j] <- a2[i , j , 3]
    ag[j , i] <- a2[i , j , 4]
    a2[i , j , 1:4] ~ dmnorm(zero[1:4], S2[ , ])
    }
    }

    # Get the precision matrix of interaction parameters from the var-cov
matrix Sig_2 in the paper
    # Note that we don't use Inv-Wishart prior for this precision matrix
    S2[1:4 , 1:4] <- inverse(Sig2[1:4 , 1:4])

    # Now build the var-cov matrix Sig2 from variances and correlations
(phi's) in equation (7)

    phi1 ~ dunif(-0.99, 0.99)
    phi2 ~ dunif(-0.99, 0.99)
    phi3 ~ dunif(-0.99, 0.99)
    phi4 ~ dunif(-0.99, 0.99)

    # Compute two detrminants in equations (9-10) in the paper
    det1 <-  1 -  phi1 * phi1 - phi2 * phi2 - phi3 * phi3 + 2 * phi1 * phi2
* phi3
    det2 <-  1 -  phi1 * phi1 - 2 * phi2 * phi2 - 2 * phi3 * phi3 - phi4 *
phi4 + 4 * phi1 * phi2 * phi3
    + 4 * phi2 * phi3 * phi4 + phi1 * phi1 * phi4 * phi4 - 2 * phi2 * phi2
* phi3 * phi3
    - 2 * phi1 * phi3 * phi3 * phi4 - 2 * phi1 * phi2 * phi2 * phi4 + phi2
* phi2 * phi2 * phi2
    + phi3 * phi3 * phi3 * phi3

    # Check if determinants are positive
    cons1 <- step(det1)
    cons2 <- step(det2)

    # Zeros trick
    O1 <- 0
    O2 <- 0
    q1 <- 1 - cons1
    q2 <- 1 - cons2
    O1 ~ dbern(q1)
    O2 ~ dbern(q2)

    # Inverse Gamma priors for variance parameters sig.ab, sig.ag
    tau.ab ~ dgamma(100, 10)
    tau.ag ~ dgamma(100, 10)
    sig.ab <- 1 / tau.ab
    sig.ag <- 1 / tau.ag

    # Standard deviations sd.ab and sd.ag are reported in the paper (Table
2)
    sd.ab <- sqrt(sig.ab)
    sd.ag <- sqrt(sig.ag)
    Sig2[1 , 1] <- sig.ab
    Sig2[3 , 3] <- sig.ag
    Sig2[2 , 2] <- Sig2[1,1]
    Sig2[4 , 4] <- Sig2[3 , 3]

    # Create the off-diagonal entries of Sig2
    # If the generated set of phi1, phi2, phi3 and phi4 values don't have
both det1 > 0
    # and det2 > 0, the off-diagonal elements of Sig2 are all set equal to
zero
    Sig2[1,2] <- cons1*cons2*sig.ab*phi1
    Sig2[2 , 1] <- Sig2[1,2]
    Sig2[1 , 3] <- cons1*cons2*sqrt(sig.ab * sig.ag) * phi2
    Sig2[3 , 1] <- Sig2[1 , 3]
    Sig2[1 , 4] <- cons1*cons2*sqrt(sig.ab * sig.ag) * phi3
    Sig2[4 , 1] <- Sig2[1 , 4]
    Sig2[2 , 3] <- cons1*cons2*sqrt(sig.ab * sig.ag) * phi3
    Sig2[3 , 2] <- Sig2[2 , 3]
    Sig2[2 , 4] <- cons1*cons2*sqrt(sig.ab * sig.ag) * phi2
    Sig2[4 , 2] <-  Sig2[2 , 4]
    Sig2[3 , 4] <- cons1*cons2*sig.ag * phi4
    Sig2[4 , 3] <- Sig2[3 , 4]
    #############################################################

    # Predict the network for studying the model fit using residuals
    # for Model Selection (Section 3 of the paper)
    for( k in 1 : n ) {
    for( i in 1 : n - 1 ) {
    for( j in i + 1 : n ) {
    y.pred[k , i , j] ~ dbern(p[k , i , j])
    y.pred[k , j , i] ~ dbern(p[k , j , i])

    # How often we get wrong predictions? Compute residual e[k,i,j]
    e[k , i , j] <- abs(y[k , i , j] - y.pred[k , i , j])
    e[k , j , i] <- abs(y[k , j , i] - y.pred[k , j , i])
    }
    }
    }

    # Put diagonal residuals equal to zero. This is needed for computing
the sum() function
    for( k in 1 : n ) {
    for( i in 1 : n ) {
    e[k , i , i] <- 0
    }
    }
    # Compute epd = the total number of incorrect predictions, equation
(13) of the paper
    epd <- sum(e[,,])

    } # End of model


    ", fill = TRUE)
sink()

# read data as a whole three-dimension matrix
nr <- 21 # netowrk F
X <- "Kr"
network <- array(NA, dim=c(nr, nr, nr))
for(n in 1:nr){
  network[,,n] = as.matrix(read.table(paste0("C:/R/internship/network",X,
"/Sheet", n, ".txt")))
}

y = structure(.Data=network)
n = 21
Om1=structure(.Data=c(3,0,0,0,3,0,0,0,3), .Dim = c(3,3))
data = list(n=n, Om1=Om1, y=y)


params = c("mu", "a1", "S1", "Sig1", "a2", "S2", "sig2", "phi1", "phi2",
"phi3", "phi4","tau.ab", "tau.ag")

inits1 <- function () {list(mu = 0, tau.ab=1,tau.ag=1,
                            phi1=0.1,phi2=0.3,phi3=-0.4,phi4=0.1,
                            S1=structure(.Data=c(1,0,0,0,1,0,0,0,1), .Dim =
c(3,3)))
}

inits2 <- function () {list(mu = -5.0, tau.ab=10,tau.ag=10,
                           phi1=0,phi2=0,phi3=0.2,phi4=-0.3,
                           S1=structure(.Data=c(10,0,0,0,10,0,0,0,10), .Dim
= c(3,3)))
  }
inits3 <- function () {list(mu = 2.0, tau.ab=5,tau.ag=10,
                            phi1=0.3,phi2=-0.4,phi3=0.4,phi4=0,
                            S1=structure(.Data=c(5,0,0,0,5,0,0,0,5), .Dim =
c(3,3)))
  }

inits <- function () {list(inits1, inits2, inits3)}

nc <- 1      #number of MCMC chains to run
ni <- 4000  #number of samples for each chain
nb <- 2000   #number of samples to discard as burn-in
nt <- 1      #thinning rate, increase this to reduce autocorrelation

bugs.out <- bugs(data=data, inits=inits1, parameters.to.save=params,
model.file="mod1.txt",
                 n.chains=nc, n.iter=ni, n.burnin=nb, n.thin=nt,
debug=FALSE, DIC=TRUE,
                 bugs.directory = "C:/winBUGS/WinBUGS14",
working.directory=getwd())

	[[alternative HTML version deleted]]



More information about the R-help mailing list