Пример #1
0
def test_bootstrap_run(df, n):
    np.random.seed(99)
    b_run = BinneyRun(col_success='success',
                      col_total='total',
                      covariates=['x1'],
                      df=df,
                      solver_method='ipopt',
                      data_type='binomial')
    b_run.fit()
    b_run.make_uncertainty(n_boots=15)
    assert np.vstack(b_run.bootstrap.parameters).shape == (15, 2)
    np.testing.assert_array_almost_equal(b_run.bootstrap.parameters[0],
                                         np.array([0.99940296, 1.99394325]))
    np.testing.assert_array_almost_equal(b_run.bootstrap.parameters[5],
                                         np.array([1.01366631, 1.99569274]))
    np.testing.assert_array_almost_equal(np.vstack(
        b_run.bootstrap.parameters).mean(axis=0),
                                         b_run.params_opt,
                                         decimal=1)
    uis = np.quantile(np.vstack(b_run.bootstrap.parameters),
                      q=[0.025, 0.975],
                      axis=0)
    assert all(b_run.params_opt > uis[0, :])
    assert all(b_run.params_opt < uis[1, :])
    draws = b_run.predict_draws(df=df)
    assert draws.shape == (15, n)
    assert all(draws.var(axis=1) > 0)
def test_hierarchical_bootstrap(n, group_data):
    np.random.seed(99)
    n_boots = 30
    b_run = BinneyRun(col_success='success',
                      col_total='total',
                      covariates=['x1'],
                      df=group_data,
                      col_group='g',
                      solver_method='scipy',
                      data_type='bernoulli')
    b_run.fit()
    b_run.make_uncertainty(n_boots=n_boots)
    assert len(b_run.bootstrap.parameters) == n_boots
    for param in b_run.bootstrap.parameters:
        assert isinstance(param, Dict)
        for group, item in param.items():
            assert len(param[group]) == 2
    draws = b_run.predict_draws(df=group_data)
    assert draws.shape == (n_boots, n)
    assert all(draws.var(axis=1) > 0)
    assert (group_data['p'].values > np.quantile(draws, q=0.025, axis=0)).all()
    assert (group_data['p'].values < np.quantile(draws, q=0.975, axis=0)).all()