When I define a pm.Binomial and the parameter n receives a list of values, does metropolis define n as a constant or a random variable? How does he behave? Because from my understanding, if n is a random variable, the space to be covered can be very large according to the problem. I couldn’t find this information anywhere.
For example :
observation = pm.Binomial(“obs”, p = p, n = list_blue_balls, observed= list_all_balls)
trace = pm.sample(18000,step=pm.Metropolis())
1 Like
Though are certainly other uses, I think the primary intention is so that you can model data that consist of multiple sequences, each of which has can (but doesn’t necessarily need) its own n
, it’s own p
, and in the case of an observed variable, it’s own k
(number of successes).
flips = [0, 3, 6, 600]
successes = np.multiply(2/3, flips)
coords = {
"coin": list(range(len(successes)))
}
with pm.Model(coords=coords) as model:
ps = pm.Beta('ps',
alpha=1,
beta=1,
dims='coin')
observation = pm.Binomial('like',
p=ps,
n=flips,
observed=successes)
idata = pm.sample(return_inferencedata=True)
print(idata.posterior.mean(dim=['chain','draw']))
This yields:
<xarray.Dataset>
Dimensions: (coin: 4)
Coordinates:
* coin (coin) int64 0 1 2 3
Data variables:
ps (coin) float64 0.4996 0.5985 0.627 0.6666
2 Likes
Note that You can also assign a random variable to n
- it behaves just as any random variable that the Binomial likelihood will conditioned on n
(sample/proposal in the context of MCMC). There are some demonstrations in All-that-likelihood-with-PyMC3/Likelihood_visual_demo.ipynb at master · junpenglao/All-that-likelihood-with-PyMC3 · GitHub