首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟JAGS/r2jags中的数据

模拟JAGS/r2jags中的数据
EN

Stack Overflow用户
提问于 2016-07-10 19:44:06
回答 2查看 1.3K关注 0票数 1

是否有可能误用JAGS作为从具有已知参数的模型生成数据的工具?我需要从预定义的模型中采样数据点,以便进行模拟研究,并测试我在R中开发的模型的威力。

不幸的是,该模型有些棘手(带有AR和VAR组件的层次结构),而且我无法在R中直接模拟数据,而在互联网上搜索时,我发现了一个博客帖子,其中数据是在JAGS中使用data{}块生成的。在这篇文章中,作者直接估算了JAGS模型。因为我在R中有我的模型,所以我想不使用model{}块将数据传输回R。这个是可能的吗?

最好,赢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-11 10:27:33

没有特别的理由需要使用数据块以这种方式生成数据--模型块可以很容易地以“反向”的方式生成基于固定参数的数据。只需将参数指定为JAGS,并监视模拟的数据点(并根据需要运行尽可能多的迭代--可能只有1!)。

尽管如此,原则上您可以使用数据或模型块(或两者的组合)来模拟数据,但是您需要有一个模型块(即使它是一个简单的、不相关的模型)才能运行JAGS。例如,以下代码使用数据块模拟某些数据:

代码语言:javascript
复制
txtstring <- '
data{
    for(i in 1:N){
        Simulated[i] ~ dpois(i)
    }
}

model{
    fake <- 0
}
#monitor# Simulated
#data# N
'


library('runjags')

N <- 10
Simulated <- coda::as.mcmc(run.jags(txtstring, sample=1, n.chains=1, summarise=FALSE))
Simulated

唯一真正的区别是数据块只更新一次(在模拟开始时),而模型块在每次迭代时更新。在这种情况下,我们只需要一个示例,所以这并不重要,但是如果您想要在同一个JAGS运行中生成多个模拟数据的实现,则必须将代码放在模型块中。数据块和模型块之间可能还有其他的区别,但我想不出有什么直接的区别。

请注意,您将以不同的格式将数据从JAGS中取出(一个单独的向量,其名称给出监视数据中任何数组的索引),因此可能需要一些后续工作才能将其返回到R. Edit中的向量/数组/任何其他列表:除非R2jags为此提供了一些实用工具--我不确定,因为我不使用该包。

票数 2
EN

Stack Overflow用户

发布于 2019-05-07 17:15:37

使用模型块来运行模拟多个数据集的单个MCMC链会有问题,因为MCMC示例通常是相关的。(每个后续示例都使用前面的示例绘制)。为了进行模拟研究,您可能希望从您的分布中生成独立的样本。方法是递归地使用数据或模型块,例如在for循环中,这将确保样本是独立的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38295839

复制
相关文章

相似问题

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