Hi!
I’m trying to infer the values of proportions p
, where my observations are integer counts of subsets q
of two or more of those proportions.
import arviz as az
import numpy as np
import pymc as pm
basic_model = pm.Model()
with basic_model:
conc = 1.0
p = pm.Dirichlet("p", a=3 * [conc])
q1 = pm.Dirichlet("q1", a=2 * [conc])
q2 = pm.Dirichlet("q2", a=2 * [conc])
q3 = pm.Dirichlet("q3", a=2 * [conc])
pm.Multinomial("m1", p=q1, n=15, observed=[5, 10])
pm.Multinomial("m2", p=q2, n=22, observed=[11, 11])
pm.Multinomial("m3", p=q3, n=40, observed=[32, 8])
eq = [
pm.math.eq(
q1[0],
p[0] / (p[0] + p[1]),
),
pm.math.eq(
q1[1],
p[1] / (p[0] + p[1]),
),
pm.math.eq(
q2[0],
p[1] / (p[1] + p[2]),
),
pm.math.eq(
q2[1],
p[2] / (p[1] + p[2]),
),
pm.math.eq(
q3[0],
(p[0] + p[1]) / (p[0] + p[1] + p[2]),
),
pm.math.eq(
q3[1],
p[2] / (p[0] + p[1] + p[2]),
),
]
for i, e in enumerate(eq):
pm.Potential(
f"constraint{i}",
pm.math.switch(
e,
0,
-np.inf,
),
)
result = pm.sample(draws=1000, tune=1000, return_inferencedata=True)
In this example, each of the subsets is modelled as a multinomial with its own Dirichlet prior. I try to provide the relationship between the overall p
mixture and the q
subsets using equality constraints; notably, the q3
subset has its first component being a sum of two p
components. This results in the following exception:
File "/data/jeff/mambaforge3/envs/happyjeff/lib/python3.8/site-packages/aesara/tensor/elemwise.py", line 621, in transform
if isinstance(r.type, (NullType, DisconnectedType)):
AttributeError: 'float' object has no attribute 'type'
I suspect I’m going about this in completely the wrong way. What is a better approach?
Thanks in advance!