def test_fit_prior_sympy(self): # carry out fit S = bl.Study() S.loadData(np.array([1, 2, 3, 4, 5])) S.setOM( bl.om.Poisson('rate', bl.oint(0, 6, 1000), prior=stats.Exponential('expon', 1.))) S.setTM(bl.tm.GaussianRandomWalk('sigma', 0.1, target='rate')) S.fit() # test parameter distributions np.testing.assert_allclose( S.getParameterDistributions('rate', density=False)[1][:, 250], [0.0020607, 0.0019692, 0.00187339, 0.0018053, 0.00179584], rtol=1e-05, err_msg='Erroneous posterior distribution values.') # test parameter mean values np.testing.assert_allclose( S.getParameterMeanValues('rate'), [2.25427356, 2.26949283, 2.28527551, 2.29704214, 2.30024139], rtol=1e-05, err_msg='Erroneous posterior mean values.') # test model evidence value np.testing.assert_almost_equal(S.logEvidence, -11.1819034242, decimal=5, err_msg='Erroneous log-evidence value.')
def test_fit_prior_sympy(self): # carry out fit S = bl.Study() S.loadData(np.array([1, 2, 3, 4, 5])) S.setOM( bl.om.Gaussian( 'mean', bl.cint(0, 6, 20), 'sigma', bl.oint(0, 2, 20), prior=[stats.Uniform('u', 0, 6), stats.Exponential('e', 2.)])) S.setTM(bl.tm.GaussianRandomWalk('sigma', 0.1, target='mean')) S.fit() # test parameter distributions np.testing.assert_allclose( S.getParameterDistributions('mean', density=False)[1][:, 5], [0.00909976, 0.0089861, 0.00887967, 0.00881235, 0.00880499], rtol=1e-05, err_msg='Erroneous posterior distribution values.') # test parameter mean values np.testing.assert_allclose( S.getParameterMeanValues('mean'), [2.9942575, 2.99646768, 3., 3.00353232, 3.0057425], rtol=1e-05, err_msg='Erroneous posterior mean values.') # test model evidence value np.testing.assert_almost_equal(S.logEvidence, -12.4324853153, decimal=5, err_msg='Erroneous log-evidence value.')
def test_optimize(self): # carry out fit S = bl.Study() S.loadData(np.array([1, 2, 3, 4, 5])) S.setOM(bl.om.Poisson('rate', bl.oint(0, 6, 1000), prior=stats.Exponential('expon', 1.))) T = bl.tm.CombinedTransitionModel(bl.tm.GaussianRandomWalk('sigma', 2.1, target='rate'), bl.tm.RegimeSwitch('log10pMin', -3)) S.setTM(T) S.optimize() # test parameter distributions np.testing.assert_allclose(S.getParameterDistributions('rate', density=False)[1][:, 250], [0.00181567, 0.00213315, 0.00091028, 0.00041154, 0.00090885], rtol=1e-05, err_msg='Erroneous posterior distribution values.') # test parameter mean values np.testing.assert_allclose(S.getParameterMeanValues('rate'), [1.01204314, 2.25763551, 3.24176817, 3.74634864, 3.12632199], rtol=1e-05, err_msg='Erroneous posterior mean values.') # test model evidence value np.testing.assert_almost_equal(S.logEvidence, -9.47362827569, decimal=5, err_msg='Erroneous log-evidence value.') # test optimized hyper-parameter values np.testing.assert_almost_equal(S.getHyperParameterValue('sigma'), 2.11216289063, decimal=5, err_msg='Erroneous log-evidence value.') np.testing.assert_almost_equal(S.getHyperParameterValue('log10pMin'), -3.0, decimal=5, err_msg='Erroneous log-evidence value.')
def test_step_add2TM_2hp_prior_hyperpriors_TMprior(self): # carry out fit S = bl.OnlineStudy(storeHistory=True) S.setOM(bl.om.Gaussian('mean', bl.cint(0, 6, 20), 'sigma', bl.oint(0, 2, 20), prior=lambda m, s: 1./s)) T1 = bl.tm.CombinedTransitionModel(bl.tm.GaussianRandomWalk('s1', [0.25, 0.5], target='mean', prior=stats.Exponential('e', 0.5)), bl.tm.GaussianRandomWalk('s2', bl.cint(0, 0.2, 2), target='sigma', prior=np.array([0.2, 0.8])) ) T2 = bl.tm.Independent() S.addTransitionModel('T1', T1) S.addTransitionModel('T2', T2) S.setTransitionModelPrior([0.9, 0.1]) data = np.array([1, 2, 3, 4, 5]) for d in data: S.step(d) # test transition model distributions np.testing.assert_allclose(S.getCurrentTransitionModelDistribution(local=False)[1], [0.49402616, 0.50597384], rtol=1e-05, err_msg='Erroneous transition model probabilities.') np.testing.assert_allclose(S.getCurrentTransitionModelDistribution(local=True)[1], [0.81739495, 0.18260505], rtol=1e-05, err_msg='Erroneous local transition model probabilities.') # test hyper-parameter distributions np.testing.assert_allclose(S.getCurrentHyperParameterDistribution('s2')[1], [0.19047162, 0.80952838], rtol=1e-05, err_msg='Erroneous hyper-parameter distribution.') # test parameter distributions np.testing.assert_allclose(S.getParameterDistributions('mean', density=False)[1][:, 5], [0.05825921, 0.20129444, 0.07273516, 0.02125759, 0.0039255], rtol=1e-05, err_msg='Erroneous posterior distribution values.') # test parameter mean values np.testing.assert_allclose(S.getParameterMeanValues('mean'), [1.0771838, 1.71494272, 2.45992376, 3.34160617, 4.39337253], rtol=1e-05, err_msg='Erroneous posterior mean values.') # test model evidence value np.testing.assert_almost_equal(S.logEvidence, -9.46900822686, decimal=5, err_msg='Erroneous log-evidence value.')
def test_fit_hyperprior_sympy(self): # carry out fit S = bl.HyperStudy() S.loadData(np.array([1, 2, 3, 4, 5])) S.setOM( bl.om.Gaussian('mean', bl.cint(0, 6, 20), 'sigma', bl.oint(0, 2, 20), prior=lambda m, s: 1 / s**3)) S.setTM( bl.tm.GaussianRandomWalk('sigma', bl.cint(0, 0.2, 2), target='mean', prior=stats.Exponential('e', 1.))) S.fit() # test parameter distributions np.testing.assert_allclose( S.getParameterDistributions('mean', density=False)[1][:, 5], [0.01012545, 0.00761074, 0.00626273, 0.00568207, 0.00562725], rtol=1e-05, err_msg='Erroneous posterior distribution values.') # test parameter mean values np.testing.assert_allclose( S.getParameterMeanValues('mean'), [2.89548676, 2.93742566, 3., 3.06257434, 3.10451324], rtol=1e-05, err_msg='Erroneous posterior mean values.') # test model evidence value np.testing.assert_almost_equal(S.logEvidence, -17.0866290887, decimal=5, err_msg='Erroneous log-evidence value.') # test hyper-parameter distribution x, p = S.getHyperParameterDistribution('sigma') np.testing.assert_allclose( np.array([x, p]), [[0., 0.2], [0.487971, 0.512029]], rtol=1e-05, err_msg='Erroneous values in hyper-parameter distribution.')
def exponential_to_sympy(node, input_vars=None, log=False): result = get_density(st.Exponential("Node%s" % node.id, node.l), node, input_vars) if log: result = sp.log(result) return result