コード例 #1
0
    def test_fit_0hp(self):
        # carry out fit (this test is designed to fall back on the fit method of the Study class)
        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)))
        S.setTM(bl.tm.Static())
        S.fit()

        # test parameter distributions
        np.testing.assert_allclose(
            S.getParameterDistributions('mean', density=False)[1][:, 5],
            [0.00707902, 0.00707902, 0.00707902, 0.00707902, 0.00707902],
            rtol=1e-05,
            err_msg='Erroneous posterior distribution values.')

        # test parameter mean values
        np.testing.assert_allclose(S.getParameterMeanValues('mean'),
                                   [3., 3., 3., 3., 3.],
                                   rtol=1e-05,
                                   err_msg='Erroneous posterior mean values.')

        # test model evidence value
        np.testing.assert_almost_equal(S.logEvidence,
                                       -16.1946904707,
                                       decimal=5,
                                       err_msg='Erroneous log-evidence value.')
コード例 #2
0
    def test_fit_2hp(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)))

        T = bl.tm.CombinedTransitionModel(
            bl.tm.GaussianRandomWalk('sigma',
                                     bl.cint(0, 0.2, 2),
                                     target='mean'),
            bl.tm.RegimeSwitch('log10pMin', [-3, -1]))

        S.setTM(T)
        S.fit()

        # test parameter distributions
        np.testing.assert_allclose(
            S.getParameterDistributions('mean', density=False)[1][:, 5], [
                5.80970506e-03, 1.12927905e-01, 4.44501254e-02, 1.00250119e-02,
                1.72751309e-05
            ],
            rtol=1e-05,
            err_msg='Erroneous posterior distribution values.')

        # test parameter mean values
        np.testing.assert_allclose(
            S.getParameterMeanValues('mean'),
            [0.96492471, 2.09944204, 2.82451616, 3.72702495, 5.0219119],
            rtol=1e-05,
            err_msg='Erroneous posterior mean values.')

        # test model evidence value
        np.testing.assert_almost_equal(S.logEvidence,
                                       -10.7601875492,
                                       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.48943645, 0.51056355]],
            rtol=1e-05,
            err_msg='Erroneous values in hyper-parameter distribution.')

        # test joint hyper-parameter distribution
        x, y, p = S.getJointHyperParameterDistribution(['log10pMin', 'sigma'])
        np.testing.assert_allclose(
            np.array([x, y]), [[-3., -1.], [0., 0.2]],
            rtol=1e-05,
            err_msg='Erroneous parameter values in joint hyper-parameter '
            'distribution.')

        np.testing.assert_allclose(
            p, [[0.00701834, 0.0075608], [0.48241812, 0.50300274]],
            rtol=1e-05,
            err_msg='Erroneous probability values in joint hyper-parameter '
            'distribution.')
コード例 #3
0
    def test_save_load(self):
        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)))
        S.setTM(bl.tm.Static())
        S.fit()

        bl.save('study.bl', S)
        S = bl.load('study.bl')
コード例 #4
0
    def test_deterministic(self):
        S = bl.HyperStudy()
        S.loadData(np.array([1, 2, 3, 4, 5]))

        def linear(t, a=[1, 2]):
            return 0.5 + 0.2*a*t

        L = bl.om.Poisson('rate', bl.oint(0, 6, 100))
        T = bl.tm.Deterministic(linear, target='rate')
        S.set(L, T)

        S.fit()

        # test model evidence value
        np.testing.assert_almost_equal(S.logEvidence, -9.4050089375418136, decimal=5,
                                       err_msg='Erroneous log-evidence value.')
