Uniform没有logp方法

时间:2017-05-20 05:07:37

标签: pymc3

我必须在这里遗漏一些东西。我可以从正态分布计算对数概率,但不能计算均匀分布:

>>> import pymc as pm
>>> with pm.Model():
...     b = pm.Normal('b', 0, 1)
...
>>> b.logp({'b': 2)
array(-2.9189385332046727)

>>> with pm.Model():
...     a = pm.Uniform('a', 0, 1)
...
>>> a.logp({'a': 0.5})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'TransformedRV' object has no attribute 'logp'

1 个答案:

答案 0 :(得分:2)

PyMC3将有界分布(如均匀分布)转换为无界分布。所以你可以要求PyMC3不要变换变量:

with pm.Model() as model:
    a = pm.Uniform('a', 0, 1, transform=None)
a.logp({'a': 0.5})

或要求变换后的变量如:

with pm.Model() as model:
    a = pm.Uniform('a', 0, 1)
model.logp({'a_interval__': 0.5})

您可能想查看unobserved_RVs

free_RVsmodel属性