def test_general_unit_weighted_demean_twoway(panel):
np.random.seed(12345)
y = PanelData(panel)
weights = pd.DataFrame(
np.random.chisquare(10, (y.dataframe.shape[0], 1)) / 10, index=y.index)
w = PanelData(weights)
dm1 = y.demean('both', weights=w)
g = pd.DataFrame(y.entity_ids, index=y.index)
g['column2'] = pd.Series(y.time_ids.squeeze(), index=y.index)
dm2 = y.general_demean(g, weights=w)
assert_allclose(dm1.values2d - dm2.values2d, np.zeros_like(dm2.values2d),
atol=1e-7)
g = pd.DataFrame(np.random.randint(0, 10, g.shape), index=y.index)
dm2 = y.general_demean(g, weights=w)
g1 = pd.Categorical(g.iloc[:, 0])
d1 = pd.get_dummies(g1)
g2 = pd.Categorical(g.iloc[:, 1])
d2 = pd.get_dummies(g2, drop_first=True)
d = np.c_[d1, d2]
wd = np.sqrt(w.values2d) * d
wy = np.sqrt(w.values2d) * y.values2d
dm1 = wy - wd @ np.linalg.lstsq(wd, wy)[0]
assert_allclose(dm1 - dm2.values2d, np.zeros_like(dm2.values2d), atol=1e-7)
评论列表
文章目录