我想将R包中实现的分布拟合到rstan中的 rstan
. 我知道,如果直接实现自定义分布,可以使用自定义分布。
https:/mc-stan.orgdocs2_18stan-users-guidecustom-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)
?
那是不可能的,只不过你可以看看R实现的源代码,在你写的Stan函数中利用同样的逻辑。基本上只能调用外部的C++代码,即使如此,外部的C++代码也必须经过模板化处理,才能接受Stan的自定义标量类型,通过自动微分来计算梯度。
此外,方差-伽马分布在Stan中很难实现,因为它的Bessel函数只能在整数阶进行评估。另外,绝对值运算往往会搞乱Stan中的MCMC算法,因为它假设后对数核在任何地方都是可微分的。
我的猜测是,如果你使用Stan的 integrate_1d
函数来整合出具有Gamma分布(或真正的任何分布)的潜伏误差。
https:/mc-stan.orgdocs2_23stan-users-guideintegrate-1d.html。