# Getting az.compare to work in 4.2.0

**URL:** <https://discourse.pymc.io/t/getting-az-compare-to-work-in-4-2-0/10472>\
**Category:** v5\
**Tags:** arviz\
**Created:** [September 26, 2022, 12:25pm UTC](https://discourse.pymc.io/t/getting-az-compare-to-work-in-4-2-0/10472 "2022-09-26T12:25:38Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![spdrnl](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/spdrnl/32/5681_2.png) [@spdrnl](https://discourse.pymc.io/u/spdrnl)\
**Post date:** [September 26, 2022, 12:25pm UTC](https://discourse.pymc.io/t/getting-az-compare-to-work-in-4-2-0/10472/1 "2022-09-26T12:25:38Z")

</div>

Hi,

I am new to PyMC, and like to API a lot: I find it more intuitive than for example NumPyro. I am hitting a snag though at the moment when using az.compare in 4.2.0.

I created a minimal example below. I tried installing pymc 4.2.0 using both pip and anaconda, and tried to add log likelihood to the inference data separately.

How could I make this work?

Cheers,

Sanne

```python

def setup_model(x, y, intercept=True):
    model = pm.Model()

    with model:    
        x = pm.ConstantData('x', x)
        y = pm.ConstantData('y', y)
        
        if intercept: α = pm.Normal("α", 0, 1)
        else: α = 0
        
        β = pm.Normal("β", 0, 1)
        σ = pm.HalfNormal("σ", 1)
        
        μ = pm.Deterministic('μ', α + β * x)
            
        obs = pm.Normal("obs", μ, σ, observed=y)
        
    return model

x = 10 * np.random.uniform(size=100) - 5
e = np.random.normal(0, 1, size=100)
y = 2 * x + e

trace_1 = pm.sample(model=setup_model(x, y, True))
trace_2 = pm.sample(model=setup_model(x, y, False))
    
df_comp_loo = az.compare({"1": trace_1, "2": trace_2})
df_comp_loo

```

The error is:

```auto
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
File ~/miniforge3/envs/pymc-420/lib/python3.10/site-packages/pandas/core/indexes/base.py:3800, in Index.get_loc(self, key, method, tolerance)
   3799 try:
-> 3800 return self._engine.get_loc(casted_key)
   3801 except KeyError as err:

File ~/miniforge3/envs/pymc-420/lib/python3.10/site-packages/pandas/_libs/index.pyx:138, in pandas._libs.index.IndexEngine.get_loc()

File ~/miniforge3/envs/pymc-420/lib/python3.10/site-packages/pandas/_libs/index.pyx:144, in pandas._libs.index.IndexEngine.get_loc()

TypeError: 'slice(None, None, None)' is an invalid key

During handling of the above exception, another exception occurred:

InvalidIndexError Traceback (most recent call last)
Cell In [7], line 32
     29 trace2 = pm.sample(1000, return_inferencedata=False)
     30 idata2 = pm.to_inference_data(trace=trace2, log_likelihood=True)
---> 32 df_comp_loo = az.compare({"1": idata2, "2": idata2})
     33 df_comp_loo

File ~/miniforge3/envs/pymc-420/lib/python3.10/site-packages/arviz/stats/stats.py:306, in compare(compare_dict, ic, method, b_samples, alpha, seed, scale, var_name)
    304 std_err = ses.loc[val]
    305 weight = weights[idx]
--> 306 df_comp.at[val] = (
    307 idx,
    308 res[ic],
    309 res[p_ic],
    310 d_ic,
    311 weight,
    312 std_err,
    313 d_std_err,
    314 res["warning"],
    315 res[scale_col],
    316 )
    318 df_comp["rank"] = df_comp["rank"].astype(int)
    319 df_comp["warning"] = df_comp["warning"].astype(bool)

File ~/miniforge3/envs/pymc-420/lib/python3.10/site-packages/pandas/core/indexing.py:2438, in _AtIndexer. __setitem__ (self, key, value)
   2435 self.obj.loc[key] = value
   2436 return
-> 2438 return super(). __setitem__ (key, value)

File ~/miniforge3/envs/pymc-420/lib/python3.10/site-packages/pandas/core/indexing.py:2393, in _ScalarAccessIndexer. __setitem__ (self, key, value)
   2390 if len(key) != self.ndim:
   2391 raise ValueError("Not enough indexers for scalar access (setting)!")
-> 2393 self.obj._set_value(*key, value=value, takeable=self._takeable)

File ~/miniforge3/envs/pymc-420/lib/python3.10/site-packages/pandas/core/frame.py:4208, in DataFrame._set_value(self, index, col, value, takeable)
   4206 iindex = cast(int, index)
   4207 else:
-> 4208 icol = self.columns.get_loc(col)
   4209 iindex = self.index.get_loc(index)
   4210 self._mgr.column_setitem(icol, iindex, value)

File ~/miniforge3/envs/pymc-420/lib/python3.10/site-packages/pandas/core/indexes/base.py:3807, in Index.get_loc(self, key, method, tolerance)
   3802 raise KeyError(key) from err
   3803 except TypeError:
   3804 # If we have a listlike key, _check_indexing_error will raise
   3805 # InvalidIndexError. Otherwise we fall through and re-raise
   3806 # the TypeError.
-> 3807 self._check_indexing_error(key)
   3808 raise
   3810 # GH#42269

File ~/miniforge3/envs/pymc-420/lib/python3.10/site-packages/pandas/core/indexes/base.py:5963, in Index._check_indexing_error(self, key)
   5959 def _check_indexing_error(self, key):
   5960 if not is_scalar(key):
   5961 # if key is not a scalar, directly raise an error (the code below
   5962 # would convert to numpy arrays and raise later any way) - GH29926
-> 5963 raise InvalidIndexError(key)

InvalidIndexError: slice(None, None, None)

```

---

<div class="post-metadata">

**Author:** ![spdrnl](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.pymc.io/spdrnl/32/5681_2.png) [@spdrnl](https://discourse.pymc.io/u/spdrnl)\
**Post date:** [September 28, 2022, 9:09am UTC](https://discourse.pymc.io/t/getting-az-compare-to-work-in-4-2-0/10472/2 "2022-09-28T09:09:52Z")

</div>

This is an arviz issue. The bug and the remedy can be found here, install the latest dev version: [Compare raises InvalidIndexError: slice(None, None, None) when provided with dictionary of inference data objects · Issue #2120 · arviz-devs/arviz · GitHub](https://github.com/arviz-devs/arviz/issues/2120)
