def validate_simple_model(N_rep=20, simulation=good_simple_sim): q = pandas.DataFrame() for n in range(N_rep): # simulate data and fit model d, m = simulation() # tally posterior quantiles results = {} for var in 'inv_sigma_sq mu inv_tau_sq mu_by_tau alpha_bar alpha_bar_by_sigma'.split(): stats = m[var].stats() results[var] = [(d[var] > m[var].trace()).sum() / float(stats['n'])] stats = m['alpha'].stats() for j, alpha_j in enumerate(d['alpha']): results['alpha_%d'%j] = [(alpha_j > m['alpha'].trace()[:,j]).sum() / float(stats['n'])] stats = m['alpha_by_sigma'].stats() for j, alpha_j_by_sigma in enumerate(d['alpha_by_sigma']): results['alpha_%d_by_sigma'%j] = [(alpha_j_by_sigma > m['alpha_by_sigma'].trace()[:,j]).sum() / float(stats['n'])] q = q.append(pandas.DataFrame(results, index=['q_rep_%d'%n])) results = validation_transform(q) graphics.scalar_validation_statistics( results, [[r'$\mu/\tau$', ['mu_by_tau']], [r'$\sigma^{-2}$', ['inv_sigma_sq']], [r'$\tau^{-2}$', ['inv_tau_sq']], [r'$\mu$', ['mu']], [r'$\alpha/\sigma$', results.filter(regex='alpha_\d_by_sigma').columns], [r'$\alpha$', results.filter(regex='alpha_\d$').columns]]) return results
def validate_complex_model(N_rep=20, simulation=good_complex_sim): q = pandas.DataFrame() for n in range(N_rep): # simulate data and fit model d, m = simulation() # tally posterior quantiles results = {} for var in 'eta_cross_eta eta delta_mu delta_beta beta gamma mu sigma'.split(): for j, var_j in enumerate(d[var]): stats = m[var].stats() results['%s_%d'%(var, j)] = [(var_j > m[var].trace()[:,j]).sum() / float(stats['n'])] # add y_mis k = 0 for j, n_j in enumerate(d['n']): for i in range(n_j): if pl.isnan(m['y'][j][i]): results['y_mis_%d'%k] = [(d['y'][j][i] > m['y_pred'][j].trace()[:,i]).sum() / float(stats['n'])] k += 1 q = q.append(pandas.DataFrame(results, index=['q_rep_%d'%n])) results = validation_transform(q) # display results graphics.scalar_validation_statistics( results, [[r'$y_{mis}$', results.filter(like='y_mis').columns], [r'$\eta\times\eta$', results.filter(like='eta_cross_eta').columns], [r'$\eta$', results.filter(regex='eta_\d').columns], [r'$\delta_\mu$', results.filter(like='delta_mu').columns], [r'$\delta_\beta$', results.filter(like='delta_beta').columns], [r'$\sigma$', results.filter(like='sigma').columns], [r'$\beta$', results.filter(regex='^beta').columns], [r'$\gamma$', results.filter(regex='gamma').columns], [r'$\mu$', results.filter(regex='^mu').columns], ]) return results