def test_autocorrelation_short_chain(): """Check that the autocorrelation reacts nicely to small sample numbers.""" problem = gaussian_problem() sampler = sample.MetropolisSampler() # optimization result = optimize.minimize(problem, n_starts=3) # sample result = sample.sample( problem, sampler=sampler, n_samples=10, result=result) # manually set burn in to chain length (only for testing!!) chain_length = result.sample_result.trace_x.shape[1] result.sample_result.burn_in = chain_length # run auto-correlation ac = sample.auto_correlation(result) assert ac is None # run effective sample size ess = sample.effective_sample_size(result) assert ess is None
def test_autocorrelation_pipeline(): """Check that the autocorrelation test works.""" problem = gaussian_problem() sampler = sample.MetropolisSampler() # optimization result = optimize.minimize(problem, n_starts=3) # sample result = sample.sample( problem, sampler=sampler, n_samples=1000, result=result) # run auto-correlation with previous geweke sample.geweke_test(result) ac1 = sample.auto_correlation(result) # run auto-correlation without previous geweke result.sample_result.burn_in = None ac2 = sample.auto_correlation(result) assert ac1 == ac2 # run effective sample size with previous geweke # and autocorrelation ess1 = sample.effective_sample_size(result) # run effective sample size without previous geweke # and autocorrelation result.sample_result.burn_in = None result.sample_result.auto_correlation = None ess2 = sample.effective_sample_size(result) assert ess1 == ess2
def test_multiple_startpoints(): problem = gaussian_problem() x0s = [np.array([0]), np.array([1])] sampler = sample.ParallelTemperingSampler( internal_sampler=sample.MetropolisSampler(), n_chains=2) result = sample.sample(problem, n_samples=10, x0=x0s, sampler=sampler) assert result.sample_result.trace_neglogpost.shape[0] == 2 assert [ result.sample_result.trace_x[0][0], result.sample_result.trace_x[1][0] ] == x0s
def test_geweke_test_unconverged(): """Check that the geweke test reacts nicely to small sample numbers.""" problem = gaussian_problem() sampler = sample.MetropolisSampler() # optimization result = optimize.minimize(problem, n_starts=3) # sample result = sample.sample( problem, sampler=sampler, n_samples=100, result=result) # run geweke test (should not fail!) sample.geweke_test(result)
def test_samples_cis(): """ Test whether :py:func:`pypesto.sample.calculate_ci_mcmc_sample` produces percentile-based credibility intervals correctly. """ # load problem problem = gaussian_problem() # set a sampler sampler = sample.MetropolisSampler() # optimization result = optimize.minimize(problem, n_starts=3, filename=None) # sample result = sample.sample(problem, sampler=sampler, n_samples=2000, result=result, filename=None) # run geweke test sample.geweke_test(result) # get converged chain converged_chain = np.asarray( result.sample_result.trace_x[0, result.sample_result.burn_in:, :]) # set confidence levels alpha_values = [0.99, 0.95, 0.68] # loop over confidence levels for alpha in alpha_values: # calculate parameter samples confidence intervals lb, ub = sample.calculate_ci_mcmc_sample(result, ci_level=alpha) # get corresponding percentiles to alpha percentiles = 100 * np.array([(1 - alpha) / 2, 1 - (1 - alpha) / 2]) # check result agreement diff = np.percentile(converged_chain, percentiles, axis=0) - [lb, ub] assert (diff == 0).all() # check if lower bound is smaller than upper bound assert (lb < ub).all() # check if dimmensions agree assert lb.shape == ub.shape