import math
import random
import numpy as np
import pandas as pd
# import graphviz
# from pymc3 import model_to_graphviz
import pymc3 as pm
from pymc3 import Model, sample, Beta, Binomial, Exponential, Uniform, summary, plot_posterior, model_to_graphviz, Deterministic
import matplotlib.pyplot as plt
# import os
# os.environ["PATH"] += os.pathsep + 'C:\Program Files\Python37\Lib\site-packages\graphviz\dot.py'
d = pd.read_table("rattumor.txt", sep = " ")
d = d.iloc[:,:2]
d
d.describe()
A naive estimate of $\theta_j$ is $\hat{\theta_j}=y_j/n_j$.
Histogram of $\hat{\theta_j}$:
plt.hist(d.y/d.N, range = (0,1), bins = 18, density=True)
plt.title("Histogram of naive estimate")
plt.show
with Model() as model1:
# Priors
alpha = Exponential('alpha', 0.001)
beta = Exponential('beta', 0.001)
theta = Beta('theta', alpha=alpha, beta=beta, shape=71)
# Data likelihood
y_like = Binomial('y_like', n=d.N, p=theta, observed=d.y)
random.seed(100)
with model1:
trace1 = sample(100, tune=100)
summary(trace1)
plot_posterior(trace1['alpha'])
plot_posterior(trace1['beta'])
alpha = trace1.get_values(varname='alpha')
beta = trace1.get_values(varname='beta')
plt.scatter(alpha, beta)
plt.xlabel('alpha')
plt.ylabel('beta')
plt.show()
plt.scatter(np.log(alpha/beta), np.log(alpha+beta))
plt.xlabel('log(alpha/beta)')
plt.ylabel('log(alpha+beta)')
plt.show()
with Model() as model2:
phi1 = Uniform('phi1', lower=0, upper=1)
phi2 = Uniform('phi2', lower=0, upper=1000)
alpha = Deterministic('alpha', phi1 / (phi2**2))
beta = Deterministic('beta', (1-phi1) / phi2**2)
theta = Beta('theta', alpha=alpha, beta=beta, shape=71)
# Data likelihood
y_like = Binomial('y_like', n=d.N, p=theta, observed=d.y)
random.seed(100)
with model2:
trace2 = sample(100, tune=100)
summary(trace2)
plot_posterior(trace2['alpha'])
plot_posterior(trace2['beta'])
alpha2 = trace2.get_values(varname='alpha')
beta2 = trace2.get_values(varname='beta')
plt.scatter(np.log(alpha2/beta2), np.log(alpha2+beta2))
plt.xlabel('log(alpha/beta)')
plt.ylabel('log(alpha+beta)')
plt.show()