rstan() не должен запускаться в #'@example?

При разработке пакетов для каждого примера требуется ‹5s. Однако пара stan_model() и rstan::sampling() занимает больше времени, чем 5 с, следующим образом:

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

Поэтому я поставил \donttest{} для каждого rstan::sampling() в комментариях roxygen #'@examples

В примерах#'@examples мы не должны запускать sampling() или есть какое-то лечение?


Я пытался создать свой пакет на основе кода rstan_package_skeleton(path = 'BayesianAAA'), когда меня учили у вас (спасибо!!), но я многого в нем не понимаю.

Раньше rstan_package_skeleton(path = 'BayesianAAA') запускал ошибки в моем компе (но сейчас ошибка не возникает). Итак, я сделал свой пакет без rstan_package_skeleton(), скажем, BayesianAAA, и в своем первоначальном варианте я поместил Model_A.stan,Model_B.stan,Model_C.stan,.... в inst/extdata, и я ссылаюсь на свои файлы stan следующим образом;

  scr <- system.file("extdata", "Model_A.stan", package="BayesianAAA")

  scr <- rstan::stan_model(scr) 

У меня много вопросов по коду rstan_package_skeleton(path = 'BayesianAAA').

1) Первый вопрос: как включить мои существующие файлы stan и как сослаться на мои .stan файлы для rstan::stan_model() ? Согласно странице, следующей за страницей, было сказано, что

Если бы у нас были существующие файлы .stan для включения в пакет, мы могли бы использовать необязательный аргумент stan_files для rstan_package_skeleton, чтобы включить их.

Итак, я думаю, что должен выполнить, я не уверен, но требуется следующий способ;

`rstan_package_skeleton(path = 'BayesianAAA', stan_files = "Model_A.stan" )`.

Но я не знаю, как написать код для нескольких stan-файлов, скажем, Model_A.stan,Model_B.stan,Model_C.stan в моем существующем пакете, сделанном без rstan_package_skeleton(). Я не понимаю, но следующий код правильный? Поскольку я не знаю, где файлы, описанные в переменной stan_files, отражаются в новом проекте, созданном rstan_package_skeleton().

`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 studio в моем существующем пакетном проекте. Это правильно? И тогда возникает новый проект, содержащий старый существующий проект. Что я должен делать ?

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

3) Не совсем знаю про пакеты "rstanarm" , но пытаюсь сымитировать его для своего пакета, но не могу в нем ни одного .stan файла штрафовать, я ошибаюсь?

Прошу прощения за мой плохой английский и отсутствие знаний об этих вещах. Я был бы признателен, если бы вы могли сказать мне.


person Camford Oxbridge    schedule 03.04.2019    source источник


Ответы (1)


Как правило, вам не следует писать пакет, который вызывает stan_model во время выполнения, за исключением случаев, когда, подобно brms или tmbstan, вы создаете программу Stan во время выполнения, а не пишете ее статически. В CRAN есть десятки пакетов, которые предоставляют скомпилированные программы Stan, в основном следуя процессу сборки, разработанному для rstanarm, который облегчается функцией rstantools::rstan_package.skeleton, пошаговое руководство и руководство для разработчиков, непосредственно отвечающее на ваш вопрос.

Политика CRAN допускает длительное время установки, но накладывает ограничения на время, затрачиваемое на примеры и модульные тесты, которые намного короче, чем время, необходимое для компиляции даже простой программы Stan. Таким образом, адекватно протестировать ваш пакет можно только в том случае, если в нем есть предварительно скомпилированные программы Stan.

Даже в этом случае может быть сложно сделать выборку из апостериорного распределения (адекватно) за пять секунд, поэтому вам часто приходится использовать небольшие наборы данных, одну цепочку, небольшое количество итераций и т. д.

Лучше всего передавать имена ваших программ Stan (которые должны заканчиваться расширением .stan, не использовать точку в противном случае и содержать только буквы ASCII, цифры и знак подчеркивания в именах) в rstantools::rstan_package_skeleton(). Если бы я делал это из RStudio, я бы назвал это, не находясь в существующем проекте. затем

Во время установки все программы Stan будут скомпилированы и сохранены в списке stanmodels, который затем может использоваться функцией R в пакете. Правило состоит в том, что программа Stan, скомпилированная из кода модели в src/stan_files/foo.stan, сохраняется как элемент списка stanmodels$foo.

Существуют десятки пакетов R, в которых программы Stan находятся в каталоге src/stan_files (хотя расположение программ Stan будет перемещено в inst/stan для следующего выпуска rstantools), которые по большей части просто следовали за виньетками. и не нужно было делать никаких дополнительных шагов, кроме написания дополнительных функций R.

person Ben Goodrich    schedule 04.04.2019
comment
Спасибо за ответ. У меня много вопросов и пишите их в выше. Буду признателен, если вы ответите на мои вопросы. - person Camford Oxbridge; 07.04.2019
comment
Спасибо за второй ответ!! Ваш ответ всегда повышает мою мотивацию. (Я не заметил вашего второго ответа.) Я понимаю, что файл с именем xxx.stan скомпилирован, и на него можно ссылаться как на объект R списка с именем stanmodel. - person Camford Oxbridge; 19.04.2019