Path: blob/master/deprecated/scripts/beta_binom_post_pred.py
1192 views
import superimport12import arviz as az3import matplotlib.pyplot as plt4import numpy as np5from scipy.special import comb, beta6from scipy.stats import binom7from scipy import stats89np.random.seed(0)1011a_prior, b_prior = 1, 11213Y = stats.bernoulli(0.7).rvs(20)1415N1, N0 = Y.sum(), len(Y) - Y.sum()1617a_post = a_prior + N118b_post = b_prior + N01920prior_pred_dist, post_pred_dist = [], []21N = 202223for k in range(N + 1):24post_pred_dist.append(comb(N, k) * beta(k + a_post, N - k + b_post) / beta(a_post, b_post))25prior_pred_dist.append(comb(N, k) * beta(k + a_prior, N - k + b_prior) / beta(a_prior, b_prior))2627fig, ax = plt.subplots()28ax.bar(np.arange(N + 1), prior_pred_dist, align='center', color='grey')29ax.set_title(f"Prior predictive distribution", fontweight='bold')30ax.set_xlim(-1, 21)31ax.set_xticks(list(range(N + 1)))32ax.set_xticklabels(list(range(N + 1)))33ax.set_ylim(0, 0.15)34ax.set_xlabel("number of success")3536fig, ax = plt.subplots()37ax.bar(np.arange(N + 1), post_pred_dist, align='center', color='grey')38ax.set_title(f"Posterior predictive distribution", fontweight='bold')39ax.set_xlim(-1, 21)40ax.set_xticks(list(range(N + 1)))41ax.set_xticklabels(list(range(N + 1)))42ax.set_ylim(0, 0.15)43ax.set_xlabel("number of success")4445fig, ax = plt.subplots()46az.plot_dist(np.random.beta(a_prior, b_prior, 10000), plot_kwargs={"color": "0.5"},47fill_kwargs={'alpha': 1})48ax.set_title("Prior distribution", fontweight='bold')49ax.set_xlim(0, 1)50ax.set_ylim(0, 4)51ax.tick_params(axis='both', pad=7)52ax.set_xlabel("θ")5354fig, ax = plt.subplots()55az.plot_dist(np.random.beta(a_post, b_post, 10000), plot_kwargs={"color": "0.5"},56fill_kwargs={'alpha': 1})57ax.set_title("Posterior distribution", fontweight='bold')58#ax.set_xlim(0, 1)59#ax.set_ylim(0, 4)60ax.tick_params(axis='both', pad=7)61ax.set_xlabel("θ")6263plt.show()646566