Skip to content

TypeError on sample_ppc with binomial random variable #2290

@kzielnicki

Description

@kzielnicki

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'

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions