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)
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)
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
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)