Thanks very much for the answer @ricardoV94 . I installed pymc4 and tried to follow your example. This is my code (leaving for the time being the last two lines):
def schechter_theano(logL, alpha, n42, a, b):
L = 10. ** logL
schechter = 10 ** n42 * (L / L0) ** (-alpha) * T.exp(- L / Lstar) * (L / Lstar)
selfunc = 0.5 + T.erf(a * (logL - b)) + 0.5
totmod = selfunc * schechter
return totmod
def logp(value, alpha, n42, a, b):
return pm.logp(schechter_theano, value)
with pm.Model() as model:
alpha = pm.Uniform('alpha', lower=0.5, upper=4.0)
n42 = pm.Uniform('n42', lower=0, upper=6)
a = pm.Uniform('a', lower=1, upper=8)
b = pm.Uniform('b', lower=40, upper=43)
obs = pm.DensityDist('obs', alpha, n42, a, b, logp=logp, observed=realiz)
trace = pm.sample(return_inferencedata=True)
But this gives me the following error:
File ~/opt/anaconda3/envs/pymc4/lib/python3.10/site-packages/pymc/distributions/logprob.py:285, in logp(rv, value)
282 def logp(rv: TensorVariable, value) -> TensorVariable:
283 """Return the log-probability graph of a Random Variable"""
--> 285 value = at.as_tensor_variable(value, dtype=rv.dtype)
286 try:
287 return logp_aeppl(rv, value)
AttributeError: 'function' object has no attribute 'dtype'
What am I doing wrong?