我尝试使用beta-binomial回归模型,并希望在参数a, b
上指定以下优先级:
p(a, b) ~ | (a + b)^(-5/2) if a > 0 and b > 0
| 0 otherwise.
到目前为止,我已尝试以下列方式使用DensityDist
:
import pymc3 as mc
logp = lambda x: mc.switch(
mc.and_(mc.gt(x[0], 0), mc.gt(x[1], 0)),
-2.5 * mc.log(x[0] + x[1]),
-np.inf)
ab = mc.DensityDist('ab', logp, shape=(2,), testval=(1, 1))
但是像这样(可理解地)定义可能性的分数会导致数值优化问题,例如find_MAP
。
我遇到了Bounded
,它允许用户定义有界的1-d分布,但是还没有能够弄清楚如何将其扩展到多变量分布。是否有可能以惯用的方式实现上述方法,并与数值优化相得益彰?