我想适合rstan
中R包中实现的发行版。我知道,如果直接实施自定义分布,则可以使用自定义分布:
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)
,以便能够在{{1}中的似然实现中调用此命令}?
答案 0 :(得分:1)
那是不可能的,除非您可以查看R实现的源代码并在您编写的Stan函数中使用相同的逻辑。从根本上讲,只能调用外部C ++代码,并且即使这样,也必须对外部C ++代码进行模板化,以便接受Stan的自定义标量类型,从而可以通过自动微分来计算梯度。
此外,方差-伽马分布将很难在Stan中实现,因为其Bessel函数只能以整数级求值。而且,绝对值运算往往会使Stan中的MCMC算法混乱,后者假定后对数内核在任何地方都是可区分的。
我的猜测是,如果您使用Stan的integrate_1d
函数来整合具有Gamma分布(或实际上是任何分布)的潜在错误,效果会更好。
https://mc-stan.org/docs/2_23/stan-users-guide/integrate-1d.html