コード例 #5
0
    def test_statichyperparameter(self):
        S = bl.HyperStudy()
        S.loadData(np.array([1, 2, 3, 4, 5]))
        S.setOM(bl.om.Poisson('rate', bl.oint(0, 6, 50)))
        S.setTM(
            bl.tm.GaussianRandomWalk('sigma',
                                     bl.cint(0, 0.2, 5),
                                     target='rate'))
        S.fit()

        p = S.eval('exp(0.99*log(sigma))+1 > 1.1')

        np.testing.assert_almost_equal(
            p,
            0.60696006616644793,
            decimal=5,
            err_msg='Erroneous parsing result for inequality.')
コード例 #6
0
ファイル: test_hyperstudy.py プロジェクト: rgerum/bayesloop
    def test_fit_1hp(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'))
        S.fit()

        # test parameter distributions
        np.testing.assert_allclose(
            S.getParameterDistributions('mean', density=False)[1][:, 5],
            [0.01042107, 0.00766233, 0.00618352, 0.00554651, 0.00548637],
            rtol=1e-05,
            err_msg='Erroneous posterior distribution values.')

        # test parameter mean values
        np.testing.assert_allclose(
            S.getParameterMeanValues('mean'),
            [2.88534505, 2.93135361, 3., 3.06864639, 3.11465495],
            rtol=1e-05,
            err_msg='Erroneous posterior mean values.')

        # test model evidence value
        np.testing.assert_almost_equal(S.logEvidence,
                                       -16.0629517262,
                                       decimal=5,
                                       err_msg='Erroneous log-evidence value.')

        # test hyper-parameter distribution
        x, p = S.getHyperParameterDistribution('sigma')
        print(np.array([x, p]))
        np.testing.assert_allclose(
            np.array([x, p]), [[0., 0.2], [0.43828499, 0.56171501]],
            rtol=1e-05,
            err_msg='Erroneous values in hyper-parameter distribution.')
コード例 #7
0
ファイル: test_hyperstudy.py プロジェクト: rgerum/bayesloop
    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.')
コード例 #8
0
ファイル: test_hyperstudy.py プロジェクト: rgerum/bayesloop
    def test_fit_hyperprior_function(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.1, 0.3, 2),
                                     target='mean',
                                     prior=lambda s: 1. / s))
        S.fit()

        # test parameter distributions
        np.testing.assert_allclose(
            S.getParameterDistributions('mean', density=False)[1][:, 5],
            [0.04071021, 0.00783661, 0.00527211, 0.00484169, 0.00480379],
            rtol=1e-05,
            err_msg='Erroneous posterior distribution values.')

        # test parameter mean values
        np.testing.assert_allclose(
            S.getParameterMeanValues('mean'),
            [2.68460027, 2.81872578, 3., 3.18127422, 3.31539973],
            rtol=1e-05,
            err_msg='Erroneous posterior mean values.')

        # test model evidence value
        np.testing.assert_almost_equal(S.logEvidence,
                                       -15.9898700147,
                                       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.1, 0.3], [0.61609973, 0.38390027]],
            rtol=1e-05,
            err_msg='Erroneous values in hyper-parameter distribution.')
コード例 #9
0
ファイル: test_hyperstudy.py プロジェクト: rgerum/bayesloop
    def test_fit_hyperprior_array(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=np.array([0.2, 0.8])))
        S.fit()

        # test parameter distributions
        np.testing.assert_allclose(
            S.getParameterDistributions('mean', density=False)[1][:, 5],
            [0.01205759, 0.00794796, 0.00574501, 0.00479608, 0.00470649],
            rtol=1e-05,
            err_msg='Erroneous posterior distribution values.')

        # test parameter mean values
        np.testing.assert_allclose(
            S.getParameterMeanValues('mean'),
            [2.82920111, 2.89773902, 3., 3.10226098, 3.17079889],
            rtol=1e-05,
            err_msg='Erroneous posterior mean values.')

        # test model evidence value
        np.testing.assert_almost_equal(S.logEvidence,
                                       -15.9915077133,
                                       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.16322581, 0.83677419]],
            rtol=1e-05,
            err_msg='Erroneous values in hyper-parameter distribution.')