I want to use the custom multivariate log density function logp_alpha
via pymc.DensityDist
in a pymc
model.
How can I make pymc.DensityDist
work with logp = logp_alpha
, a 6-dimensional random variable alpha
, the scalar-valued random variable a
, an (numpy.ndarray
) array A
of size (6,6)
, and an array B
of size (3,1)
in the code below?
Running the code leads to the error message
TypeError: Cannot convert Type TensorType(float64, ()) (of Variable Alloc.0) into Type TensorType(float64, (6, 6)). You can try to manually convert Alloc.0 into a TensorType(float64, (6, 6)).
which seems to indicate that I have to pass the dimensions of alpha
(and possibly A
and B
) to pymc.DensityDist
. How can I do that?
import pytensor.tensor as pt
import pymc as pm
def logp_alpha(value, a, A, B):
log_det = pt.sum(pt.log(B) - pt.log(a))
C = A / a
logp_alpha_out = 0.5 * log_det - 0.5 * value.T.dot(C).dot(value)
return logp_alpha_out
m = pm.Model()
with m:
a = pm.InverseGamma("a", 1, 0.001)
alpha = pm.DensityDist("alpha", a, A, B, logp = logp_alpha)
with m:
data = pm.sample()