In [37]:
import seaborn as sns
import numpy as np
import pymc3 as pm
import matplotlib.pyplot as plt
from scipy import stats
import spacepy.toolbox as tb
sns.set(font_scale=1.5)
In [2]:
bins = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
with pm.Model() as model:
p1 = pm.Poisson('p1', 10) #bins, shape=len(bins))
p2 = pm.Poisson('p2', 15) #bins, shape=len(bins))
p1_2 = pm.Deterministic('p1_2', p1/p2)
p12 = pm.Deterministic('p12', p1*p2)
trace = pm.sample(10000)
In [3]:
pm.traceplot(trace)
Out[3]:
In [4]:
pm.summary(trace)
Out[4]:
In [5]:
pm.plot_posterior(trace)
Out[5]:
In [6]:
bins = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
with pm.Model() as model:
p1 = pm.Poisson('p1', 10) #bins, shape=len(bins))
p2 = pm.Poisson('p2', 15) #bins, shape=len(bins))
p3 = pm.Poisson('p3', 21) #bins, shape=len(bins))
p1_2 = pm.Deterministic('p1_2', (p1+p3)/p2)
p12 = pm.Deterministic('p12', p1*p2/p3)
trace = pm.sample(10000)
In [7]:
pm.plot_posterior(trace)
Out[7]:
In [9]:
p1 = stats.poisson(10)
p2 = stats.poisson(15)
p3 = stats.poisson(21)
In [15]:
# p1_2 = pm.Deterministic('p1_2', (p1+p3)/p2)
# p12 = pm.Deterministic('p12', p1*p2/p3)
XX = np.arange(50)
plt.plot(XX, p1.pmf(XX))
plt.plot(XX, p2.pmf(XX))
plt.plot(XX, p3.pmf(XX))
Out[15]:
In [21]:
np.random.seed(8675309)
vals = np.random.poisson(10, size=(16*5*3))
bins = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
with pm.Model() as model:
mean = pm.Uniform('mean', 0, 100)
p_dat = pm.Poisson('p_dat', mean, shape=len(vals), observed=vals)
pmean = pm.Deterministic('pmean', p_dat.mean())
trace = pm.sample(10000)
In [22]:
pm.plot_posterior(trace)
Out[22]:
In [23]:
In [ ]:
In [ ]:
In [33]:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.special import factorial
# get poisson deviated random numbers
data = np.random.poisson(2, 1000)
# the bins should be of integer width, because poisson is an integer distribution
entries, bin_edges, patches = plt.hist(data, bins=11, range=[-0.5, 10.5], density=True)
# calculate binmiddles
bin_middles = 0.5*(bin_edges[1:] + bin_edges[:-1])
# poisson function, parameter lamb is the fit parameter
def poisson(k, lamb):
return (lamb**k/factorial(k)) * np.exp(-lamb)
# fit with curve_fit
parameters, cov_matrix = curve_fit(poisson, bin_middles, entries)
# plot poisson-deviation with fitted parameter
x_plot = np.linspace(0, 20, 1000)
plt.plot(x_plot, poisson(x_plot, *parameters), 'r-', lw=2)
Out[33]:
In [34]:
dat = np.random.poisson(10, size=(16*5*3))
sns.distplot(dat)
Out[34]:
In [35]:
entries, bin_edges = np.histogram(dat, bins=11, range=[-0.5, 30], density=True)
In [41]:
parameters, cov_matrix = curve_fit(poisson, tb.bin_edges_to_center(bin_edges), entries)
x_plot = np.linspace(0, 30, 1000)
sns.distplot(dat, bin_edges)
plt.plot(x_plot, poisson(x_plot, *parameters), 'r-', lw=2)
Out[41]:
In [44]:
cov_matrix
Out[44]:
In [47]:
dat.mean(), dat.mean()-cov_matrix[0][0]*dat.mean(), dat.mean()+cov_matrix[0][0]*dat.mean()
Out[47]:
In [42]:
bins = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
with pm.Model() as model:
mean = pm.Uniform('mean', 0, 100)
p_dat = pm.Poisson('p_dat', mean, observed=dat)
trace = pm.sample(10000)
In [43]:
pm.plot_posterior(trace)
Out[43]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: