Fix the code, now work as expected. Thanks!
code
import pymc as pm
import matplotlib.pyplot as plt
def logp_skewt(value, nu, mu, sigma, alpha, *args, **kwargs):
return (
pm.math.log(2) +
pm.logp(pm.StudentT.dist(nu, mu=mu, sigma=sigma), value) +
pm.logcdf(pm.StudentT.dist(nu, mu=mu, sigma=sigma), alpha*value) -
pm.math.log(sigma)
)
with pm.Model() as model:
skewt = pm.CustomDist('likelihood', 1, 0, 3, -10, logp=logp_skewt)
model_trace = pm.sample(
nuts_sampler="numpyro",
draws=10_000,
chains=1,
)
samples = model_trace.posterior.likelihood.to_numpy()
plt.hist(samples[(samples < 30) & (samples > -100)], bins=100, density=True)
plt.show()