def simulate_params(n_groups):
    var1 = Variable('constant_one', lambda x: x, 0.0, 0.0, fe_bounds=[-np.inf, 0.0])
    var2 = Variable('constant_one', np.exp, 0.0, 0.0, fe_bounds=[-np.inf, 0.0])

    if n_groups == 1:
        var1.re_bounds = [0.0, 0.0]
        var2.re_bounds = [0.0, 0.0]
    else:
        var1.re_bounds = [-1.0, 1.0]
        var2.re_bounds = [-1.0, 1.0]

    param1 = Parameter('p1', np.exp, [var1])
    param2 = Parameter('p2', lambda x: x, [var1, var2])
    param3 = Parameter('p3', np.exp, [var1])

    n_var = 4
    fe_true = -np.random.rand(n_var) * 3
    if n_groups == 1:
        re_true = np.zeros((n_groups, n_var))
    else:
        re_true = np.random.randn(n_groups, n_var)

    x_true = re_true + fe_true
    param_true = np.zeros((n_groups, 3))
    param_true[:, 0] = np.exp(x_true[:, 0])
    param_true[:, 1] = x_true[:, 1] + np.exp(x_true[:, 2])
    param_true[:, 2] = np.exp(x_true[:, 3])

    return ParameterSet([param1, param2, param3]), param_true, x_true
Beispiel #2
0
def parameter_set():
    var1 = Variable(covariate='intercept',
                    var_link_fun=lambda x: x,
                    fe_init=0.,
                    re_init=0.)
    var2 = Variable(covariate='intercept',
                    var_link_fun=lambda x: x,
                    fe_init=0.,
                    re_init=0.)
    alpha = Parameter(param_name='alpha',
                      link_fun=lambda x: x,
                      variables=[var1])
    beta = Parameter(param_name='beta', link_fun=lambda x: x, variables=[var2])
    ln_alpha_beta = ParameterFunction(
        param_function_name='ln-alpha-beta',
        param_function=lambda params: np.log(params[0] * params[1]))
    param_set = ParameterSet(parameters=[alpha, beta],
                             parameter_functions=[ln_alpha_beta])
    return param_set
def param2():
    var2 = Variable(
        covariate='covariate2', var_link_fun=lambda x: x,
        fe_init=1., re_init=1.
    )
    parameter2 = Parameter(
        param_name='beta',
        variables=[var2],
        link_fun=lambda x: x,
    )
    return parameter2
def param1():
    var1 = Variable(
        covariate='covariate1', var_link_fun=lambda x: x,
        fe_init=1., re_init=1.
    )
    parameter1 = Parameter(
        param_name='alpha',
        variables=[var1],
        link_fun=lambda x: x,
    )
    return parameter1
def param_set():
    variable1 = Variable('intercept',
                         lambda x: x,
                         0.0,
                         0.3,
                         re_bounds=[0.0, 1.0])
    variable2 = Variable('intercept',
                         lambda x: x,
                         0.1,
                         0.4,
                         re_bounds=[0.0, 2.0])
    variable3 = Variable('intercept',
                         lambda x: x,
                         0.2,
                         0.5,
                         re_bounds=[0.0, 3.0])
    parameter1 = Parameter('p1', np.exp, [variable1])
    parameter2 = Parameter('p2', np.exp, [variable2])
    parameter3 = Parameter('p3', np.exp, [variable3] * 2)
    parameter_set = ParameterSet([parameter1, parameter2, parameter3])
    assert parameter_set.num_fe == 4
    return parameter_set
def test_parameter():
    var1 = Variable(
        covariate='covariate1', var_link_fun=lambda x: x,
        fe_init=1., re_init=1.
    )
    var2 = Variable(
        covariate='covariate2', var_link_fun=lambda x: x,
        fe_init=1., re_init=1.
    )
    parameter = Parameter(
        param_name='alpha',
        variables=[var1, var2],
        link_fun=lambda x: x,
    )
    assert parameter.num_fe == 2
    assert callable(parameter.link_fun)

    assert len(parameter.fe_init) == 2
    assert len(parameter.re_init) == 2
    assert len(parameter.fe_gprior) == 2
    assert len(parameter.re_gprior) == 2
    assert len(parameter.fe_bounds) == 2
    assert len(parameter.re_bounds) == 2
