Can anyone help me understand what’s going on with sampling here?
I used a pretty vanilla test case to try out new PyMC. But, it’s converged on wrong values. They’re off by a scale of 100-1000…
Can anyone help me understand what’s going on with sampling here?
I used a pretty vanilla test case to try out new PyMC. But, it’s converged on wrong values. They’re off by a scale of 100-1000…
You need to either treat the observations as a set:
lik_ctrl = pm.Binomial('likelihood',p=theta_ctrl, n=len(ris_test), observed=np.sum(ris_ctrl))
Or, equivalently, use treat each one individually:
lik_ctrl = pm.Bernoulli('likelihood',p=theta_ctrl, observed=ris_ctrl)
Right now, you are trying to get a set of len(ris_test)
flips to reproduce an observed 0, then a set of len(ris_test)
flips to reproduce an observed 1, etc.
W/ option 1:TypeError: Binomial.dist() missing 1 required positional argument: 'n'
And option 2: It did work!
Still, why is supplying a vector to PyMC not working? Strange that n is required…I suppose it doesn’t know that it has received a vector for some reason.
First one works for me. n
is defined as n=len(ris_test)
. Are you sure you pasted that in correctly?
I think it is working, it’s just not doing what you expected/wanted. Binomial data is expected to be counts. If your observations are [0,1,1,0,0,1,1]
, then those ones and zeros are treated as counts of heads generated by sequences of flips, not as the outcomes of individual flips. PyMC doesn’t know that you want to observe the sum.
Ah okay, I used Bernoulli instead of Binomial with the vector input and it worked. Sounds like if I want to pass a vector to Binomial, I’d need to supply two: one for k and one for n.