2015-06-14 3 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, и следующая строка меня смущает.Игнорирование образцов в выборке Gibbs

for j in range(thin): 

Каково значение этого дополнительного внутреннего контура?

+0

Чтобы повторить тело '' '' 'тон'' '' '' '' '' '' '' '' '' '' '' '' (обратите внимание, что 'x' и' y' считываются и назначаются в теле) –

+0

Я знаю. Но какова мотивация? – Wyatt

ответ

1

Причина, по-видимому, заключается в том, что вы прореживаетесь в ваш выбор Gibbs. Разбавление используется для уменьшения эффекта корреляции между последовательными образцами. Выборка Гиббса генерирует цепь Маркова образцов, а близлежащие образцы коррелируют, в то время как обычно намерение состоит в том, чтобы провести независимые выборки.

Для этого вы можете использовать только каждое значение M-th, игнорируя все промежуточные значения. В этом случае M хранится в переменной thinning, и вы берете только каждое значение thinning, которое затем печатается ниже цикла for.

Смежные вопросы