def test_general_weighted_demean_oneway(panel):
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('entity', weights=w)
g = PanelData(pd.DataFrame(y.entity_ids, index=y.index))
dm2 = y.general_demean(g, w)
assert_allclose(dm1.values2d, dm2.values2d)
dm1 = y.demean('time', weights=w)
g = PanelData(pd.DataFrame(y.time_ids, index=y.index))
dm2 = y.general_demean(g, w)
assert_allclose(dm1.values2d, dm2.values2d)
g = PanelData(pd.DataFrame(np.random.randint(0, 10, g.dataframe.shape),
index=y.index))
dm2 = y.general_demean(g, w)
g = pd.Categorical(g.dataframe.iloc[:, 0])
d = pd.get_dummies(g)
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, atol=1e-14)
评论列表
文章目录