def data():
n, q, k, p = 1000, 2, 5, 3
np.random.seed(12345)
clusters = np.random.randint(0, 10, n)
rho = 0.5
r = np.zeros((k + p + 1, k + p + 1))
r.fill(rho)
r[-1, 2:] = 0
r[2:, -1] = 0
r[-1, -1] = 0.5
r += np.eye(9) * 0.5
v = np.random.multivariate_normal(np.zeros(r.shape[0]), r, n)
x = v[:, :k]
z = v[:, k:k + p]
e = v[:, [-1]]
params = np.arange(1, k + 1) / k
params = params[:, None]
y = x @ params + e
xhat = z @ np.linalg.pinv(z) @ x
nobs, nvar = x.shape
s2 = e.T @ e / nobs
s2_debiased = e.T @ e / (nobs - nvar)
v = xhat.T @ xhat / nobs
vinv = np.linalg.inv(v)
kappa = 0.99
vk = (x.T @ x * (1 - kappa) + kappa * xhat.T @ xhat) / nobs
return AttrDict(nobs=nobs, e=e, x=x, y=y, z=z, xhat=xhat,
params=params, s2=s2, s2_debiased=s2_debiased,
clusters=clusters, nvar=nvar, v=v, vinv=vinv, vk=vk,
kappa=kappa, dep=y, exog=x[:, q:], endog=x[:, :q],
instr=z)
评论列表
文章目录