예제 #1
0
def test_constraint_setting(data):
    mod = SUR(data)
    pn = mod.param_names
    c = Series(np.zeros(len(pn)), index=pn)
    c1 = c.copy()
    c1.iloc[::7] = 1
    c2 = c.copy()
    c2.iloc[::11] = 1
    r = concat([c1, c2], 1).T
    q = Series([0, 1], index=r.index)

    mod.add_constraints(r)
    mod.fit(method='ols')
    res = mod.fit(method='ols', cov_type='unadjusted')
    assert_allclose(r.values @ res.params.values[:, None],
                    np.zeros((2, 1)),
                    atol=1e-8)
    mod.fit(method='gls')
    res = mod.fit(method='gls', cov_type='unadjusted')
    assert_allclose(r.values @ res.params.values[:, None],
                    np.zeros((2, 1)),
                    atol=1e-8)

    mod.add_constraints(r, q)
    res = mod.fit(method='ols')
    assert_allclose(r.values @ res.params.values[:, None],
                    q.values[:, None],
                    atol=1e-8)
    res = mod.fit(method='gls')
    assert_allclose(r.values @ res.params.values[:, None],
                    q.values[:, None],
                    atol=1e-8)
예제 #2
0
def test_restricted_f_statistic():
    data = generate_data(k=2, p=2)
    mod = SUR(data)
    r = DataFrame(np.zeros((1, 6)), columns=mod.param_names)
    r.iloc[0, 1] = 1.0
    mod.add_constraints(r)
    res = mod.fit()
    eqn = res.equations[res.equation_labels[0]]
    assert isinstance(eqn.f_statistic, InvalidTestStatistic)
예제 #3
0
def test_contrains_reset(data):
    mod = SUR(data)
    pn = mod.param_names
    c = Series(np.zeros(len(pn)), index=pn)
    c1 = c.copy()
    c1.iloc[::7] = 1
    c2 = c.copy()
    c2.iloc[::11] = 1
    r = concat([c1, c2], 1).T
    q = Series([0, 1], index=r.index)
    mod.add_constraints(r, q)
    cons = mod.constraints
    assert_allclose(cons.r.values, r.values)
    assert_allclose(cons.q.values, q.values)
    mod.reset_constraints()
    cons = mod.constraints
    assert cons is None
예제 #4
0
def test_invalid_constraints(data):
    # 1. Wrong types
    mod = SUR(data)
    pn = mod.param_names
    c = Series(np.zeros(len(pn)), index=pn)
    c1 = c.copy()
    c1.iloc[::7] = 1
    c2 = c.copy()
    c2.iloc[::11] = 1
    r = concat([c1, c2], 1).T
    q = Series([0, 1], index=r.index)
    with pytest.raises(TypeError):
        mod.add_constraints(r.values)
    with pytest.raises(TypeError):
        mod.add_constraints(r, q.values)

    # 2. Wrong shape
    with pytest.raises(ValueError):
        mod.add_constraints(r.iloc[:, :-2])
    with pytest.raises(ValueError):
        mod.add_constraints(r, q.iloc[:-1])

    # 3. Redundant constraint
    r = concat([c1, c1], 1).T
    with pytest.raises(ValueError):
        mod.add_constraints(r)

    # 4. Infeasible constraint
    with pytest.raises(ValueError):
        mod.add_constraints(r, q)