I am running a large N-mixture model. I am actually attempting to run two different models with the same coefficients in an attempt to leverage two different types of data. Therefore, I have a lot of nested loops.
P.lat.sv.mod <- nimble::nimbleCode({
psi ~ dbeta(1, 1)
for(k in 1:13){
beta.lam[k] ~ dunif(-1,1)
sigma.lam[k] ~ dbern(psi)}
#var.beta.lam[k] ~ dunif(-1,1)}
beta0.lam ~ dnorm(1,.01)
# var.beta0.lam ~ dunif(1,2)
#Detection Priors
for(j in 1:5){
beta.p[j] ~ dnorm(0,.01)}
beta0.p ~ dnorm(-4,.01)
tau.p <- pow(sd.p, -2)
sd.p ~ dunif(1,4)
for(i in 1:Id.sv){
#loop through sites
for(y in 1:n_Year.sv[i]){
#loop through years
for(s in 1:n_Season.sv[i,y]){
#loop through seasons
#state model
log(
lambda.sv[i,y,s]) <- beta0.lam + sigma.lam[1]*beta.lam[1]*
lam.var.sv[i,y,s,1] + sigma.lam[2]*beta.lam[2]*
lam.var.sv[i,y,s,2] + sigma.lam[3]*beta.lam[3]*
lam.var.sv[i,y,s,3] + sigma.lam[4]*beta.lam[4]*
lam.var.sv[i,y,s,4] + sigma.lam[5]*beta.lam[5]*
lam.var.sv[i,y,s,5] + sigma.lam[6]*beta.lam[6]*
lam.var.sv[i,y,s,6] + sigma.lam[7]*beta.lam[7]*
lam.var.sv[i,y,s,7] + sigma.lam[8]*beta.lam[8]*
lam.var.sv[i,y,s,8] + sigma.lam[9]*beta.lam[9]*
lam.var.sv[i,y,s,9] + sigma.lam[10]*beta.lam[10]*
lam.var.sv[i,y,s,10] + sigma.lam[11]*beta.lam[11]*
lam.var.sv[i,y,s,11] + sigma.lam[12]*beta.lam[12]*
lam.var.sv[i,y,s,12] + sigma.lam[13]*beta.lam[13]*
lam.var.sv[i,y,s,13] #+ sigma.eps.lam[i]*eps.lam[i]
mu.p.sv[i,y,s] <- beta0.p + beta.p[1]*
p.var.sv[i,y,s,1] + beta.p[2]*
p.var.sv[i,y,s,2] + beta.p[3]*
p.var.sv[i,y,s,3] + beta.p[4]*
p.var.sv[i,y,s,4] + beta.p[5]*
p.var.sv[i,y,s,5]
Count.sv[i,y,s] ~ dbin(
p.sv[i,y,s], N.sv[i,y,s])
#expected count
#discrepancy
E.sv[i,y,s] <- pow((Count.sv[i,y,s] -
ex.sv[i,y,s]), 2) / (
ex.sv[i,y,s] + 0.1)
#simulated new count
#discrepancy
}}}
for(l in 1:Id.rv){
#loop through sites
for(t in 1:n_Year.rv[l]){
#loop through years
for(m in 1:n_Season.rv[l,t]){
#loop through seasons
omega.rv[l,t,m] ~ dbeta(1,1)
#state model
N.rv[l,t,m] ~ dZIP(lambda = lambda.rv[l,t,m], zeroProb = omega.rv[l,t,m])
log(lambda.rv[l,t,m]) <- beta0.lam + sigma.lam[1]*beta.lam[1]*lam.var.rv[l,t,m,1] + sigma.lam[2]*beta.lam[2]*lam.var.rv[l,t,m,2] + sigma.lam[3]*beta.lam[3]*lam.var.rv[l,t,m,3] + sigma.lam[4]*beta.lam[4]*lam.var.rv[l,t,m,4] + sigma.lam[5]*beta.lam[5]*lam.var.rv[l,t,m,5] + sigma.lam[6]*beta.lam[6]*lam.var.rv[l,t,m,6] + sigma.lam[7]*beta.lam[7]*lam.var.rv[l,t,m,7] + sigma.lam[8]*beta.lam[8]*lam.var.rv[l,t,m,8] + sigma.lam[9]*beta.lam[9]*lam.var.rv[l,t,m,9] + sigma.lam[10]*beta.lam[10]*lam.var.rv[l,t,m,10] + sigma.lam[11]*beta.lam[11]*lam.var.rv[l,t,m,11] + sigma.lam[12]*beta.lam[12]*lam.var.rv[l,t,m,12] + sigma.lam[13]*beta.lam[13]*lam.var.rv[l,t,m,13] #+ sigma.eps.lam[i]*eps.lam[i]
for(v in 1:n_Survey.rv[l,t,m]){
Count.rv[l,t,m,v] ~ dbin(p.rv[l,t,m,v], N.rv[l,t,m])
logit(p.rv[l,t,m,v]) ~ dnorm(mu.p.rv[l,t,m,v], tau.p)
mu.p.rv[l,t,m,v] <- beta0.p + beta.p[1]*p.var.rv[l,t,m,v,1] + beta.p[2]*p.var.rv[l,t,m,v,2] + beta.p[3]*p.var.rv[l,t,m,v,3] + beta.p[4]*p.var.rv[l,t,m,v,4] + beta.p[5]*p.var.rv[l,t,m,v,5]
#expected count
ex.rv[l,t,m,v] <- N.rv[l,t,m] * p.rv[l,t,m,v]
#discrepancy
E.rv[l,t,m,v] <- pow((Count.rv[l,t,m,v] - ex.rv[l,t,m,v]), 2) / (ex.rv[l,t,m,v] + 0.1)
#simulated new count
rep.rv[l,t,m,v] ~ dbin(p.rv[l,t,m,v], N.rv[l,t,m])
#discrepancy
E.rep.rv[l,t,m,v] <- pow((rep.rv[l,t,m,v] - ex.rv[l,t,m,v]), 2) / (ex.rv[l,t,m,v] + 0.1)
}}}}
fit.rv <- sum(fit.i.rv[1:Id.rv])
fit.rep.rv <- sum(fit.rep.i.rv[1:Id.rv])
for(l in 1:Id.rv){
#loop through sites
fit.i.rv[l] <- sum(fit.y.rv[l,1:n_Year.rv[l]])
fit.rep.i.rv[l] <- sum(fit.rep.y.rv[l,1:n_Year.rv[l]])
for(t in 1:n_Year.rv[l]){
#loop through years
fit.y.rv[l,t] <- sum(fit.s.rv[l,t,1:n_Season.rv[l,t]])
fit.rep.y.rv[l,t] <- sum(fit.rep.s.rv[l,t,1:n_Season.rv[l,t]])
for(m in 1:n_Season.rv[l,t]){
#loop through seasons
fit.s.rv[l,t,m] <- sum(E.rv[l,t,m,1:n_Survey.rv[l,t,m]])
fit.rep.s.rv[l,t,m] <- sum(E.rep.rv[l,t,m,1:n_Survey.rv[l,t,m]])
}
}
}
for(i in 1:Id.sv){
#loop through sites
for(y in 1:n_Year.sv[i]){
#loop through years
}
}
})
3 nodes produced errors; first error: Could not evaluate loop syntax: is indexing information provided via 'constants'?
I really am at a lose at this point. Any help would be greatly appreciated.