r - 是什么导致了这个 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
有人能够解释上述错误指的是什么以及如何解决它吗?
解决方案
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)
推荐阅读
- python - Python IG:Insight,KeyError:尝试运行脚本时出现“数据”
- bash - 按 Ctrl-C 跳转到下一个函数
- firefox - 为什么 OIDC 登录在 Edge 中中断,但在 FireFox 中没有?
- flutter - 如何在 Flutter 中使用 Firebase Emulator 测试 Google Auth
- android - Flutter 布局浏览器不渲染布局信息
- php - 将原始 SQL 转换为 Laravel 查询构建器
- javascript - 带有 url 历史的面包屑 javascript
- arrays - 如何从另一个 shell 脚本的数组变量中替换一个 shell 脚本的数组变量?
- c - 为什么 dd++/d++ 在(非动态分配的数组)中不起作用?
- sql - prod oracle 表继续阅读