2015-06-14 35 views
1
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采样中的样本

for j in range(thin): 

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

+0

重复'for'循环'thin'次的主体? (请注意'x'和'y'都是在主体中读取和分配的) –

+0

我知道。但是动机是什么? – Wyatt

回答

1

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

要达到这个目标,您只能使用每个M-th值,而忽略所有中间值。在这种情况下,M存储在变量thinning中,并且您仅采用每个thinning值,然后将该值打印在for循环的下面。