带有锯齿的双向贝叶斯ANOVA

时间:2020-07-12 03:06:40

标签: r bayesian anova interaction jags

我正在尝试使用尖齿执行2路贝叶斯方差分析,但有一个我无法理解的错误。

## 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,: 运行时错误: 第17行出现编译错误。 索引超出范围,取g的子集

此外,我想添加一个互动词。

任何答案都将有所帮助。谢谢。

0 个答案:

没有答案