Beispiel #7
0
b_social_distance = Variable(covariate='social_distance',
                             var_link_fun=identity_fun,
                             fe_init=b_true / 3,
                             re_init=0.0,
                             fe_bounds=[-numpy.inf, numpy.inf],
                             re_bounds=[0.0, 0.0])

phi_intercept = Variable(covariate='cov_one',
                         var_link_fun=identity_fun,
                         fe_init=p_true / 3,
                         re_init=0.0,
                         fe_bounds=[-numpy.inf, numpy.inf],
                         re_bounds=[0.0, 0.0])

alpha = Parameter(param_name='alpha',
                  link_fun=exp_fun,
                  variables=[a_intercept])
beta = Parameter(param_name='beta',
                 link_fun=identity_fun,
                 variables=[b_intercept, b_social_distance])
p = Parameter(param_name='p', link_fun=exp_fun, variables=[phi_intercept])

parameters = ParameterSet([alpha, beta, p])

optimizer_options = {
    'ftol': 1e-12,
    'gtol': 1e-12,
}

model = CoreModel(param_set=parameters,
                  curve_fun=gaussian_cdf,
Beispiel #8
0
                    re_init=0.,
                    fe_gprior=fe_gprior,
                    re_gprior=re_gprior)
beta_fe = Variable(covariate='intercept',
                   var_link_fun=lambda x: x,
                   fe_init=fe_mean[1],
                   re_init=0.,
                   fe_gprior=fe_gprior,
                   re_gprior=re_gprior)
p_fe = Variable(covariate='intercept',
                var_link_fun=lambda x: x,
                fe_init=fe_mean[2],
                re_init=0.,
                fe_gprior=fe_gprior,
                re_gprior=re_gprior)
alpha = Parameter('alpha', link_fun=np.exp, variables=[alpha_fe])
beta = Parameter('beta', link_fun=lambda x: x, variables=[beta_fe])
p = Parameter('p', link_fun=lambda x: x, variables=[p_fe])

params = ParameterSet([alpha, beta, p])
""" ```

### Models and Solvers
We now need a `Model` that contains our parameter set and also which curve function we want to fit, and the loss
function for the optimization. We also need to define a `Solver` that will actually perform the optimization.
Finally, we will fit the solver to our simulated data.

```python """
model = CoreModel(param_set=params,
                  curve_fun=ln_gaussian_pdf,
                  loss_fun=normal_loss)
Beispiel #9
0
                       fe_gprior=[b_true[0], abs(b_true[0]) / 100.0],
                       fe_bounds=[-numpy.inf, numpy.inf],
                       re_bounds=[-numpy.inf, numpy.inf])

phi_intercept = Variable(covariate='constant_one',
                         var_link_fun=lambda x: x,
                         fe_init=phi_true[0] / 3.0,
                         re_init=0.0,
                         re_zero_sum_std=abs(phi_true[0]) / 100.0,
                         fe_gprior=[phi_true[0],
                                    abs(phi_true[0]) / 100.0],
                         fe_bounds=[-numpy.inf, numpy.inf],
                         re_bounds=[-numpy.inf, numpy.inf])

alpha = Parameter(param_name='alpha',
                  link_fun=numpy.log,
                  variables=[a_intercept])
beta = Parameter(param_name='beta',
                 link_fun=lambda x: x,
                 variables=[b_intercept])
p = Parameter(param_name='p', link_fun=numpy.exp, variables=[phi_intercept])

parameters = ParameterSet([alpha, beta, p])

optimizer_options = {
    'disp': 0,
    'maxiter': 300,
    'ftol': 1e-8,
    'gtol': 1e-8,
}