def test_cov_equiv_cluster(data): mod = PooledOLS(data.y, data.x) res = mod.fit(cov_type='clustered', cluster_entity=True, debiased=False) y = PanelData(data.y) clusters = pd.DataFrame(y.entity_ids, index=y.index) res2 = mod.fit(cov_type='clustered', clusters=clusters, debiased=False) assert_results_equal(res, res2) res = mod.fit(cov_type='clustered', cluster_time=True, debiased=False) clusters = pd.DataFrame(y.time_ids, index=y.index) res2 = mod.fit(cov_type='clustered', clusters=clusters, debiased=False) assert_results_equal(res, res2) res = mod.fit(cov_type='clustered', clusters=data.vc1, debiased=False) y = mod.dependent.dataframe.copy() x = mod.exog.dataframe.copy() y.index = np.arange(len(y)) x.index = y.index clusters = mod.reformat_clusters(data.vc1) ols_mod = IV2SLS(y, x, None, None) res2 = ols_mod.fit(cov_type='clustered', clusters=clusters.dataframe, debiased=False) assert_results_equal(res, res2)
def test_multiple(data, precision): dependent = data.set_index(["nr", "year"]).lwage exog = add_constant( data.set_index(["nr", "year"])[["expersq", "married", "union"]]) res = PanelOLS(dependent, exog, entity_effects=True, time_effects=True).fit() res2 = PanelOLS(dependent, exog, entity_effects=True).fit(cov_type="clustered", cluster_entity=True) exog = add_constant(data.set_index(["nr", "year"])[["married", "union"]]) res3 = PooledOLS(dependent, exog).fit() exog = data.set_index(["nr", "year"])[["exper"]] res4 = RandomEffects(dependent, exog).fit() comp = compare([res, res2, res3, res4], precision=precision) assert len(comp.rsquared) == 4 d = dir(comp) for value in d: if value.startswith("_"): continue getattr(comp, value) with pytest.raises(ValueError): compare([res, res2, res3, res4], precision="unknown")
def test_multiple(data, precision): dependent = data.set_index(['nr', 'year']).lwage exog = sm.add_constant( data.set_index(['nr', 'year'])[['expersq', 'married', 'union']]) res = PanelOLS(dependent, exog, entity_effects=True, time_effects=True).fit() res2 = PanelOLS(dependent, exog, entity_effects=True).fit(cov_type='clustered', cluster_entity=True) exog = sm.add_constant( data.set_index(['nr', 'year'])[['married', 'union']]) res3 = PooledOLS(dependent, exog).fit() exog = data.set_index(['nr', 'year'])[['exper']] res4 = RandomEffects(dependent, exog).fit() comp = compare([res, res2, res3, res4], precision=precision) assert len(comp.rsquared) == 4 d = dir(comp) for value in d: if value.startswith('_'): continue getattr(comp, value) with pytest.raises(ValueError): compare([res, res2, res3, res4], precision='unknown')
def test_panel_no_effects_weighted(data): res = PanelOLS(data.y, data.x, weights=data.w).fit() res2 = PooledOLS(data.y, data.x, weights=data.w).fit() assert_results_equal(res, res2)
def test_panel_no_effects(data): res = PanelOLS(data.y, data.x).fit() res2 = PooledOLS(data.y, data.x).fit() assert_results_equal(res, res2)
def test_alt_rsquared_weighted(data): mod = PooledOLS(data.y, data.x, weights=data.w) res = mod.fit(debiased=False) assert_allclose(res.rsquared, res.rsquared_overall)
def test_extra_df(data): mod = PooledOLS(data.y, data.x) res = mod.fit() res_extra = mod.fit(extra_df=10) assert np.all(np.diag(res_extra.cov) > np.diag(res.cov))
def test_uneuqal_samples(): data = generate_data(False, "pandas") with pytest.raises(ValueError, match="dependent and exog must have"): PooledOLS(data.y.iloc[::2], data.x)