I have a model with 6 parameters with uniform priors:
parameter1 = pm.Uniform('parameter1',0.01,1)
parameter2 = pm.Uniform('parameter2',0,2)
parameter3 = pm.DiscreteUniform('parameter3',1,50)
parameter4 = pm.Uniform('parameter4',0,1.75)
parameter5 = pm.Uniform('parameter5', 0.005, 0.25)
parameter6 = pm.Uniform('parameter6', 0.005, 0.15)
I have a custom likelihood function that returns log likelihood value:
@pm.potential
def log_l(experiment=experiment,parameter1=parameter1,parameter2=parameter2,parameter3=parameter3,parameter4=parameter4,parameter5=parameter5,parameter6=parameter6):
if parameter5<parameter4:
return -np.inf
parameters=[parameter1, parameter2, parameter3]
log_l=calculate_probability(parameters, t_m, tol, n_integration, parameter4, parameter5, parameter6, experiment.decon_all[freq,:,:])
return log_l
Where calculate_probability
is a my function that returns log likelihood for this model given parameter values and observed data.
For some reason when MCMC samples:
model = pm.MCMC([parameter1,parameter2,parameter3,parameter4,parameter5,parameter6,log_l])
model.sample(100)
and the programme satisfies the if condition (parameter5<parameter4
) I get this error:
pymc.Node.ZeroProbability: Potential log_l forbids its parents' current values
I was wondering if anyone knows what I may be doing wrong?