rstan()不应在#'@ example中运行吗?

时间:2019-04-03 09:41:06

标签: rstan

在软件包开发中,每个示例需要<5s。但是,一对stan_model()rstan::sampling()花费的时间超过5秒,如下所示:

    Examples with CPU or elapsed time > 5s
                     user system elapsed
   fit               1.25   0.11   32.47

因此,我将每个\donttest{}的{​​{1}}放入roxygen注释rstan::sampling()

在示例#'@examples中,我们不应该运行#'@examples或进行任何处理?


当我向您传授知识时,我曾尝试根据代码sampling()创建我的软件包(谢谢!!),但是,我对此并不了解。

以前,rstan_package_skeleton(path = 'BayesianAAA')在我的计算机上启动了错误(但现在不会发生错误)。 因此,我制作的包装没有rstan_package_skeleton(path = 'BayesianAAA'),例如rstan_package_skeleton(),在原始制作中,我放入了BayesianAAAModel_A.stanModel_B.stan。 ..在Model_C.stan中,我的stan文件如下:

inst/extdata

我对代码 scr <- system.file("extdata", "Model_A.stan", package="BayesianAAA") scr <- rstan::stan_model(scr) 有很多疑问。

1)第一个问题是如何包括我现有的stan文件以及如何为我的rstan_package_skeleton(path = 'BayesianAAA')文件引用.stan?   根据下一页的页面,它说

如果程序包中包含现有的.stan文件,则可以使用rstan_package_skeleton的可选rstan::stan_model()参数来包含它们。

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

stan_files

但是我不知道如何在没有`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()

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

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

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

3)我不太了解软件包“ rstanarm ”,但是我尝试为我的软件包模仿它,但是不能对任何{{1 }}文件中,我错了吗?

对我的英语不好,以及对这些事情缺乏学习感到抱歉。 如果您能告诉我,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

通常不应该编写在运行时调用stan_model的程序包,除非像 brms tmbstan 那样在运行时生成Stan程序静态地编写它。 CRAN上有许多软件包,它们基本上是按照为 rstanarm 开发的构建过程来提供经过编译的Stan程序的,rstantools::rstan_package.skeleton函数,step-by-step guidedeveloper guidelines可以直接解决您的问题

  

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

即使那样,也可能很难在5秒内从后验分布中进行采样(因此),因此您经常不得不使用小的数据集,一个链,少量的迭代等。

最好将Stan程序的名称(应以.stan扩展名结尾,否则不使用句点,并且名称中仅包含ASCII字母,数字和下划线)传递给{{1} }。如果从RStudio这样做,那么我将不在现有项目中调用它。然后

  

在安装过程中,所有Stan程序都将被编译并保存在列表rstantools::rstan_package_skeleton()中,然后可由软件包中的R函数使用。规则是将根据stanmodels中的模型代码编译的Stan程序存储为列表元素src/stan_files/foo.stan

有数十个R软件包的stanmodels$foo目录中都有Stan程序(尽管Stan程序的位置将移至src/stan_files,以用于下一个 rstantools 发布),大多数情况下只是遵循了渐晕,除了编写更多的R函数外,无需执行任何其他步骤。