def test_ols_against_gls(data): mod = SUR(data) res = mod.fit(method='gls') sigma = res.sigma sigma_m12 = inv_matrix_sqrt(sigma) key = list(data.keys())[0] if isinstance(data[key], Mapping): y = [data[key]['dependent'] for key in data] x = [data[key]['exog'] for key in data] try: w = [data[key]['weights'] for key in data] except KeyError: w = [np.ones_like(data[key]['dependent']) for key in data] else: y = [data[key][0] for key in data] x = [data[key][1] for key in data] try: w = [data[key][2] for key in data] except IndexError: w = [np.ones_like(data[key][0]) for key in data] wy = [_y * np.sqrt(_w / _w.mean()) for _y, _w in zip(y, w)] wx = [_x * np.sqrt(_w / _w.mean()) for _x, _w in zip(x, w)] wy = blocked_column_product(wy, sigma_m12) wx = blocked_diag_product(wx, sigma_m12) ols_res = OLS(wy, wx).fit(debiased=False) assert_allclose(res.params, ols_res.params)
def test_ols_against_gls(data): mod = SUR(data) res = mod.fit(method="gls") if isinstance(data[list(data.keys())[0]], dict): predictions = mod.predict(res.params, equations=data) predictions2 = mod.predict(np.asarray(res.params)[:, None], equations=data) assert_allclose(predictions, predictions2) sigma = res.sigma sigma_m12 = inv_matrix_sqrt(np.asarray(sigma)) key = list(data.keys())[0] if isinstance(data[key], Mapping): y = [data[key]["dependent"] for key in data] x = [data[key]["exog"] for key in data] try: w = [data[key]["weights"] for key in data] except KeyError: w = [np.ones_like(data[key]["dependent"]) for key in data] else: y = [data[key][0] for key in data] x = [data[key][1] for key in data] try: w = [data[key][2] for key in data] except IndexError: w = [np.ones_like(data[key][0]) for key in data] wy = [_y * np.sqrt(_w / _w.mean()) for _y, _w in zip(y, w)] wx = [_x * np.sqrt(_w / _w.mean()) for _x, _w in zip(x, w)] wy = blocked_column_product(wy, sigma_m12) wx = blocked_diag_product(wx, sigma_m12) ols_res = OLS(wy, wx).fit(debiased=False) assert_allclose(res.params, ols_res.params)
def test_mv_ols_equivalence_hetero_debiased(mvreg_data): dependent, exog = mvreg_data mod = SUR.multivariate_ls(dependent, exog) res = mod.fit(cov_type='robust', debiased=True) keys = res.equation_labels for i in range(dependent.shape[1]): ols_mod = OLS(dependent[:, i], exog) ols_res = ols_mod.fit(cov_type='robust', debiased=True) mv_res = res.equations[keys[i]] check_results(mv_res, ols_res)
def test_mv_ols_equivalence(mvreg_data): dependent, exog = mvreg_data mod = SUR.multivariate_ls(dependent, exog) res = mod.fit(cov_type='unadjusted') keys = res.equation_labels assert res.method == 'OLS' for i in range(dependent.shape[1]): ols_mod = OLS(dependent[:, i], exog) ols_res = ols_mod.fit(cov_type='unadjusted', debiased=False) mv_res = res.equations[keys[i]] assert mv_res.method == 'OLS' check_results(mv_res, ols_res)