I’m trying to define a prior over adjacency matrices for directed unweighted graphs. Each graph is represented as a binary matrix; I tried to sample matrices as Bernoulli RV with shape (N,N)
.
Using p
different than 0.5 gives sensible results, for example:
with pm.Model() as m:
a = pm.Bernoulli('a',p=0.49,shape=(4,4))
trace = pm.sample()
trace['a']
gives:
array([[[0, 1, 1, 1],
[0, 1, 1, 0],
[0, 0, 0, 0],
[0, 0, 1, 0]],
[[1, 0, 0, 0],
[1, 0, 0, 1],
[1, 1, 1, 1],
[1, 1, 0, 1]],
[[0, 1, 1, 1],
[0, 1, 1, 0],
[0, 0, 0, 0],
[0, 0, 1, 0]],
...,
[[0, 0, 1, 0],
[0, 1, 0, 0],
[1, 1, 1, 1],
[1, 0, 1, 1]],
[[1, 1, 0, 1],
[1, 0, 1, 1],
[0, 0, 0, 0],
[0, 1, 0, 0]],
[[0, 0, 1, 0],
[0, 1, 0, 0],
[1, 1, 1, 1],
[1, 0, 1, 1]]])
However, by setting p=0.5
the sampling “gets stuck” and only gives two unique samples:
with pm.Model() as m:
a = pm.Bernoulli('a',p=0.5,shape=(4,4))
trace = pm.sample()
trace['a']
yields:
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
...,
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]],
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]])
Is this a bug?