首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JAGS生成预测

使用JAGS生成预测
EN

Stack Overflow用户
提问于 2017-04-30 18:57:34
回答 1查看 747关注 0票数 0

我有一个参数化的线性高斯贝叶斯网络,我试图用rjags对模型进行预测。我可以这样做一个观察,但不知道如何传递多个观察。下面是一个例子

代码语言:javascript
复制
library(rjags)
library(coda)

初始模型

代码语言:javascript
复制
mod <- textConnection("model {
  mpg.hat <- (34.96055404 - 3.35082533* wt - 0.01772474* disp)
  wt      ~ dnorm(3.21725, 1/0.9784574^2)
  disp    ~ dnorm(230.7219, 1/123.9387^2)
  mpg     ~ dnorm(mpg.hat, 1/2.916555^2)
}")

# Evaluate and get prediction when wt=1 and disp is hidden
m <- jags.model(mod, n.chains = 1, n.adapt = 1000, data=list(wt=1, disp=NA))
update(m, 10000)
cs <- coda.samples(m,  c("mpg", "wt", "disp"),  1e5)
summary(cs)

这与预期的一样,但是,我有多行数据,我想要生成预测。如果我试图扩展data=list(参数以包含更多行,则会引发错误。因此,在重新运行模型文本和下面的命令后,我得到了错误

代码语言:javascript
复制
m <- jags.model(mod, n.chains = 1, n.adapt = 1000, data=list(wt=1:2, disp=1:2))

Jags.model中的错误(mod,n.chains = 1,n.adapt = 1000,data =list)(wt= 1:2,: 节点d范数中的错误(230.722,(a1/(a123.939^2)) 节点长度不匹配::setValue

如何将其扩展到更多的观测?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-30 19:48:32

您需要遍历行:

代码语言:javascript
复制
mod <- textConnection("model {
  for (n in 1:N) {
    mpg.hat[n] <- (34.96055404 - 3.35082533* wt[n] - 0.01772474* disp[n])
    mpg[n]     ~ dnorm(mpg.hat[n], 1/2.916555^2)
    wt[n]      ~ dnorm(3.21725, 1/0.9784574^2)
    disp[n]    ~ dnorm(230.7219, 1/123.9387^2)
  }
}")

注意,还需要将N添加到数据列表中:

代码语言:javascript
复制
data = list(N = 1, wt = 1, disp = NA)
data = list(N = 2, wt = 1:2, disp = 1:2)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43710178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档