def test_results_access(data): mod = RandomEffects(data.y, data.x) res = mod.fit(debiased=False) d = dir(res) for key in d: if not key.startswith('_'): val = getattr(res, key) if callable(val): val()
def test_fitted_effects_residuals(data): mod = RandomEffects(data.y, data.x) res = mod.fit() expected = mod.exog.values2d @ res.params.values expected = pd.DataFrame(expected, index=mod.exog.index, columns=["fitted_values"]) assert_allclose(res.fitted_values, expected) assert_frame_similar(res.fitted_values, expected) expected.iloc[:, 0] = res.resids expected.columns = ["idiosyncratic"] assert_allclose(res.idiosyncratic, expected) assert_frame_similar(res.idiosyncratic, expected) fitted_error = res.fitted_values + res.idiosyncratic.values expected.iloc[:, 0] = mod.dependent.values2d - fitted_error expected.columns = ["estimated_effects"] assert_allclose(res.estimated_effects, expected) assert_frame_similar(res.estimated_effects, expected)
def test_random_effects_small_sample(data): y = PanelData(data.y) mod = RandomEffects(data.y, data.x) no_ss = mod.fit() ss = mod.fit(small_sample=True) if y.dataframe.shape[0] == mod.dependent.dataframe.shape[0]: assert ss.variance_decomposition.Effects == no_ss.variance_decomposition.Effects else: assert ss.variance_decomposition.Effects != no_ss.variance_decomposition.Effects mod = RandomEffects(data.y, data.x, weights=data.w) no_ss = mod.fit() ss = mod.fit(small_sample=True) if y.dataframe.shape[0] == mod.dependent.dataframe.shape[0]: assert ss.variance_decomposition.Effects == no_ss.variance_decomposition.Effects else: assert ss.variance_decomposition.Effects != no_ss.variance_decomposition.Effects
def test_multiple_no_effects(data): dependent = data.set_index(["nr", "year"]).lwage exog = add_constant( data.set_index(["nr", "year"])[["expersq", "married", "union"]]) res = PanelOLS(dependent, exog).fit() 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(dict(a=res, model2=res3, model3=res4)) assert len(comp.rsquared) == 3 d = dir(comp) for value in d: if value.startswith("_"): continue getattr(comp, value) compare(dict(a=res, model2=res3, model3=res4))
def test_multiple_no_effects(data): dependent = data.set_index(['nr', 'year']).lwage exog = sm.add_constant( data.set_index(['nr', 'year'])[['expersq', 'married', 'union']]) res = PanelOLS(dependent, exog).fit() 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(dict(a=res, model2=res3, model3=res4)) assert len(comp.rsquared) == 3 d = dir(comp) for value in d: if value.startswith('_'): continue getattr(comp, value) compare(OrderedDict(a=res, model2=res3, model3=res4))
def test_multiple(data): 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]) assert len(comp.rsquared) == 4 d = dir(comp) for value in d: if value.startswith('_'): continue getattr(comp, value)
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_results_access(data): mod = RandomEffects(data.y, data.x) res = mod.fit(debiased=False) access_attributes(res)
from linearmodels.panel.data import PanelData import numpy as np import pandas as pd from statsmodels.datasets import grunfeld from linearmodels.panel.model import RandomEffects from linearmodels.tests.panel._utility import generate_data data = pd.read_stata( r'C:\git\linearmodels\linearmodels\tests\panel\results\simulated-panel.dta' ) data = data.set_index(['firm', 'time']) mod = RandomEffects(data.y, data[['intercept', 'x1', 'x2', 'x3', 'x4', 'x5']]) res = mod.fit() print(res.variance_decomposition) res = mod.fit(small_sample=True) print(res.variance_decomposition) raise NotImplementedError mod = RandomEffects( data.y_light, data[[ 'intercept', 'x1_light', 'x2_light', 'x3_light', 'x4_light', 'x5_light' ]]) res = mod.fit() import numpy as np from statsmodels.datasets import grunfeld data = grunfeld.load_pandas().data data.year = data.year.astype(np.int64) from linearmodels import PanelOLS