In [1]:
import numpy as np
import matplotlib.pylab as plt
import pymc3 as pm
import seaborn as sns
from warnings import filterwarnings
filterwarnings('ignore')
sns.set_style('whitegrid')
print('Running on PyMC3 v{}'.format(pm.__version__))
%matplotlib inline
In [5]:
totals = np.array([10123, 11098, 9879, 10200, 9898, 9987])
amounts = np.array([800, 900, 1100, 1019, 879, 860])
In [6]:
p_obs = amounts/totals
In [7]:
np.allclose(totals * p_obs, amounts)
Out[7]:
In [8]:
with pm.Model() as model:
a = pm.HalfNormal('a', .5) #0.5)
b = pm.HalfNormal('b', .5) #0.1)
p = pm.Beta("p", alpha=a, beta=b)
l = totals * p
s = pm.Poisson("spend",
mu=l,
observed=amounts
)
In [9]:
with model:
trace = pm.sample(draws=2000)
In [10]:
pm.plot_posterior(trace, varnames=["p"], ref_val=p_obs.mean())
Out[10]:
In [18]:
with model:
ppc = pm.sample_posterior_predictive(trace)
In [19]:
ppc["spend"].shape
Out[19]:
In [11]:
with pm.Model() as model2:
a = pm.HalfNormal('a', .5) #0.5)
b = pm.HalfNormal('b', .5) #0.1)
p = pm.Beta("p", alpha=a, beta=b, shape=len(p_obs))
l = totals * p
s = pm.Poisson("spend",
mu=l,
observed=amounts
)
In [12]:
with model2:
trace2 = pm.sample(draws=2000)
In [14]:
pm.plot_posterior(trace2, varnames=["p"], ref_val=p_obs);
In [15]:
with model2:
ppc2 = pm.sample_posterior_predictive(trace2)
In [17]:
ppc2["spend"].shape
Out[17]:
In [ ]: