首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rstan()不应该在#‘@示例中运行吗?

rstan()不应该在#‘@示例中运行吗?
EN

Stack Overflow用户
提问于 2019-04-03 09:41:05
回答 1查看 101关注 0票数 0

在包开发中,每个示例都需要<5s。然而,这对stan_model()rstan::sampling()所花费的时间比5s长得多,如下所示:

代码语言:javascript
复制
    Examples with CPU or elapsed time > 5s
                     user system elapsed
   fit               1.25   0.11   32.47

因此,我在roxygen注释中为每个\donttest{}添加了#'@examples

在示例#'@examples中,我们不应该运行sampling(),或者有任何治疗方法?

当我从你那里学到的时候,我试着基于代码rstan_package_skeleton(path = 'BayesianAAA')创建我的包(谢谢!)但是,我对此不太了解。

以前,rstan_package_skeleton(path = 'BayesianAAA')启动了我的计算机中的错误(但现在没有发生错误)。所以,我做了我的包裹没有rstan_package_skeleton(),比如说BayesianAAA,在我最初的制作中,我把Model_A.stanModel_B.stanModel_C.stan,……在inst/extdata和我参考我的斯坦文件如下;

代码语言:javascript
复制
  scr <- system.file("extdata", "Model_A.stan", package="BayesianAAA")

  scr <- rstan::stan_model(scr) 

关于代码rstan_package_skeleton(path = 'BayesianAAA'),我有很多疑问。

1) 的第一个问题是如何包含现有的stan文件和如何为rstan::stan_model()引用 my .stan文件?根据下面的一页,它说

如果我们将现有的.stan文件包含在包中,我们可以使用可选的stan_files参数来rstan_package_skeleton来包含它们。

所以,我想我应该执行,我不确定,但需要以下类似的方式;

代码语言:javascript
复制
`rstan_package_skeleton(path = 'BayesianAAA', stan_files = "Model_A.stan" )`.

但我不知道如何为几个stan文件编写代码,比如Model_A.stanModel_B.stanModel_C.stan在我现有的没有rstan_package_skeleton()的包中。我不明白,但是下面的代码是正确的吗?由于我没有将变量stan_files中描述的文件反映在rstan_package_skeleton()创建的新项目中。

代码语言:javascript
复制
`rstan_package_skeleton(path = 'BayesianAAA', stan_files = c("Model_A.stan",`Model_B.stan`,`Model_C.stan` )`.

在这里,出现了另一个问题,就是,

2)第二个问题:执行代码rstan_package_skeleton(path = 'BayesianAAA', stan_files = "Model_A.stan" )?我在我现有的包项目中的R工作室控制台中执行它。是对的吗?然后,新的项目出现了,它包含了旧的现有项目。我该怎么办?

https://cran.r-project.org/web/packages/rstantools/vignettes/minimal-rstan-package.html

3)我对软件包"rstanarm“不太了解,但是我试图为我的包模仿它,但是我不能罚款任何.stan文件,我错了吗?

我很抱歉我的英语很差,而且对这些东西缺乏学习。如果你能告诉我,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-04 14:08:33

通常不应该编写在运行时调用stan_model的包,除非像brmstmbstan一样,您在运行时生成Stan程序,而不是静态地编写它。CRAN上有数十个软件包提供编译后的Stan程序,基本上遵循为rstanarm开发的构建过程,rstantools::rstan_package.skeleton函数、分步指南开发人员指南直接解决了您的问题。

CRAN策略允许较长的安装时间,但对示例和单元测试所用的时间施加限制,这些限制比编译一个简单的Stan程序所需的时间短得多。因此,只有在有预编译的Stan程序的情况下,才有可能对包进行充分的测试。

即使这样,也很难在5秒内从后验分布(充分)中抽取样本,因此您通常需要使用小数据集、一个链、少量的迭代等等。

最好将Stan程序的名称(应该以.stan扩展结尾,而不是使用句点)传递给rstantools::rstan_package_skeleton()。如果这样做是从RStudio,我会调用它而不是在一个现有的项目。然后

在安装过程中,所有Stan程序将被编译并保存在列表stanmodels中,然后R函数可以在包中使用它。规则是从src/stan_files/foo.stan中的模型代码编译的Stan程序存储为list元素stanmodels$foo

有几十个R包在他们的src/stan_files目录中有Stan程序(虽然Stan程序的位置将在下一个rstantools版本中移动到inst/stan ),但大多数情况下,这些包只需遵循小片段,除了编写更多的R函数之外,无需执行任何其他步骤。

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

https://stackoverflow.com/questions/55491953

复制
相关文章

相似问题

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