Thanks, it was indeed an issue with the PyMC version. After upgrading to the latest release on git, the following is working:
import pymc as pm
import numpy as np
import scipy as sp
import arviz as az
import matplotlib.pyplot as plt
def logp_lognormal(value, shape, loc, scale):
return -np.log((value-loc)/scale)**2 / (2*shape**2) - np.log(shape*((value-loc)/scale)*np.sqrt(2*np.pi))
def rand_lognormal(shape, loc, scale, rng=None, size=None):
return sp.stats.lognorm.rvs(shape, loc=loc, scale=scale)
def logp_genpareto(value, shape, loc, scale):
return -(shape+1)*np.log1p(shape*(data-loc)/scale)/shape
def rand_genpareto(shape, loc, scale, rng=None, size=None):
return sp.stats.genpareto.rvs(shape, loc=loc, scale=scale)
with pm.Model() as model:
shape = pm.Uniform('shape', lower=1, upper=3)
loc = pm.Uniform('loc', lower=4000, upper=5000)
scale = pm.Uniform('scale', lower=6000, upper=10000)
lognorm = pm.CustomDist('likelihood', shape, loc, scale, logp=logp_genpareto, observed=data, random=rand_genpareto)
idata = pm.sample(4000, tune=2000, return_inferencedata=True, chains=1)
idata.extend(pm.sample_posterior_predictive(idata,random_seed=42))