在 PyMC3 中为 VAR(p) 生成随机矩阵

Generating random matrices for VAR(p) in PyMC3

我正在尝试使用 pymc3 构建一个简单的 VAR(p) 模型,但我遇到了一些关于不兼容维度的神秘错误。我怀疑问题是我没有正确生成随机矩阵。这是对 VAR(1) 的尝试,欢迎任何帮助:

# generate some data
y_full = numpy.zeros((2,100))
t = numpy.linspace(0,2*numpy.pi,100)
y_full[0,:] = numpy.cos(5*t)+numpy.random.randn(100)*0.02
y_full[1,:] = numpy.sin(6*t)+numpy.random.randn(100)*0.01
y_obs = y_full[:,1:]
y_lag = y_full[:,:-1]
with pymc3.Model() as model:
  beta= pymc3.MvNormal('beta',mu=numpy.ones((4)),cov=numpy.ones((4,4)),shape=(4))
  mu = pymc3.Deterministic('mu',beta.reshape((2,2)).dot(y_lag))
  y = pymc3.MvNormal('y',mu=mu,cov=numpy.eye(2),observed=y_obs)

最后一行应该是

y = pm.MvNormal('y',mu=mu.T, cov=np.eye(2),observed=y_obs.T)

MvNormal 将最后一个维度解释为 mvnormal 向量。这是因为 numpy 索引的行为意味着 y_obs 是一个长度为 2 的向量,其中包含长度为 100 (y_lag[i].shape == (100,))

的向量