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()[5] is zero.
The derivative of RV `a_bin`.ravel()[6] is zero.
The derivative of RV `a_bin`.ravel()[7] is zero.
The derivative of RV `sd_bin_log__`.ravel()[0] is zero.
The derivative of RV `b_up_log__`.ravel()[0] 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
init
setting in thesample
method - 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!!