Я пытаюсь выполнить двухсторонний байесовский анализ ANOVA с зазубринами, но возникает ошибка, которую я не могу понять.
## data
set.seed(123)
n <- 30
y <- log(rnorm(n, 3, 1))
x1 <- as.numeric(c(1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 2, 2, 1, 1))
x2 <- as.numeric(c(2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1))
##
data <- list(n = length(y),
g = length(table(x1)),
h = length(table(x2)),
x1 = as.numeric(x1),
x2 = as.numeric(x2),
y = y)
##
mean.x1 <- as.numeric(tapply(y,x1,mean))
mean.x2 <- as.numeric(tapply(y,x2,mean))
inits <- list(list( x1 = mean.x1, x2 = mean.x2, tau = c(2, 3)),
list( x1 = mean.x1+10, x2 = mean.x2+10, tau = c(2, 3)*0.5),
list( x1 = mean.x1-15, x2 = mean.x2-15, tau = c(2, 3)*2))
##
sink("model.txt")
cat('
model{
base ~ dnorm(0, 1.0E-6)
for(i in 1:g) {
x1[i] ~ dnorm(0.0, 1.0E-6)
}
for(i in 1:h) {
x2[i] ~ dnorm(0.0, 1.0E-6)
}
tau ~ dgamma(0.001, 0.001)
sigma <- 1/sqrt(tau)
for (i in 1:n) {
mean[i] <- base + x1[g[i]] + x2[h[i]]
y[i] ~ dnorm(mean[i], tau)
}
}
')
sink()
##
library(jagsUI)
mcmc <- jags(data = data,
inits = initis,
parameters.to.save = c("x1","x2","sigma"),
model.file = "model.txt",
n.chains = 3,n.adapt = 1000,
n.iter = 12000,n.burnin = 2000,n.thin = 5)
Ошибка в jags.model (file = model.file, data = data, inits = inits, n.chains = n.chains,: RUNTIME ERROR: Ошибка компиляции в строке 17. Индекс выходит за пределы допустимого диапазона, принимая подмножество g
Также я хотел бы добавить термин взаимодействия.
Любой ответ будет полезным. Спасибо.