Hi,
I’m trying to get my head round PyMC3 in order to port some existing code written (and working) for PyMC. I need to create a custom distribution that is a stochastic subclass.
The original PyMC code used functions such as pymc.valuewrapper() and pymc.new_dist_class(). Here is a summary of the PyMC code:
def a_logp(...):
...
return something
def a_random(...):
...
return something
dtype = np.float64
docstr = "mydist"
parent_names = ["a", "b"]
parents_default = {"a": 0, "b": 1, "value": 0.5}
wrapped_logp_partial_gradients = {}
logp = pymc.valuewrapper(a_logp)
mv = False
UniformNonzero = pymc.new_dist_class(
dtype,
node_name,
parent_names,
parents_default,
docstr,
logp,
a_random,
mv,
wrapped_logp_partial_gradients,
)
My questions are, does PyMC3 support equivalent functionality to do this? I see PyMC3 supports a function called DensityDist() for creating custom distributions using logp() and random() functions. But how do I define the parent information etc? Or is it I have to dig deeper, e.g. into Theano? I would be very grateful if someone could just point in the right direction.