如何在 rstan 中使用包中的发行版?
How to use distributions from packages in rstan?
我想在 rstan
中安装在 R 包中实现的发行版。我知道如果直接实现,可以使用自定义分布:
https://mc-stan.org/docs/2_18/stan-users-guide/custom-probability-functions-chapter.html
但是,我想知道是否可以使用其他软件包的发行版。例如,我想使用 VarianceGamma
包中的方差伽玛分布。
dvg(x, vgC , sigma , theta , nu )
如何使用 dvg(x, vgC , sigma , theta , nu , log = TRUE)
中已有的实现来定义对数密度函数,例如 vg_lpdf()
,以便能够在 [=] 中的似然实现中调用此命令15=]?
这是不可能的,除非您可以查看 R 实现的源代码并在您编写的 Stan 函数中使用相同的逻辑。本质上只能调用外部 C++ 代码,即使这样,外部 C++ 代码也必须模板化才能接受 Stan 的自定义标量类型,从而能够通过自动微分计算梯度。
此外,方差-伽马分布很难在 Stan 中实现,因为它的贝塞尔函数只能以整数阶计算。此外,绝对值运算往往会扰乱 Stan 中的 MCMC 算法,该算法假设后验对数内核在任何地方都是可微的。
我的猜测是,如果您使用 Stan 的 integrate_1d
函数来积分具有 Gamma 分布(或实际上任何分布)的潜在错误,它会更好。
https://mc-stan.org/docs/2_23/stan-users-guide/integrate-1d.html
我想在 rstan
中安装在 R 包中实现的发行版。我知道如果直接实现,可以使用自定义分布:
https://mc-stan.org/docs/2_18/stan-users-guide/custom-probability-functions-chapter.html
但是,我想知道是否可以使用其他软件包的发行版。例如,我想使用 VarianceGamma
包中的方差伽玛分布。
dvg(x, vgC , sigma , theta , nu )
如何使用 dvg(x, vgC , sigma , theta , nu , log = TRUE)
中已有的实现来定义对数密度函数,例如 vg_lpdf()
,以便能够在 [=] 中的似然实现中调用此命令15=]?
这是不可能的,除非您可以查看 R 实现的源代码并在您编写的 Stan 函数中使用相同的逻辑。本质上只能调用外部 C++ 代码,即使这样,外部 C++ 代码也必须模板化才能接受 Stan 的自定义标量类型,从而能够通过自动微分计算梯度。
此外,方差-伽马分布很难在 Stan 中实现,因为它的贝塞尔函数只能以整数阶计算。此外,绝对值运算往往会扰乱 Stan 中的 MCMC 算法,该算法假设后验对数内核在任何地方都是可微的。
我的猜测是,如果您使用 Stan 的 integrate_1d
函数来积分具有 Gamma 分布(或实际上任何分布)的潜在错误,它会更好。
https://mc-stan.org/docs/2_23/stan-users-guide/integrate-1d.html