# Why can't I use a Bernoulli as a likelihood variable in a hierarchical model in PyMC3?

**URL:** <https://discourse.pymc.io/t/why-cant-i-use-a-bernoulli-as-a-likelihood-variable-in-a-hierarchical-model-in-pymc3/2022>\
**Category:** Questions\
**Created:** [October 6, 2018, 11:53am UTC](https://discourse.pymc.io/t/why-cant-i-use-a-bernoulli-as-a-likelihood-variable-in-a-hierarchical-model-in-pymc3/2022 "2018-10-06T11:53:08Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![agtsai](https://avatars.discourse-cdn.com/v4/letter/a/87869e/32.png) [@agtsai](https://discourse.pymc.io/u/agtsai)\
**Post date:** [October 6, 2018, 11:53am UTC](https://discourse.pymc.io/t/why-cant-i-use-a-bernoulli-as-a-likelihood-variable-in-a-hierarchical-model-in-pymc3/2022/1 "2018-10-06T11:53:08Z")

</div>

> <https://stackoverflow.com/questions/52673649/why-am-i-getting-a-dimension-mismatch-in-my-pymc3-hierarchical-model>

---

<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:** [October 6, 2018, 12:07pm UTC](https://discourse.pymc.io/t/why-cant-i-use-a-bernoulli-as-a-likelihood-variable-in-a-hierarchical-model-in-pymc3/2022/2 "2018-10-06T12:07:17Z")

</div>

The shape error you are having is because you broadcasted the alpha and beta of the pm.Beta too early. In

```python
    # Parameters for coins
    theta = pm.Beta('theta',
                     omega_c[mint_idx]*(kappa_c[mint_idx]-2)+1,
                    (1-omega_c[mint_idx])*(kappa_c[mint_idx]-2)+1,
                     shape = num_coins)

```

You want the theta has the shape of `num_coins`, and then broadcasted it during observed. Because the latent variables (`theta` of each coin) is elementary/unique.  
So in you first example, you should do something like:

```python
grouped = observations.groupby(['mint', 'coin']).agg({'outcome': [np.sum, np.size]}).reset_index()
grouped.columns = ['mint', 'coin', 'heads', 'total']

num_mints = grouped['mint'].nunique()
mint_idx = grouped['mint']
num_coins = observations['coin'].nunique()
coin_idx = observations['coin']

with pm.Model() as hierarchical_model2:
    # Hyper parameters
    omega = pm.Beta('omega', 1, 1)
    kappa_minus2 = pm.Gamma('kappa_minus2', 0.01, 0.01)
    kappa = pm.Deterministic('kappa', kappa_minus2 + 2)

    # Parameters for mints
    omega_c = pm.Beta('omega_c',
                       omega*(kappa-2)+1, (1-omega)*(kappa-2)+1,
                       shape = num_mints)    
    kappa_c_minus2 = pm.Gamma('kappa_c_minus2',
                              0.01, 0.01,
                              shape = num_mints)
    kappa_c = pm.Deterministic('kappa_c', kappa_c_minus2 + 2)

    # Parameters for coins
    theta = pm.Beta('theta',
                     omega_c[mint_idx]*(kappa_c[mint_idx]-2)+1,
                    (1-omega_c[mint_idx])*(kappa_c[mint_idx]-2)+1,
                     shape = num_coins)

    y2 = pm.Bernoulli('y2', p=theta[coin_idx], observed=observations['outcome'])

```

---

<div class="post-metadata">

**Author:** ![agtsai](https://avatars.discourse-cdn.com/v4/letter/a/87869e/32.png) [@agtsai](https://discourse.pymc.io/u/agtsai)\
**Post date:** [October 6, 2018, 6:34pm UTC](https://discourse.pymc.io/t/why-cant-i-use-a-bernoulli-as-a-likelihood-variable-in-a-hierarchical-model-in-pymc3/2022/4 "2018-10-06T18:34:26Z")

</div>

Ah, it was the shape of `mint_idx`. Thank you so much!
