Sorry, still very green learning how to use PYMC3. I know this has been asked before but after reading through quite a few posts, I still cannot figure out why I am getting the following error:
Traceback (most recent call last): File "/usr/local/lib/python3.7/dist-packages/pymc3/parallel_sampling.py", line 137, in run self._start_loop() File "/usr/local/lib/python3.7/dist-packages/pymc3/parallel_sampling.py", line 191, in _start_loop point, stats = self._compute_point() File "/usr/local/lib/python3.7/dist-packages/pymc3/parallel_sampling.py", line 216, in _compute_point point, stats = self._step_method.step(self._point) File "/usr/local/lib/python3.7/dist-packages/pymc3/step_methods/arraystep.py", line 276, in step apoint, stats = self.astep(array) File "/usr/local/lib/python3.7/dist-packages/pymc3/step_methods/hmc/base_hmc.py", line 147, in astep self.potential.raise_ok(self._logp_dlogp_func._ordering.vmap) File "/usr/local/lib/python3.7/dist-packages/pymc3/step_methods/hmc/quadpotential.py", line 272, in raise_ok raise ValueError("\n".join(errmsg)) ValueError: Mass matrix contains zeros on the diagonal. The derivative of RV `a_bin`.ravel() is zero. The derivative of RV `a_bin`.ravel() is zero. The derivative of RV `a_bin`.ravel() is zero. The derivative of RV `sd_bin_log__`.ravel() is zero. The derivative of RV `b_up_log__`.ravel() is zero.
This the model I am trying to run is:
with pm.Model() as _model: a = pm.Normal('a', mu=3, sd=.75) b_up = pm.Exponential('b_up', 1) b_down = pm.Exponential('b_down', 1/0.5) swp = pm.Normal('swp', 1, sigma=7) sd_bin = pm.Exponential('sd_bin', 3) a_bin = pm.Normal('a_bin', 0, sd_bin, shape=num_bins) sigma = pm.Exponential('sigma', 1) def get_mu(price): price_sc = price / 100 _b = tt.switch( tt.lt(price_sc, swp), b_up, # rise -b_down # fall ) return a + _b * (price_sc - swp) # scaled for: log(value) / price ratio mu_i = get_mu(prices) + a_bin[bin_index] lk = pm.Lognormal.dist(mu_i, sigma) pm.Potential('obs', freq*lk.logp(values)) post = pm.sample(tune=5000, draws=1000, chains=2)
To debug, I’ve tried:
- Setting the priors to static numbers and then adding in priors as distributions one at a time. I end up just getting the above error message with different RVs
- Smoothing the piecewise function
- Doing prior predictive sampling to make sure the mu_i values are reasonable
- Adjusting the
initsetting in the
- Removing the hierarchical component
Not sure what to try next. Again, not sure exactly if what I am doing is even reasonable for the model definition. Any help would be greatly appreciated. Thank you!!