Hi all,
can you please help to solve the issue in my code:
SLMM <- nimbleCode({
for (i in 1:S) {
y[1:N, i] ~ dmnorm(mu[1:N, i], tau_y0[1:N, 1:N, i])
mu[1:N, i] <- b[i, 1] * x1[1:N] + b[i, 2] * x2[1:N] + b[i, 3] *
x3[1:N] + b[i, 4] * x4[1:N] + b[i, 5] * x5[1:N]
b[i, 1:5] <- bm[latent[i],1:5]
latent[i] ~ dcat(pi[i,M])
}
for (i in 1:S) {
tau_y0[1:N, 1:N, i] <- diag(psi_y[i] * exp(-Dist[1:N, i]/lambda))
psi_y[i] ~ dgamma(1, 1)}
lambda ~ dunif(0, D)
for (k in 1:M) {
bm[k, 1:5] ~ dmnorm(mu_bm[1:5], cov = var_bm[1:5, 1:5])
}
var_bm[1:5, 1:5] <- 1/tau_bm * diag(rep(1, 5))
tau_bm ~ dgamma(1, 1)
for (i in 1:5) {
mu_bm[i] ~ dnorm(0, 1)
}
for (i in 1:S) {
pi[i,1] <- vs[i, 1]
for (j in 2 : M){ pi[i, j ] <- vs[i, j ]*prod(vsout[i, 1 : ( j - 1)])
}}
for(j in 1 : (M - 1)){
V[ j] ~ dbeta(av, bv)
for (i in 1:S) {
weight[i,j] <- exp(-Dist[i, j]/phi)
}
for (i in 1:S){
vs[i,j]<- weight[i,j]*V[j]
vsout<- 1-vs[i,j]
}}
av ~ dlnorm(0, 10)
bv ~ dlnorm(0, 10)
lambda ~ dunif(0, D)
})
my_points <- matrix(c(data$Longitude,
data$Latitude),ncol=2)
colnames(my_points) <- c("longitude", "latitude")
my_points
library(rdist)
df <- my_points
dist_mat <- pdist(df)
dist_1 <- pdist(df[, 1])
dist_2 <- pdist(df[, 2])
# product distance matrix
dist_prod <- product_metric(dist_1, dist_2)
# check equality
all.equal(dist_mat, dist_prod)
dist_mat_2<- (dist_prod )
Data <- list(y = y, x1 = data$x1, x2 = data$x2, x3 = data$x3, x4 =data$x4,
x5 = rdata$x5,
Dist = dist_mat_2)
Const <- list(S = 526, M = 50, N = 526, D = 50)
Inits <- list(psi_y = rep(1, Const$S), lambda = 10,
latent = rep(1,Const$S), alpha = 2,
tau_bm = 1,phi=1,
mu_bm = rnorm(5),
vlatent = rbeta(Const$M - 1, 1, 1))
mcmc.out <- nimbleMCMC(code = SLMM, data = Data, constants = Const,
inits = Inits, thin = 1, niter = 5000, nchains = 1, nburnin = 2000,
monitors = c("b","latent", "lambda"), setSeed = TRUE)
Defining model
Error in genVarInfo3() :
Dimension of vsout is 0, which does not match its usage in 'pi[i, j] <- vs[i, j] * prod(vsout[i, 1:(j - 1)])'.