#simulate data
require(mgcv)
set.seed(2)
n <- 400
dat <- gamSim(1,n=n,dist="normal",scale=2)
#get spline code
jd <- jagam(y~s(x0)+s(x1)+s(x2)+s(x3),data=dat,
file="jagam.txt",
sp.prior="gamma")
#first fit using jags as standard
library(rjags)
library(jagsUI)
out <- jags(data = jd$jags.data,
parameters.to.save = c("mu"),
model.file = "jagam.txt",
n.thin=2, n.chains=3, n.burnin=1000,n.iter=2000,
parallel=T)
#works ok
#also using NIMBLE
library(nimble)
library(igraph)
library(coda)
#sort data
nimbleConstants <- jd$jags.data[c("n","zero")]
nimbleData <- jd$jags.data[c("y","X","S1","S2","S3","S4")]
#model code - using jagam.txt above - except adding in indices
mynimbleCode <- nimbleCode({
for (i in 1:n) {
y[i] ~ dnorm(mu[i],tau)
mu[i] <- X[i,1:37] * b[1:37]
}
tau ~ dgamma(.05,.005)
## Parametric effect
for (i in 1:1) {
b[i] ~ dnorm(0,0.01)
}
## prior for s(x0)...
K1[1:9,1:9] <- S1[1:9,1:9] * lambda[1] + S1[1:9,10:18] * lambda[2]
b[2:10] ~ dmnorm(zero[2:10],K1[1:9,1:9])
## prior for s(x1)...
K2[1:9,1:9] <- S2[1:9,1:9] * lambda[3] + S2[1:9,10:18] * lambda[4]
b[11:19] ~ dmnorm(zero[11:19],K2[1:9,1:9])
## prior for s(x2)...
K3[1:9,1:9] <- S3[1:9,1:9] * lambda[5] + S3[1:9,10:18] * lambda[6]
b[20:28] ~ dmnorm(zero[20:28],K3[1:9,1:9])
## prior for s(x3)...
K4[1:9,1:9] <- S4[1:9,1:9] * lambda[7] + S4[1:9,10:18] * lambda[8]
b[29:37] ~ dmnorm(zero[29:37],K4[1:9,1:9])
## smoothing parameter priors
for (i in 1:8) {
lambda[i] ~ dgamma(.05,.005)
rho[i] <- log(lambda[i])
}
})
#fit model
Rmodel <- nimbleModel(mynimbleCode, constants = nimbleConstants)
#error here:
#Error in chol.default(model$K1[1:9, 1:9]) :
# the leading minor of order 1 is not positive definite
Thanks for any pointers