假设我想在两个变量a
和b
PyMC 中放置一个自定义先验,例如:
p(a,b)∝(a+b)^(−5/2)
(有关这种先验选择背后的动机,请参阅此答案)
这可以在 PyMC 中完成吗?如果有怎么办?
例如,我想在下面的模型中定义这样a
的b
先验。
import pymc as pm
# ...
# Code that defines the prior: p(a,b)∝(a+b)^(−5/2)
# ...
theta = pm.Beta("prior", alpha=a, beta=b)
# Binomials that share a common prior
bins = dict()
for i in xrange(N_cities):
bins[i] = pm.Binomial('bin_{}'.format(i), p=theta,n=N_trials[i], value=N_yes[i], observed=True)
mcmc = pm.MCMC([bins, ps])
更新
按照 John Salvatier 的建议,我尝试了以下操作(请注意,我在 PyMC2 中,虽然我很乐意切换到 PyMC3),但我的问题是:
- 我应该导入什么才能正确继承
Continuous
? - 在 PyMC2 中,我还需要坚持 Theano 表示法吗?
最后,我以后如何告诉我的
Beta
分布alpha
并beta
从这个多元分布中获得先验?导入 pymc.Multivariate.Continuous
类 CustomPrior(Continuous): """ p(a,b)∝(a+b)^(−5/2)
:Parameters: None :Support: 2 positive floats (parameters to a Beta distribution) """ def __init__(self, mu, tau, *args, **kwargs): super(CustomPrior, self).__init__(*args, **kwargs) def logp(self, a,b): return np.log(math.power(a+b),-5./2)