import panel_ols import pandas as pd print "Pandas: ", pd.__version__ import pysal as ps print "PySAL: ", ps.version import numpy as np print "Numpy: ", np.__version__ seed = np.random.seed(1234) n = 1000 d1 = 100 d2 = 10 seed = np.random.seed(1234) x = np.random.random((n, 3)) fe1 = np.random.random_integers(0, d1, n) fe1_d = pd.get_dummies(fe1, 'fe1') fe2 = np.random.random_integers(0, d2, n) fe2_d = pd.get_dummies(fe2, 'fe2') e = np.random.normal(0, 1, (n, 1)) y = np.dot(x, np.array([[1., 1., 1.]]).T) \ + fe1_d.ix[:, :-1].values.sum(axis=1)[:, None] \ + fe2_d.values.sum(axis=1)[:, None] \ + e xone = np.hstack((x, fe1_d.values)) m1_dummy = ps.spreg.BaseOLS(y, xone) m1_demean = panel_ols.one_way_fe(y, x, fe1) np.hstack((m1_dummy.betas[:3], m1_demean.betas)) m1_dummy.betas[:3] - m1_demean.betas ci = ps.spreg.diagnostics.condition_index print "Dummy: %.4f | Demean: %.4f"%(ci(m1_dummy), ci(m1_demean)) xtwo = np.hstack((xone, fe2_d.values[:, 1:])) m2_dummies = ps.spreg.BaseOLS(y, xtwo) m2_demean = panel_ols.two_way_fe(y, x, fe1, fe2) m2_mix = panel_ols.one_way_fe(y, xone[:, :-1], fe2) pd.DataFrame({'Dummies': m2_dummies.betas[:3].flatten(), \ 'Mix': m2_mix.betas[:3].flatten(), \ 'Demean': m2_demean.betas.flatten()}) pd.Series({'Dummies': ci(m2_dummies), \ 'Mix': ci(m2_mix), \ 'Demean': ci(m2_demean)}) n = 1000 d1 = 10 d2 = 100 seed = np.random.seed(1234) x = np.random.random((n, 3)) # Balanced panel d2 = int(n * 1. / d1) fe1 = np.arange(d1) fe2 = np.arange(d2) fe = np.array([(i, j) for i in fe1 for j in fe2]) fe1 = fe[:, 0] fe2 = fe[:, 1] # fe1_d = pd.get_dummies(fe1, 'fe1') fe2_d = pd.get_dummies(fe2, 'fe2') e = np.random.normal(0, 1, (n, 1)) y = np.dot(x, np.array([[1., 1., 1.]]).T) \ + fe1_d.ix[:, :-1].values.sum(axis=1)[:, None] \ + e #+ fe2_d.values.sum(axis=1)[:, None] \ # One-way m = panel_ols.one_way_fe(y, x, fe1) xone = np.hstack((x, fe1_d.values)) md = ps.spreg.BaseOLS(y, xone) print "De-meaned | Dummy" for i in range(3): print np.round(m.betas[i][0], 9), " | ", \ np.round(md.betas[i][0], 9) print 'Condition index' print ci(m), " | ", ci(md) # Two-way m = panel_ols.two_way_fe(y, x, fe1, fe2) malt = panel_ols.one_way_fe(y, xone[:, :-1], fe2) xtwo = np.hstack((xone, fe2_d.values[:, 1:])) md = ps.spreg.BaseOLS(y, xtwo) print "\nDe-meaned | 1 demeaned-1 dummy | Dummy" for i in range(3): print np.round(m.betas[i][0], 9), " | ", \ np.round(malt.betas[i][0], 9), " | ", \ np.round(md.betas[i][0], 9) print 'Condition index' print ci(m), " | ",ci(malt), " | ", ci(md)