2017-02-21 21 views
1

Я тестирую метод шага AdaptativeMetropolis в PyMC (как задокументировано here), и хочу видеть его в действии. Такой ступенчатый метод состоит в блочном обновлении некоторых переменных с использованием многомерного распределения кривых, ковариантность которого настраивается во время выборки.Как контролировать ковариацию предложения в PyMC?

Можно распечатать матрицу ковариации предложения по времени? Мне кажется, что это не документировано.

Спасибо.

EDIT: как игрушечная модель, рассмотрим случай двух подобных кубиков (предположим, что они происходят с той же фабрики). Мы хотим оценить, являются ли они предвзятыми.

import pymc 
n = 100 
alpha = pymc.Gamma('alpha', alpha=1, beta=1) 
P1 = pymc.Beta('p1', alpha=alpha, beta=2) 
P2 = pymc.Beta('p2', alpha=alpha, beta=2) 
Y1 = pymc.Binomial('y1', n=n, p=P1, value=70, observed=True) 
Y2 = pymc.Binomial('y2', n=n, p=P2, value=50, observed=True) 
model = pymc.Model([alpha, P1, P2, Y1, Y2]) 
MC = pymc.MCMC(model) 
MC.use_step_method(pymc.AdaptiveMetropolis, [P1, P2]) 

теперь я ожидаю/думает, что P1 и P2 устанавливаются быть выбраны с помощью обычного двухмерного предложения с адаптивной covariace. Как я могу контролировать это? Отбор проб производится после вызова

MC.sample(iter=11000, burn=10000) 
+0

просто любопытно, как вы представляете визуализированную матрицу ковариации, особенно во времени? Невозможно ли построить визуал, который вы ищете, когда MCMC будет выполнен - ​​как и с другими традиционными графиками. –

+0

В качестве первого шага мне будет достаточно возможности распечатать его на терминале. – altroware

+0

Переменные блока, которые вы обновляете, должны храниться в трассировке, поэтому вы можете комбинировать соответствующие трассы в матричной модели ковариации, чтобы увидеть матрицу ковариации на этапах MCMC. Возможно, создание модели, для которой мы можем запустить MCMC, сделает людей более желающими помочь –

ответ

0

Рытье source code, я обнаружил, что можно настроить подробность для печати ковариационной матрицы:

if self.verbose > 1: 
    print_("\tUpdating covariance ...\n", self.C) 
    print_("\tUpdating mean ... ", self.chain_mean) 

Следовательно, оно должно быть достаточно:

MC.use_step_method(pymc.AdaptiveMetropolis, [P1, P2], verbose=2) 

Также окончательная матрица корреляции хранится в MC.get_state()['step_methods']['AdaptiveMetropolis_p1_p2']['proposal_sd']. Это можно использовать для вычисления матрицы ковариации после выборки (np.dot(corr, corr.T)).