# CategoricalGibbsMetropolis step for DiscreteUniform distributions

**URL:** <https://discourse.pymc.io/t/categoricalgibbsmetropolis-step-for-discreteuniform-distributions/2959>\
**Category:** Development\
**Created:** [March 20, 2019, 8:13am UTC](https://discourse.pymc.io/t/categoricalgibbsmetropolis-step-for-discreteuniform-distributions/2959 "2019-03-20T08:13:18Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Helmut](https://avatars.discourse-cdn.com/v4/letter/h/cab0a1/32.png) [@Helmut](https://discourse.pymc.io/u/Helmut)\
**Post date:** [March 20, 2019, 8:13am UTC](https://discourse.pymc.io/t/categoricalgibbsmetropolis-step-for-discreteuniform-distributions/2959/1 "2019-03-20T08:13:18Z")

</div>

The CategoricalGibbsMetropolis step method is the default for the Categorical distribution. The Metropolis step method may not work for Categorical in some circumstances, e,.g. as part of compound distribution. However, CategoricalGibbsMetropolis currently can only be used with Categorical or Bernoulli distributions.

I have a model where I need to use a DiscreteUniform distribution rather than Categorical, as the k parameter can be very large. It would be useful if the CategoricalGibbsMetropolis step method could also be used for DiscreteUniform distributions, which are after all a special case of Categorical.

---

<div class="post-metadata">

**Author:** ![junpenglao](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/junpenglao/32/8_2.png) [@junpenglao](https://discourse.pymc.io/u/junpenglao)\
**Post date:** [March 20, 2019, 10:56am UTC](https://discourse.pymc.io/t/categoricalgibbsmetropolis-step-for-discreteuniform-distributions/2959/2 "2019-03-20T10:56:33Z")

</div>

I think you can specify the sampler to sample a specific RV, something like:

```python
step = pm.CategoricalGibbsMetropolis([your_rv])

```

However, warning re metropolis is that it is not always mix will with NUTS, in another word, mixing discrete and continuous parameter only works in some limited cases. You can try using a Uniform instead, unless you are using it to do indexing it works usually.

---

<div class="post-metadata">

**Author:** ![Helmut](https://avatars.discourse-cdn.com/v4/letter/h/cab0a1/32.png) [@Helmut](https://discourse.pymc.io/u/Helmut)\
**Post date:** [March 20, 2019, 10:53pm UTC](https://discourse.pymc.io/t/categoricalgibbsmetropolis-step-for-discreteuniform-distributions/2959/3 "2019-03-20T22:53:07Z")

</div>

What you say is true, but the code for CategoricalGibbsMetropolis step method checks the distribution type and raises an error if it is not Categorical or Bernoulli.

As regards your second point, in my case I find that discrete and continuous parameters do mix OK provide that a Metropolis step method is specified for the continuous parameters also.
