【发布时间】:2014-04-21 13:18:03
【问题描述】:
假设我想在 PyMC 中对两个变量 a 和 b 进行自定义先验,例如:
p(a,b)∝(a+b)^(−5/2)
(关于这种先验选择背后的动机,请参阅this answer)
这可以在 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(连续): """ 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)
【问题讨论】:
-
哦,对不起,我以为你出于某种原因在 PyMC3 中。您可以在 pymc2 中执行此操作,但它不同。我会更新我的答案
标签: python statsmodels pymc