-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Closed
Labels
Description
Minimal example, simple "coin flip" model:
import pymc3 as pm
import numpy as np
import scipy.stats as ss
data = ss.binom(1, 0.8).rvs(20)
with pm.Model() as model:
# prior for p
p = pm.Uniform('p', lower=0, upper=1)
# model for x given p
x = pm.Binomial('x', n=np.ones(len(data)), p=p, observed=data)
with model:
trace = pm.sample(draws=1000, init='advi', n_init=20000)
ppc = pm.sample_ppc(trace, model=model, samples=500, size=100)
Gives:
TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe'
Full trace:
--------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-46-d7601fc9ec00> in <module>()
----> 1 ppc = pm.sample_ppc(trace, model=model)
/Users/kevinzielnicki/python/virtualenv/stitch/lib/python2.7/site-packages/pymc3/sampling.pyc in sample_ppc(trace, samples, model, vars, size, random_seed, progressbar)
389 for var in vars:
390 ppc[var.name].append(var.distribution.random(point=param,
--> 391 size=size))
392
393 return {k: np.asarray(v) for k, v in ppc.items()}
/Users/kevinzielnicki/python/virtualenv/stitch/lib/python2.7/site-packages/pymc3/distributions/discrete.pyc in random(self, point, size, repeat)
49 return generate_samples(stats.binom.rvs, n=n, p=p,
50 dist_shape=self.shape,
---> 51 size=size)
52
53 def logp(self, value):
/Users/kevinzielnicki/python/virtualenv/stitch/lib/python2.7/site-packages/pymc3/distributions/distribution.pyc in generate_samples(generator, *args, **kwargs)
349 [int(x) for x in broadcast_shape],
350 [int(x) for x in prefix_shape],
--> 351 *args, **kwargs)
352 if broadcast_shape == (1,):
353 samples = np.reshape(samples, prefix_shape)
/Users/kevinzielnicki/python/virtualenv/stitch/lib/python2.7/site-packages/pymc3/distributions/distribution.pyc in replicate_samples(generator, size, repeats, *args, **kwargs)
269 n = int(np.prod(repeats))
270 if n == 1:
--> 271 samples = generator(size=size, *args, **kwargs)
272 else:
273 samples = np.array([generator(size=size, *args, **kwargs)
/Users/kevinzielnicki/python/virtualenv/stitch/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.pyc in rvs(self, *args, **kwargs)
2808 """
2809 kwargs['discrete'] = True
-> 2810 return super(rv_discrete, self).rvs(*args, **kwargs)
2811
2812 def pmf(self, k, *args, **kwds):
/Users/kevinzielnicki/python/virtualenv/stitch/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.pyc in rvs(self, *args, **kwds)
952 # by _rvs().
953 self._size = size
--> 954 vals = self._rvs(*args)
955
956 vals = vals * scale + loc
/Users/kevinzielnicki/python/virtualenv/stitch/lib/python2.7/site-packages/scipy/stats/_discrete_distns.pyc in _rvs(self, n, p)
38 """
39 def _rvs(self, n, p):
---> 40 return self._random_state.binomial(n, p, self._size)
41
42 def _argcheck(self, n, p):
mtrand.pyx in mtrand.RandomState.binomial (numpy/random/mtrand/mtrand.c:31765)()
TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe'