首页 > 解决方案 > 是什么导致了这个 rjags 错误:尺寸不匹配?

问题描述

我在 R 中运行以下时间序列 JAGS 模型时遇到问题:

data(lynx)
y <- as.vector(lynx)
y

x <- 1:length(y)

library(rjags)

mod <- "model {
  alpha ~ dnorm(0, 0.0001)
  beta ~ dnorm(0, 0.0001)
  lambda ~ dgamma(1, 1)

  for (i in 2:length(y)) {
    y[i] ~ dpois(lambda[i])
    lambda[i] <- alpha + beta * x[i - 1]
  }
}"

mod <- textConnection(mod)

samples <- jags.model(mod, data = list('x' = x, 'y' = y), n.chains = 3) # 
# Error in jags.model(mod, data = list(x = x, y = y), n.chains = 3) : 
# RUNTIME ERROR:
# Cannot insert node into lambda[1:114]. Dimension mismatch

有人能够解释上述错误指的是什么以及如何解决它吗?

标签: rbayesianjags

解决方案


lambda写为循环中泊松分布的速率项,但随后将其指定为先验中的伽马分布。这导致尺寸不匹配。最重要的是,您需要为泊松分布使用适当的链接函数。

mod <- "model {
  alpha ~ dnorm(0, 0.0001)
  beta ~ dnorm(0, 0.0001)

  for (i in 2:length(y)) {
    y[i] ~ dpois(lambda[i])
    log(lambda[i]) <- alpha + beta * x[i - 1]
  }
}"

mod <- textConnection(mod)

# create model object
model_fit <- jags.model(mod, data = list('x' = x, 'y' = y), n.chains = 3)

# collect samples
samples <- coda.samples(model_fit, c("alpha", "beta"), n.iter = 10000)

推荐阅读