如何在rstan中使用来自包的分发?

如何在rstan中使用来自包的分发?,r,distribution,stan,rstan,R,Distribution,Stan,Rstan,我想在rstan中安装在R包中实现的发行版。我知道,如果直接实现自定义发行版,则可以使用它们: 但是,我想知道是否可以使用其他包中的发行版。例如,我想使用VarianceGamma包中的方差gamma分布 dvg(x, vgC , sigma , theta , nu ) 如何使用dvg(x,vgC,sigma,theta,nu,log=TRUE)中已有的实现来定义log density函数,比如说,vg_lpdf(),以便能够在target+=vg_lpdf(x | vgC,sigma,t

我想在
rstan
中安装在R包中实现的发行版。我知道,如果直接实现自定义发行版,则可以使用它们:

但是,我想知道是否可以使用其他包中的发行版。例如,我想使用
VarianceGamma
包中的方差gamma分布

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

如何使用dvg(x,vgC,sigma,theta,nu,log=TRUE)中已有的实现来定义log density函数,比如说,
vg_lpdf()
,以便能够在
target+=vg_lpdf(x | vgC,sigma,theta,nu)中的可能性实现中调用此命令

这是不可能的,除非您可以查看R实现的源代码,并在编写的Stan函数中使用相同的逻辑。基本上只能调用外部C++代码,甚至外部C++代码必须被模板化,以接受Stan的自定义标量类型,使梯度能够通过自动微分计算。 此外,方差伽马分布很难在Stan中实现,因为它的贝塞尔函数只能在整数阶上计算。此外,绝对值运算往往会打乱Stan中的MCMC算法,该算法假定后验对数核在任何地方都是可微的

我的猜测是,如果使用Stan的
integrate_1d
函数来积分出具有伽马分布(或任何分布)的潜在误差,效果会更好


非常感谢。这当然是一个很大的限制,因为人们只能使用已经在
rstan
中实现的模型,而不能使用在其他包中有效实现的大量发行版。