Как использовать дистрибутивы из пакетов в rstan? - PullRequest
1 голос
/ 03 мая 2020

Я бы хотел разместить дистрибутивы, реализованные в R-пакетах, в rstan. Я знаю, что можно использовать пользовательские дистрибутивы, если они реализованы напрямую:

https://mc-stan.org/docs/2_18/stan-users-guide/custom-probability-functions-chapter.html

Однако мне интересно, можно ли использовать дистрибутивы из других пакетов. Например, я хочу использовать распределение дисперсии гаммы из пакета VarianceGamma.

dvg(x, vgC , sigma , theta , nu )

Как определить функцию плотности записи, скажем, vg_lpdf(), используя уже доступную реализацию в dvg(x, vgC , sigma , theta , nu , log = TRUE) чтобы можно было вызвать эту команду при реализации вероятности в target += vg_lpdf(x | vgC , sigma , theta , nu)?

1 Ответ

1 голос
/ 04 мая 2020

Это невозможно, за исключением того, что вы можете посмотреть исходный код реализации R и использовать те же логики c в написанной вами функции Stan. По сути, можно вызывать только внешний код C ++, и даже тогда внешний код C ++ должен быть шаблонным, чтобы принимать пользовательские скалярные типы Стэна, которые позволяют вычислять градиенты с помощью автоматического c дифференцирования.

В дополнение распределение гамма-дисперсии было бы трудно реализовать в Stan, поскольку его функции Бесселя можно оценивать только в целочисленных порядках. Кроме того, операции с абсолютными значениями имеют тенденцию портить алгоритм MCM C в Stan, который предполагает, что заднее ядро ​​журнала дифференцируемо везде.

Я предполагаю, что он будет работать лучше, если вы используете * 1005 Стэна * функция для интегрирования скрытой ошибки, которая имеет гамма-распределение (или действительно любое распределение).

https://mc-stan.org/docs/2_23/stan-users-guide/integrate-1d.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...