Короткий ответ: нет способа определить новую функцию непосредственно в BUGS / JAGS так, как вам нужно, потому что BUGS не является языком программирования. Вы ограничены использованием функций и дистрибутивов, перечисленных в руководстве пользователя JAGS, или доступны для использования путем загрузки внешних модулей JAGS, таких как runjags или jags-wiener или (в настоящее время небольшое количество), других.
Немного более длинная версия состоит в том, что вы можете определять свои собственные функции и распределения в JAGS, написав свой собственный модуль для указания желаемой функции / распределения в C ++, а затем загрузив его в JAGS. Официальная документация JAGS в настоящее время не содержит подробностей, но опубликовано руководство:
Wabersich, D. и J. Vandekerckhove. 2014. Расширение JAGS: учебное пособие по добавлению пользовательских дистрибутивов в JAGS (с примером диффузионной модели). Поведение. Местожительство Методы 46: 15–28. DOI: 10,3758 / s13428-013-0369-3
.
Это, очевидно, требует знакомства с C ++, но это не так сложно, если вы уже являетесь программистом C ++. Установить модуль намного проще, если вы встраиваете модуль расширения JAGS в пакет R, как это делает пакет runjags (смотрите в каталоге / src). Если вы еще не являетесь программистом C ++, лучше обратиться за помощью.
Надеюсь, это поможет,
Мэтт
---
Редактировать: также стоит сказать, что, возможно, есть способ делать то, что вы хотите в BUGS / JAGS, просто то, что вы хотели реализовать (написание функции внутри модели JAGS), не является жизнеспособным решением. Если вы объясните свою реальную проблему более подробно (возможно, в новом вопросе), то вы можете получить решение, которое вы не рассматривали.