我正在尝试使用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)
答案 0 :(得分:1)
最后一行应该是
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,)
)