# How do I assign coords to do a ppc for specific groups in my data?

**URL:** <https://discourse.pymc.io/t/how-do-i-assign-coords-to-do-a-ppc-for-specific-groups-in-my-data/12297>\
**Category:** v5\
**Tags:** arviz\
**Created:** [June 12, 2023, 3:12pm UTC](https://discourse.pymc.io/t/how-do-i-assign-coords-to-do-a-ppc-for-specific-groups-in-my-data/12297 "2023-06-12T15:12:33Z")\
**Posts on this page:** 1\
**Showing post:** 12

<div class="post-metadata">

**Author:** ![Jordan\_Howell](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/jordan_howell/32/6067_2.png) [@Jordan\_Howell](https://discourse.pymc.io/u/Jordan_Howell)\
**Post date:** [June 29, 2023, 5:38pm UTC](https://discourse.pymc.io/t/how-do-i-assign-coords-to-do-a-ppc-for-specific-groups-in-my-data/12297/12 "2023-06-29T17:38:29Z")

</div>

Ok. @jessegrabowski helped me out with this post: [PyMC+ArviZ: how to make the most of labeled coords and dims in PyMC 4.0 - Sharing - PyMC Discourse](https://discourse.pymc.io/t/pymc-arviz-how-to-make-the-most-of-labeled-coords-and-dims-in-pymc-4-0/9581/8)

I do have a multi-index with my hierarchical model that’s six levels deep.

I did the following to my arviz object:

```auto
idata.posterior_predictive.coords.update({'predicted_eaches_dim_0':m_idx})
idata.observed_data.coords.update({'predicted_eaches_dim_0':m_idx})
idata = idata.assign_coords(
    obs_id=m_idx, # note also different length
    groups=["constant_data"]
)

```

That yielded the following:

 ![image](https://canada1.discourse-cdn.com/flex036/uploads/pymc3/original/2X/8/85ad4a2cbbfb0833c139a2fb46f72de801c88081.png)

So now I have repeating values for each level of my hierarchy plus the month and location of the sale made. When I run the below, I get the following.

```auto
az.plot_ppc(idata, flatten=[], coords = {'predicted_eaches_dim_0':'NUTRITION'},
           kind = 'scatter')

```

```auto
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/tmp/ipykernel_85434/3645245510.py in <module>
      1 az.plot_ppc(idata, flatten=[], coords = {'predicted_eaches_dim_0':'NUTRITION'},
----> 2 kind = 'scatter')

/opt/conda/lib/python3.7/site-packages/arviz/plots/ppcplot.py in plot_ppc(data, kind, alpha, mean, observed, color, colors, grid, figsize, textsize, data_pairs, var_names, filter_vars, coords, flatten, flatten_pp, num_pp_samples, random_seed, jitter, animated, animation_kwargs, legend, labeller, ax, backend, backend_kwargs, group, show)
    354 # TODO: Add backend kwargs
    355 plot = get_plotting_function("plot_ppc", "ppcplot", backend)
--> 356 axes = plot(**ppcplot_kwargs)
    357 return axes

/opt/conda/lib/python3.7/site-packages/arviz/plots/backends/matplotlib/ppcplot.py in plot_ppc(ax, length_plotters, rows, cols, figsize, animated, obs_plotters, pp_plotters, predictive_dataset, pp_sample_ix, kind, alpha, colors, textsize, mean, observed, jitter, total_pp_samples, legend, labeller, group, animation_kwargs, num_pp_samples, backend_kwargs, show)
     98 backend_kwargs.setdefault("squeeze", True)
     99 if ax is None:
--> 100 fig, axes = create_axes_grid(length_plotters, rows, cols, backend_kwargs=backend_kwargs)
    101 else:
    102 axes = np.ravel(ax)

/opt/conda/lib/python3.7/site-packages/arviz/plots/backends/matplotlib/ __init__.py in create_axes_grid(length_plotters, rows, cols, backend_kwargs)
     53 backend_kwargs = {**backend_kwarg_defaults(),**backend_kwargs}
     54 
---> 55 fig, axes = subplots(rows, cols, **backend_kwargs)
     56 extra = (rows * cols) - length_plotters
     57 if extra > 0:

/opt/conda/lib/python3.7/site-packages/matplotlib/pyplot.py in subplots(nrows, ncols, sharex, sharey, squeeze, subplot_kw, gridspec_kw, **fig_kw)
   1454 axs = fig.subplots(nrows=nrows, ncols=ncols, sharex=sharex, sharey=sharey,
   1455 squeeze=squeeze, subplot_kw=subplot_kw,
-> 1456 gridspec_kw=gridspec_kw)
   1457 return fig, axs
   1458 

/opt/conda/lib/python3.7/site-packages/matplotlib/figure.py in subplots(self, nrows, ncols, sharex, sharey, squeeze, subplot_kw, gridspec_kw)
    894 if gridspec_kw is None:
    895 gridspec_kw = {}
--> 896 gs = self.add_gridspec(nrows, ncols, figure=self, **gridspec_kw)
    897 axs = gs.subplots(sharex=sharex, sharey=sharey, squeeze=squeeze,
    898 subplot_kw=subplot_kw)

/opt/conda/lib/python3.7/site-packages/matplotlib/figure.py in add_gridspec(self, nrows, ncols, **kwargs)
   1445 
   1446 _ = kwargs.pop('figure', None) # pop in case user has added this...
-> 1447 gs = GridSpec(nrows=nrows, ncols=ncols, figure=self, **kwargs)
   1448 self._gridspecs.append(gs)
   1449 return gs

/opt/conda/lib/python3.7/site-packages/matplotlib/gridspec.py in __init__ (self, nrows, ncols, figure, left, bottom, right, top, wspace, hspace, width_ratios, height_ratios)
    385 super(). __init__ (nrows, ncols,
    386 width_ratios=width_ratios,
--> 387 height_ratios=height_ratios)
    388 
    389 _AllowedKeys = ["left", "bottom", "right", "top", "wspace", "hspace"]

/opt/conda/lib/python3.7/site-packages/matplotlib/gridspec.py in __init__ (self, nrows, ncols, height_ratios, width_ratios)
     51 if not isinstance(ncols, Integral) or ncols <= 0:
     52 raise ValueError(
---> 53 f"Number of columns must be a positive integer, not {ncols!r}")
     54 self._nrows, self._ncols = nrows, ncols
     55 self.set_height_ratios(height_ratios)

ValueError: Number of columns must be a positive integer, not 0

```

`NUTRITION` is in the `glbl_bus_ln_desc` coordinate that is near the top of the arviz object but when I put that in the coordinate argument, the error states I only can use `predicted_eaches_dim_0`.

It looks as if I have everything I want in the object, but accessing it continues to be an issue.

Do you see what I’m doing wrong?

---

_[View the full topic](https://discourse.pymc.io/t/how-do-i-assign-coords-to-do-a-ppc-for-specific-groups-in-my-data/12297)._
