一个简单的Markow链
假设我们想要估计系统的参数,以便我们可以在时间步长t 1预测系统的状态,给定时间步t的状态. PyMC应该能够轻松应对这一问题.
让我们的玩具系统由一维世界中的移动物体组成.状态是对象的位置.我们想要估计潜在变量/对象的速度.下一个状态取决于先前的状态和潜在的变量速度.
# define the system and the data
true_vel = .2
true_pos = 0
true_positions = [.2 * step for step in range(100)]
我们假设我们的观察中有一些噪音(但这并不重要).
问题是:如何模拟下一个状态对当前状态的依赖性.我可以为转换函数提供参数idx以在时间t访问位置,然后在时间t 1预测位置.
vel = pymc.Normal("pos", 0, 1/(.5**2))
idx = pymc.DiscreteUniform("idx", 0, 100, value=range(100), observed=True)
@pm.deterministic
def transition(positions=true_positions, vel=vel, idx=idx):
return positions[idx] + vel
# observation with gaussian noise
obs = pymc.Normal("obs", mu=transition, tau=1/(.5**2))
但是,索引似乎是一个不适合索引的数组.可能有更好的方法来访问以前的状态.