微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JAGS 递归模型

如何解决JAGS 递归模型

我是使用 JAGS/WinBUGS/STAN 语言进行贝叶斯统计分析的新手。我正在尝试拟合扩展的 SIR 模型,错误似乎位于第 2 行,因为我总是收到警告: “解析模型文件时出错: 第 2 行“for”附近的语法错误

但我无法理解这个错误,数据:y 是矩阵形式 (T x K),N 向量大小为 K,L 向量大小为 K。

bayesian.model <- "
                  for(r in 1:K){
                    for(t in 2:T){

                         S[t,r] <- S[t-1,r] - y[t,r] + b*R[t-1,r]
                         E[t,r] <- E[t-1,r] + y[t,r] - c*E[t-1,r]
                         I[t,r] <- I[t-1,r] - a*I[t-1,r] + c*E[t-1,r]
                         R[t,r] <- R[t-1,r] + a*I[t-1,r] - b*R[t-1,r]
 
                         y[t,r] ~ dbin(theta[t,r],S[t-1,r])
                         logit(theta[t,r]) <-  alpha*log(I[t-1,r]) +  rzero + beta*L[r]
                     }
                   }

                       # ParaMETERS OF THE MODEL
                              a <- 1/17.5
                              b <- 1/m
                              m ~ dnorm(300,20)
                              c <- 1/11.17
                              for(r in 1:K){
                                    S[1,r] <- N[r] - 100 - 0.5*100 
                                    E[1,r] <- 0.5*100
                                    I[1,r] <- 100
                                    R[1,r] <- 0
                                    y[1,r] ~ dbin(theta[1,S[1,r])
                                    logit(theta[1,r]) <- alpha*log(I[1,r]+100) + rzero + 
                                                                    beta*L[r]                                                 
                              }
                                  rzero ~ dbeta(0.1,3)
                                  beta ~ dbeta(0.1,0.3)
                                  alpha <- 0.8
"
K <- ncol(y)
T <- nrow(y)
jags.data <- list(y = data,N = data$Population,L = data$Location,K = K,T = T)

parameters <- c("theta")
model <- jags(data = jags.data,parameters.to.save= parameters,n.iter = 10000,n.burnin = 0,n.thin = 1,n.chains = 2,model = textConnection(bayesian.model))

解决方法

就像评论中建议的那样,添加 { ...} 并将 rzero ~ dbeta(0.1,3) 替换为 rzero ~ dbeta(0.1,0.3) 应该可以:

bayesian.model <- "
{
                  for(r in 1:K){
                    for(t in 2:T){

                         S[t,r] <- S[t-1,r] - y[t,r] + b*R[t-1,r]
                         E[t,r] <- E[t-1,r] + y[t,r] - c*E[t-1,r]
                         I[t,r] <- I[t-1,r] - a*I[t-1,r] + c*E[t-1,r]
                         R[t,r] <- R[t-1,r] + a*I[t-1,r] - b*R[t-1,r]
 
                         y[t,r] ~ dbin(theta[t,r],S[t-1,r])
                         logit(theta[t,r]) <-  alpha*log(I[t-1,r]) +  rzero + beta*L[r]
                     }
                   }

                       # PARAMETERS OF THE MODEL
                              a <- 1/17.5
                              b <- 1/m
                              m ~ dnorm(300,20)
                              c <- 1/11.17
                              for(r in 1:K){
                                    S[1,r] <- N[r] - 100 - 0.5*100 
                                    E[1,r] <- 0.5*100
                                    I[1,r] <- 100
                                    R[1,r] <- 0
                                    y[1,r] ~ dbin(theta[1,S[1,r])
                                    logit(theta[1,r]) <- alpha*log(I[1,r]+100) + rzero + 
                                                                    beta*L[r]                                                 
                              }
                                  rzero ~ dbeta(0.1,0.3)
                                  beta ~ dbeta(0.1,0.3)
}                                  alpha <- 0.8 
"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。