def test_mean_weighted(data):
x = PanelData(data.x)
w = PanelData(data.w)
missing = x.isnull | w.isnull
x.drop(missing)
w.drop(missing)
entity_mean = x.mean('entity', weights=w)
c = x.index.levels[0][x.index.labels[0]]
d = pd.get_dummies(pd.Categorical(c, ordered=True))
d = d[entity_mean.index]
d = d.values
root_w = np.sqrt(w.values2d)
wx = root_w * x.values2d
wd = d * root_w
mu = np.linalg.lstsq(wd, wx)[0]
assert_allclose(entity_mean, mu)
time_mean = x.mean('time', weights=w)
c = x.index.levels[1][x.index.labels[1]]
d = pd.get_dummies(pd.Categorical(c, ordered=True))
d = d[time_mean.index]
d = d.values
root_w = np.sqrt(w.values2d)
wx = root_w * x.values2d
wd = d * root_w
mu = pinv(wd) @ wx
assert_allclose(time_mean, mu)
评论列表
文章目录