通过给定平稳向量计算马尔可夫链

时间:2019-03-23 10:12:49

标签: python markov-chains mcmc

我正在蒙特卡洛(Monte Carlo)课程中做家庭作业,被要求找到具有6个州的马尔可夫链矩阵,即 0、1、2、3、4、5 这样,在经过足够长的时间后,我们花费的时间与数字成正比 5、10、5、10、25、60 在每个州。

我看到这是如果我们有转换矩阵就得到的平稳向量。我必须使用Metropolis算法,但是我发现的所有解释和示例均基于Metropolis-Hasting算法。

我拥有的算法的伪代码:

e_mod

我正在寻找逐步的解释,说明如何针对给定的问题(最好是在python中)实现该算法!

1 个答案:

答案 0 :(得分:1)

算法方法

计算马尔可夫链的平稳分布的标准方法是线性方程的解,例如如此处https://stephens999.github.io/fiveMinuteStats/stationary_distribution.html所述。 反过来,您的问题的解决方案相同-解决相同的方程式,不同的是,您的情况是平稳分布的,但没有转移概率/比率。

但是,这种方法的问题是,您可能会构建一个线性方程组,其变量比方程组多得多。这极大地减少了您对已构造的马尔可夫链的拓扑的选择。 幸运的是,您似乎对构造的马尔可夫链的拓扑没有任何限制,因此可以做出一些折衷。您可以做的就是停用大多数转换,即为它们提供零概率/速率,并且每个状态仅启用一个转换。这可能会产生某种环形拓扑,但应确保您的线性方程组具有解。

原始示例

考虑平稳分布 Pi =(x = 1/3,y = 1/3,z = 1/3)

将线性方程组构建为

Pi(x) = 1/3 =  Pr(y,x) * Pi(y)
Pi(y) = 1/3 =  Pr(z,y) * Pi(z)
Pi(z) = 1/3 =  Pr(x,z) * Pi(x)

在这种情况下,解为 Pr(y,x)= Pr(z,y)= Pr(x,z)= 1 ,然后获得马尔可夫链从 x z y >并以1的概率返回到 x 。 注意,拟合解的数量可以是无限的(即使对于示例中所示的线性方程组的简化系统而言)也可以是无限的。在这种情况下,概率/比率可以是任何正值,只要它们都相等即可。

所以,逐步解决问题

  1. 按照所述方法构建线性方程组。
  2. 解决线性方程组的构造问题
  3. 构建的线性方程组的解决方案描述了您正在寻找的马尔可夫链。如果需要,可以轻松地重建整个过渡矩阵。