pymc-devs / pymc-devs/pymc-examples

nb: GLM Poisson Regression (error)

Open
#512 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
398
Forks
325
Avg merge
9d 15m
Merged PRs (30d)
1

Description

Notebook title: GLM: Poisson Regression
Notebook url: https://www.pymc.io/projects/examples/en/latest/generalized_linear_models/GLM-poisson-regression.html

Issue description

# code, cell 18
inf_fish_alt = model.fit()

short Error:

TypeError: You are calling an Aesara function with PyTensor variables.
Starting with PyMC 5.0, Aesara was replaced by PyTensor (see https://www.pymc.io/blog/pytensor_announcement.html).
Replace your import of aesara.tensor with pytensor.tensor.

long Error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[18], line 1
----> 1 inf_fish_alt = model.fit()

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/bambi/models.py:267, in Model.fit(self, draws, tune, discard_tuned_samples, omit_offsets, include_mean, inference_method, init, n_init, chains, cores, random_seed, **kwargs)
    264         inference_method = method
    266 if not self.built:
--> 267     self.build()
    269 # Tell user which event is being modeled
    270 if isinstance(self.family, univariate.Bernoulli):

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/bambi/models.py:298, in Model.build(self)
    293 """Set up the model for sampling/fitting.
    294 
    295 Creates an instance of the underlying PyMC model and adds all the necessary terms to it.
    296 """
    297 self.backend = PyMCModel()
--> 298 self.backend.build(self)
    299 self.built = True

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/bambi/backend/pymc.py:69, in PyMCModel.build(self, spec)
     67 self._build_intercept(spec)
     68 self._build_offsets(spec)
---> 69 self._build_common_terms(spec)
     70 self._build_group_specific_terms(spec)
     71 self._build_response(spec)

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/bambi/backend/pymc.py:160, in PyMCModel._build_common_terms(self, spec)
    157     columns.append(data)
    159 # Column vector of coefficients and design matrix
--> 160 coefs = at.concatenate(coefs)
    161 data = np.hstack(columns)
    163 # If there's an intercept, center the data
    164 # Also store the design matrix without the intercept to uncenter the intercept later

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/aesara/tensor/basic.py:2820, in concatenate(tensor_list, axis)
   2813 if not isinstance(tensor_list, (tuple, list)):
   2814     raise TypeError(
   2815         "The 'tensors' argument must be either a tuple "
   2816         "or a list, make sure you did not forget () or [] around "
   2817         "arguments of concatenate.",
   2818         tensor_list,
   2819     )
-> 2820 return join(axis, *tensor_list)

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/aesara/tensor/basic.py:2645, in join(axis, *tensors_list)
   2643     return tensors_list[0]
   2644 else:
-> 2645     return join_(axis, *tensors_list)

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/aesara/graph/op.py:297, in Op.__call__(self, *inputs, **kwargs)
    255 r"""Construct an `Apply` node using :meth:`Op.make_node` and return its outputs.
    256 
    257 This method is just a wrapper around :meth:`Op.make_node`.
   (...)
    294 
    295 """
    296 return_list = kwargs.pop("return_list", False)
--> 297 node = self.make_node(*inputs, **kwargs)
    299 if config.compute_test_value != "off":
    300     compute_test_value(node)

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/aesara/tensor/basic.py:2369, in Join.make_node(self, axis, *tensors)
   2366 if not tensors:
   2367     raise ValueError("Cannot join an empty list of tensors")
-> 2369 tensors = [as_tensor_variable(x) for x in tensors]
   2370 out_dtype = aes.upcast(*[x.type.dtype for x in tensors])
   2372 if not builtins.all(targs.type.ndim for targs in tensors):

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/aesara/tensor/basic.py:2369, in <listcomp>(.0)
   2366 if not tensors:
   2367     raise ValueError("Cannot join an empty list of tensors")
-> 2369 tensors = [as_tensor_variable(x) for x in tensors]
   2370 out_dtype = aes.upcast(*[x.type.dtype for x in tensors])
   2372 if not builtins.all(targs.type.ndim for targs in tensors):

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/aesara/tensor/__init__.py:42, in as_tensor_variable(x, name, ndim, **kwargs)
     10 def as_tensor_variable(
     11     x: Any, name: Optional[str] = None, ndim: Optional[int] = None, **kwargs
     12 ) -> "TensorVariable":
     13     """Convert `x` into an equivalent `TensorVariable`.
     14 
     15     This function can be used to turn ndarrays, numbers, `ScalarType` instances,
   (...)
     40 
     41     """
---> 42     return _as_tensor_variable(x, name, ndim, **kwargs)

File ~/miniforge3/envs/pymc-ex/lib/python3.10/functools.py:889, in singledispatch.<locals>.wrapper(*args, **kw)
    885 if not args:
    886     raise TypeError(f'{funcname} requires at least '
    887                     '1 positional argument')
--> 889 return dispatch(args[0].__class__)(*args, **kw)

File ~/miniforge3/envs/pymc-ex/lib/python3.10/site-packages/pymc/pytensorf.py:99, in raise_informative_error(*args, **kwargs)
     97 @_as_tensor_variable_aesara.register(TensorVariable)
     98 def raise_informative_error(*args, **kwargs):
---> 99     raise TypeError(
    100         "You are calling an Aesara function with PyTensor variables.\n"
    101         "Starting with PyMC 5.0, Aesara was replaced by PyTensor (see https://www.pymc.io/blog/pytensor_announcement.html).\n"
    102         "Replace your import of aesara.tensor with pytensor.tensor.",
    103     )

TypeError: You are calling an Aesara function with PyTensor variables.
Starting with PyMC 5.0, Aesara was replaced by PyTensor (see https://www.pymc.io/blog/pytensor_announcement.html).
Replace your import of aesara.tensor with pytensor.tensor.

Expected output

If applicable, describe what should happen instead.

Proposed solution

If applicable, explain possible solutions and workarounds.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Open the GLM: Poisson Regression notebook and inspect the imports and cell 18 where model.fit() fails. Reproduce the example in the current PyMC environment, trace the Aesara/PyTensor mismatch, and verify that the notebook runs through fitting without the TypeError.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
machine-learning
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.