def test_fama_macbeth(data): res = FamaMacBeth(data.y, data.x).fit(debiased=True) y = PanelData(data.y) x = PanelData(data.x) missing = y.isnull | x.isnull y.drop(missing) x.drop(missing) y = y.dataframe x = x.dataframe times = y.index.levels[1] params = [] for t in times: _y = y.xs(t, level=1) _x = x.xs(t, level=1) if _x.shape[0] < _x.shape[1]: continue _x = _x.loc[_y.index] params.append(np.linalg.lstsq(_x.values, _y.values)[0]) params = np.array(params).squeeze() all_params = params params = params.mean(0) assert_allclose(params.squeeze(), res.params) e_params = all_params - params[None, :] ntime = e_params.shape[0] cov = e_params.T @ e_params / ntime / (ntime - 1) assert_allclose(cov, res.cov.values) d = dir(res) for key in d: if not key.startswith('_'): val = getattr(res, key) if callable(val): val()
def test_fama_macbeth(data): res = FamaMacBeth(data.y, data.x).fit(debiased=True) y = PanelData(data.y) x = PanelData(data.x) missing = y.isnull | x.isnull y.drop(missing) x.drop(missing) y = y.dataframe x = x.dataframe times = y.index.levels[1] params = [] for t in times: _y = y.xs(t, level=1) _x = x.xs(t, level=1) if _x.shape[0] < _x.shape[1]: continue _x = _x.loc[_y.index] params.append(lstsq(_x.values, _y.values, rcond=None)[0]) params = np.array(params).squeeze() all_params = params params = params.mean(0) assert_allclose(params.squeeze(), res.params) assert_allclose(all_params, res.all_params.dropna(how="all")) e_params = all_params - params[None, :] ntime = e_params.shape[0] cov = e_params.T @ e_params / ntime / (ntime - 1) assert_allclose(cov, np.asarray(res.cov)) access_attributes(res)