You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二项分布年度N值的JAGS估计:报错排查与修正

二项分布N值的贝叶斯年度估计(JAGS实现)

问题背景

我需要用贝叶斯方法从二项分布中估计N值,手头有40年的计数数据和估计的成功率,目标是得到每年的N值估计。作为JAGS新手,我尝试给n添加索引n[i]来获取年度估计,结果报错:"Index out of range taking subset of n"。我已经能跑通生成单一N值的模型(移除似然中n的索引即可),但不确定当前思路是否正确。

初始错误模型与测试数据

sink("file.jags")
cat("
    model {

    ## Likelihood    
    for (i in 1:nyear) {
      
      x[i] ~ dbin(theta, n[i])
     
    }

    ## Priors    
    lambda ~ dgamma(0.005, 0.005)    
    theta ~ dbeta(22, 37)
    mu <- lambda/theta
    n ~ dpois(mu)
    
}    
", fill = TRUE)

sink()

# Initial values
inits <- function() { 
  list(
    n = sample(1:100
               , size = 1) 
    , lambda = runif(1, 1, 100)
  )
}

# Parameters monitored
params <- c('theta'
            , 'n'
)

# MCMC settings
ni <- 2000
nb <- 200
nc <- 3

# Bundle data
jags.data <- list(n = c(round(runif(40, 1, 100)))
                  , nyear = 40)

# Fit model
out <- jagsUI(data = jags.data
              , inits = inits
              , parameters.to.save = params
              , model.file = "file.jags"
              , n.chains = nc
              , n.iter = ni
              , n.burnin = nb
              , verbose = TRUE)

# Summarize posteriors
print(out$summary, dig = 2)

修正后的模型

根据建议,将n的先验放入循环中生成年度先验,同时从初始值列表中移除n,解决了"setParameters"维度不匹配的问题,模型成功运行。此外将lambda的先验从gamma分布改为均匀分布,测试后两种先验结果无显著差异,最终保留均匀分布先验。

"model {

    # Likelihood    
    for (i in 1:nyear) {
      
      reported_morts[i] ~ dbin(report_rate, total_morts[i])
      
      # Annual prior for total mortality. Necessary to get annual estimates.
      total_morts[i] ~ dpois(mu)
    }

    # Priors
    lambda ~ dunif(1, 100)
    report_rate ~ dbeta(22, 37)
    mu <- round(lambda/report_rate)
    
}"  

# Initial values. Removed "n = sample(1:100, size = 1)".
inits <- function() { 
  list(
    lambda = runif(1, 1, 100)
  )
}  

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:25:29