I am following the pymc3 page on how to use a “blackbox” function and think that it is working properly, because when I use find_MAP() it gives me back a pretty accurate value based on the simulated data I put in. But when I swap out pm.sample() instead of pm.find_MAP(), then my posterior simply returns the uniform prior I put in. I have tried changing ‘target_accept’ and ‘step_size’ and increasing ‘tune’, but I keep getting back the uniform prior. Could someone let me know how I could fix this problem?
with pm.Model():
# uniform prior
sh = pm.Uniform('sh', lower=0., upper=30.)
# convert to a tensor vector
theta = tt.as_tensor_variable([sh])
# use a custom blackbox function (use a lamdba function to "call" the Op)
pm.DensityDist('likelihood', lambda v: logl(v), observed={'v': theta})
map_est = pm.find_MAP()
trace = pm.sample(500, tune=1000, chains=2,
nuts_kwargs={'target_accept': 0.95})
print(map_est['sh']) # correctly returns a value of 21.9 (ground truth = 22)
pm.summary(trace) # returns a mean of 15, with HPD betw 0 and 28