我正在生成一个中间发生剧烈变化的时间序列。
import numpy as np
size = 120
x1 = np.random.randn(size)
x2 = np.random.randn(size) * 4
x = np.hstack([x1, x2])
这一系列x
看起来像这样:
现在的目标是使用 PyMC3 来估计发生变化的时间(切换点)的后验分布。这应该发生在索引 120 附近。我使用了以下代码;
from pymc3 import Model, Normal, HalfNormal, DiscreteUniform
basic_model = Model()
with basic_model:
mu1 = Normal('mu1', mu=0, sd=10)
mu2 = Normal('mu2', mu=0, sd=10)
sigma1 = HalfNormal('sigma1', sd=2)
sigma2 = HalfNormal('sigma2', sd=2)
tau = DiscreteUniform('tau', 0, 240)
# get likelihoods
y1 = Normal('y1', mu=mu1, sd=sigma1, observed=x[:tau])
y2 = Normal('y2', mu=mu2, sd=sigma2, observed=x[tau:])
这样做会产生一个错误,我不能用它tau
来对数组进行切片。在 PyMC 中解决这个问题的方法是什么?看来我需要通过 PyMC 中的随机事物来进行切片。