def test_direct_simple(data): mod = IV3SLS(data) res = mod.fit(cov_type='unadjusted') y = [] x = [] z = [] for key in data: val = data[key] if isinstance(val, tuple): y.append(val[0]) nobs = val[0].shape[0] v1 = val[1] if val[1] is not None else np.empty((nobs, 0)) v2 = val[2] if val[2] is not None else np.empty((nobs, 0)) v3 = val[3] if val[3] is not None else np.empty((nobs, 0)) x.append(np.concatenate([v1, v2], 1)) z.append(np.concatenate([v1, v3], 1)) if len(val) == 5: return # weighted else: y.append(val['dependent']) nobs = val['dependent'].shape[0] vexog = val['exog'] if val['exog'] is not None else np.empty((nobs, 0)) vendog = val['endog'] if val['endog'] is not None else np.empty((nobs, 0)) vinstr = val['instruments'] if val['instruments'] is not None else np.empty((nobs, 0)) x.append(np.concatenate([vexog, vendog], 1)) z.append(np.concatenate([vexog, vinstr], 1)) if 'weights' in val: return # weighted out = simple_3sls(y, x, z) assert_allclose(res.params.values, out.beta1.squeeze()) assert_allclose(res.sigma, out.sigma) assert_allclose(res.resids.values, out.eps, atol=1e-4) assert_allclose(np.diag(res.cov), np.diag(out.cov))
def test_single_equation(data): key = list(data.keys())[0] data = {key: data[key]} mod = IV3SLS(data) res = mod.fit(cov_type='unadjusted') y = [] x = [] z = [] for key in data: val = data[key] if isinstance(val, tuple): y.append(val[0]) x.append(np.concatenate([val[1], val[2]], 1)) z.append(np.concatenate([val[1], val[3]], 1)) if len(val) == 5: return # weighted else: y.append(val['dependent']) x.append(np.concatenate([val['exog'], val['endog']], 1)) z.append(np.concatenate([val['exog'], val['instruments']], 1)) if 'weights' in val: return # weighted out = simple_3sls(y, x, z) assert_allclose(res.params.values, out.beta1.squeeze()) assert_allclose(res.sigma, out.sigma) assert_allclose(res.resids.values, out.eps) assert_allclose(np.diag(res.cov), np.diag(out.cov))