rstan () не должен запускаться в # '@ примере? - PullRequest
0 голосов
/ 03 апреля 2019

При разработке пакета для каждого примера требуется <5 с. Тем не менее, пара <code>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() в комментариях к содержанию #'@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, и я ссылаюсь мои стандартные файлы следующие:

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

  scr <- rstan::stan_model(scr) 

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

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

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

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

`rstan_package_skeleton(path = 'BayesianAAA', stan_files = "Model_A.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 / веб / пакеты / rstantools / виньетки / минимал-rstan-package.html

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

Прошу прощения за мой плохой английский и недостаток изучения этих вещей. Буду признателен, если вы мне расскажете.

1 Ответ

1 голос
/ 04 апреля 2019

Обычно вы не должны писать пакет, который вызывает 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.

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

...