Closed
Description
A ValueError is raised when using sample_ppc
on a trace generated by sampling a model with a Poisson distributed variable and a HalFflat prior.
import pymc3 as pm
import numpy as np
data = np.random.poisson(lam=10, size=200)
model = pm.Model()
with model:
mu = pm.HalfFlat('sigma')
pm.Poisson('foo', mu=mu, observed=data)
trace = pm.sample(tune=1000)
with model:
samples = pm.sample_ppc(trace)
Will raise: ValueError: Cannot sample from HalfFlat distribution
A model using a normal distribution works fine.
Like this example:
with model:
sd = pm.HalfFlat('sigma')
pm.Normal('foo', mu=4, sd=sd, observed=data)
trace = pm.sample()
with model:
samples = pm.sample_ppc(trace)
Using a prior other than HalfFlat
also seems to work.
Please provide the full traceback.
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/distribution.py in _draw_value(param, point, givens, size)
397 try:
--> 398 dist_tmp.random(point=point, size=size)
399 except (ValueError, TypeError):
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/discrete.py in random(self, point, size)
418 def random(self, point=None, size=None):
--> 419 mu = draw_values([self.mu], point=point, size=size)[0]
420 return generate_samples(stats.poisson.rvs, mu,
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/distribution.py in draw_values(params, point, size)
320 try: # might evaluate in a bad order,
--> 321 evaluated[param_idx] = _draw_value(param, point=point, givens=givens.values(), size=size)
322 if isinstance(param, collections.Hashable) and named_nodes_parents.get(param):
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/distribution.py in _draw_value(param, point, givens, size)
383 elif hasattr(param, 'random') and param.random is not None:
--> 384 return param.random(point=point, size=size)
385 elif (hasattr(param, 'distribution') and
~/envs/gammapy/lib/python3.7/site-packages/pymc3/model.py in __call__(self, *args, **kwargs)
41 def __call__(self, *args, **kwargs):
---> 42 return getattr(self.obj, self.method_name)(*args, **kwargs)
43
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/continuous.py in random(self, point, size)
306 """
--> 307 raise ValueError('Cannot sample from HalfFlat distribution')
308
ValueError: Cannot sample from HalfFlat distribution
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
<ipython-input-22-0d50d05c4c95> in <module>
13
14 with model:
---> 15 samples = pm.sample_ppc(trace)
~/envs/gammapy/lib/python3.7/site-packages/pymc3/sampling.py in sample_ppc(trace, samples, model, vars, size, random_seed, progressbar)
1127 # draw once to inspect the shape
1128 var_values = list(zip(varnames,
-> 1129 draw_values(vars, point=model.test_point, size=size)))
1130 ppc_trace = defaultdict(list)
1131 for varname, value in var_values:
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/distribution.py in draw_values(params, point, size)
319 else:
320 try: # might evaluate in a bad order,
--> 321 evaluated[param_idx] = _draw_value(param, point=point, givens=givens.values(), size=size)
322 if isinstance(param, collections.Hashable) and named_nodes_parents.get(param):
323 givens[param.name] = (param, evaluated[param_idx])
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/distribution.py in _draw_value(param, point, givens, size)
401 # with theano.shared inputs
402 dist_tmp.shape = np.array([])
--> 403 val = dist_tmp.random(point=point, size=None)
404 dist_tmp.shape = val.shape
405 return dist_tmp.random(point=point, size=size)
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/discrete.py in random(self, point, size)
417
418 def random(self, point=None, size=None):
--> 419 mu = draw_values([self.mu], point=point, size=size)[0]
420 return generate_samples(stats.poisson.rvs, mu,
421 dist_shape=self.shape,
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/distribution.py in draw_values(params, point, size)
319 else:
320 try: # might evaluate in a bad order,
--> 321 evaluated[param_idx] = _draw_value(param, point=point, givens=givens.values(), size=size)
322 if isinstance(param, collections.Hashable) and named_nodes_parents.get(param):
323 givens[param.name] = (param, evaluated[param_idx])
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/distribution.py in _draw_value(param, point, givens, size)
382 return point[param.name]
383 elif hasattr(param, 'random') and param.random is not None:
--> 384 return param.random(point=point, size=size)
385 elif (hasattr(param, 'distribution') and
386 hasattr(param.distribution, 'random') and
~/envs/gammapy/lib/python3.7/site-packages/pymc3/model.py in __call__(self, *args, **kwargs)
40
41 def __call__(self, *args, **kwargs):
---> 42 return getattr(self.obj, self.method_name)(*args, **kwargs)
43
44
~/envs/gammapy/lib/python3.7/site-packages/pymc3/distributions/continuous.py in random(self, point, size)
305 ValueError
306 """
--> 307 raise ValueError('Cannot sample from HalfFlat distribution')
308
309 def logp(self, value):
ValueError: Cannot sample from HalfFlat distribution
Versions and main components
- PyMC3 Version: 3.5
- Theano Version: 1.03
- Python Version: 3.7
- Operating system: linux
- How did you install PyMC3: pip
Metadata
Metadata
Assignees
Labels
No labels