忽略Gibbs采样中的样本

时间:2015-06-14 20:49:08

标签: python sampling mcmc

import random,math

def gibbs(N=50000,thin=1000):
    x=0
    y=0
    print "Iter  x  y"
    for i in range(N):
        for j in range(thin):
            x=random.gammavariate(3,1.0/(y*y+4))
            y=random.gauss(1.0/(x+1),1.0/math.sqrt(2*x+2))
        print i,x,y

gibbs()

上面的python代码是Gibbs Sampling,以下行让我感到困惑。

for j in range(thin):

这个额外内循环的意义是什么?

1 个答案:

答案 0 :(得分:1)

原因似乎是在你的Gibbs采样中引入了细化。细化用于减少连续样本之间的相关性的影响。吉布斯采样产生马尔可夫样本链,并且附近的样本是相关的,而通常意图是绘制独立的样本。

要实现这一点,您只能使用每个M-th值,而忽略所有中间值。在这种情况下,M存储在变量thinning中,并且您只获取每个thinning值,然后打印在for循环下方。