Exemplo n.º 1
0
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))
Exemplo n.º 2
0
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))