R2OpenBUGS error in parse: unexpected symbol

39 views Asked by At

I am currently trying to fit a WinBUGS model using R2OpenBUGS. However, I get the following error:

Error in parse(text = x, srcfile = src): <text>:5:44: unexpected symbol
4:         for(j in 1:P){
5:             y[i,j] ~ dnorm(mu[i,j], psi[j])I

Apparently, this has something to do with the inappropriate R syntax on line 5:

y[i, j] ~ dnorm(mu[i, j], psi[j])I(thd[j, z[i, j]], thd[j, z[i, j] + 1])

Changing the line to appropriate R syntax:

y[i, j] ~ dnorm(mu[i, j], psi[j]) * I(thd[j, z[i, j]], thd[j, z[i, j] + 1])

will remove the error, but cause the model run to crash with the following log message:

"invalid or unexpected token scanned error pos 100 (error on line 5)"

I am trying to discern what's causing the problem. Any help is appreciated.

Full model:

model <- function() {
    for(i in 1:N){
        #measurement equation model
        for(j in 1:P){
            y[i,j] ~ dnorm(mu[i,j], psi[j]) * I(thd[j, z[i, j]], thd[j, z[i, j] + 1])
            ephat[i,j] <- y[i,j] - mu[i,j]
        }
        mu[i,1] <- eta[i]
        mu[i,2] <- lam[1] * eta[i]
        mu[i,3] <- xi[i,1]
        mu[i,4] <- lam[2] * xi[i,1]
        mu[i,5] <- lam[3] * xi[i,1]
        mu[i,6] <- lam[4] * xi[i,1]
        mu[i,7] <- lam[5] * xi[i,1]
        mu[i,8] <- lam[6] * xi[i,1]
        mu[i,9] <- lam[7] * xi[i,1]
        mu[i,10] <- xi[i,2]
        mu[i,11] <- lam[8] * xi[i,2]
        mu[i,12] <- lam[9] * xi[i,2]
        mu[i,13] <- lam[10] * xi[i,2]
        mu[i,14] <- lam[11] * xi[i,2]
        mu[i,15] <- lam[12] * xi[i,2]
        mu[i,16] <- xi[i,3]
        mu[i,17] <- lam[13] * xi[i,3]
        mu[i,18] <- lam[14] * xi[i,3]
        mu[i,19] <- xi[i,4]
        mu[i,20] <- lam[15] * xi[i,4]
        mu[i,21] <- lam[16] * xi[i,4]
        mu[i,22] <- lam[17] * xi[i,4]
        mu[i,23] <- lam[18] * xi[i,4]
        mu[i,24] <- lam[19] * xi[i,4]
        mu[i,25] <- lam[20] * xi[i,4]
        mu[i,26] <- lam[21] * xi[i,4]

        #structural equation model
        xi[i,1:4] ~ dmnorm(u[1:4], phi[1:4,1:4])
        eta[i] ~ dnorm(nu[i], psd)
        nu[i] <- gam[1] * xi[i,1] + gam[2] * xi[i,2] + gam[3] * xi[i,3] + gam[4] * xi[i,4]
        dthat[i] <- eta[i] - nu[i]
    }# end of i

    for(i in 1:4){
        u[i] <- 0.0
    }

    #priors on loadings and coefficients
    var.lam[1] <- 4.0 * psi[2]
    var.lam[2] <- 4.0 * psi[4]
    var.lam[3] <- 4.0 * psi[5]
    var.lam[4] <- 4.0 * psi[6]
    var.lam[5] <- 4.0 * psi[7]
    var.lam[6] <- 4.0 * psi[8]
    var.lam[7] <- 4.0 * psi[9]
    var.lam[8] <- 4.0 * psi[11]
    var.lam[9] <- 4.0 * psi[12]
    var.lam[10] <- 4.0 * psi[13]
    var.lam[11] <- 4.0 * psi[14]
    var.lam[12] <- 4.0 * psi[15]
    var.lam[13] <- 4.0 * psi[17]
    var.lam[14] <- 4.0 * psi[18]
    var.lam[15] <- 4.0 * psi[20]
    var.lam[16] <- 4.0 * psi[21]
    var.lam[17] <- 4.0 * psi[22]
    var.lam[18] <- 4.0 * psi[23]
    var.lam[19] <- 4.0 * psi[24]
    var.lam[20] <- 4.0 * psi[25]
    var.lam[21] <- 4.0 * psi[26]
    
    for(i in 1:21){
        lam[i] ~ dnorm(0.8,var.lam[i])
    }

    var.gam <- 4.0 * psd
    gam[1] ~ dnorm(0.6,var.gam)
    gam[2] ~ dnorm(0.6,var.gam)
    gam[3] ~ dnorm(0.4,var.gam)
    gam[4] ~ dnorm(0.4,var.gam)

    #priors on precisions
    for(j in 1:P){
        psi[j] ~ dgamma(10,8)
        sgm[j] <- 1/psi[j]
    }
    psd ~ dgamma(10,8)
    sgd <- 1/psd
    phi[1:4,1:4] ~ dwish(R[1:4,1:4], 30)
    phx[1:4,1:4] <- inverse(phi[1:4, 1:4])

} #end of model
0

There are 0 answers