【问题标题】:read data from a file rjags从文件 rjags 中读取数据
【发布时间】:2017-08-27 09:17:46
【问题描述】:

我的数据文件如下所示:

list(y=structure(.Data=c(26, 228, 31, ...)), .Dim=c(413,9))

假设这个文件被保存为“data.txt”。

如果我在“R2OpenBUGS”中工作,它可以让我毫无问题地将数据作为文件传递:

mcmc <- bugs(data = "data.txt", inits=...)

但在 JAGS 中,如果我将数据作为“data.txt”传递,它会说:“数据必须是列表或环境”。这里有什么问题?另外,如果没有办法解决它,有没有办法可以将数据作为 R 中的列表读取?

我的模型是:

model {
for (i in 1:413) {
    for (j in 1:9) {
        logy[i,j] <- log(y[i,j])
        logy[i,j] ~ dnorm(m[i], s)
    }
}

# priors
for (i in 1:413) {
    m[i] ~ dgamma(0.001, 0.001)
}

s ~ dgamma(0.001, 0.001)

}

【问题讨论】:

  • 您可以尝试阅读并分配它。 dat &lt;- dget("data.txt") 。然后将其传递给 data= 语句
  • 谢谢!我不知道'dget'。我不确定它是否工作正常。因为现在我收到另一个错误:“尝试重新定义节点 logy[1,1]”。我认为我的模型很好,因为它在 R2OpenBUGS 中工作
  • 啊实际上,为什么你有两个节点叫 logy ?
  • 我基本上在我的模型中假设我的数据日志是正态分布的。所以在第一行我得到了日志,在第二行我说它是正态分布的。
  • 见下文.....

标签: r jags r2winbugs r2jags


【解决方案1】:

来自JAGS user manual

7.0.4 数据转换

JAGS 允许数据转换,但语法与 BUGS 不同。 BUGS 允许您在关系的左侧放置一个随机节点两次,如本示例取自手册

for (i in 1:N) {
   z[i] <- sqrt(y[i])
   z[i] ~ dnorm(mu, tau)
}

这在 JAGS 中是被禁止的。您必须将数据转换放在单独的关系块中,前面带有关键字data

data {
   for (i in 1:N) {
     z[i] <- sqrt(y[i])
   }
}
model {
   for (i in 1:N) {
      z[i] ~ dnorm(mu, tau)
   }
   ...
}

【讨论】:

  • 谢谢!另一个快速的问题。如何在 JAGS 中初始化多个链。我在用户手册中找不到这样的例子。当我执行“inits=init1”时,它工作正常。但是当我执行“inits = c(init1,init2)”时,它会说:“变量的重复初始值:m,s”。有任何想法吗? (保证这是我的最后一个问题!)
  • 使用list() 而不是c ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 2013-09-20
  • 2018-07-06
  • 2014-01-07
  • 2019-09-17
相关资源
最近更新 更多