2015-01-05 5 views
2

У меня есть скрытая модель стохастической волатильности Маркова (представленная как модель линейного состояния пространства). Я использую рукописную схему выборки Гиббса для оценки параметров модели. Фактический сэмплер требует некоторых довольно сложных правил обновления, которые, я считаю, мне нужно писать вручную. Вы можете увидеть пример версии этих правил обновления версии Julia here.Как реализовать пользовательскую схему выборки гиббсов в pymc

Мой вопрос следующий: как я могу указать модель по-своему, а затем передать задание запуска семплера и собрать образцы в pymc? Другими словами, я рад предоставить код для выполнения всех тяжелых операций (как обновить каждый блок параметров при каждом сканировании - используя полные условные условия в каждом блоке), но я хочу, чтобы pymc обрабатывал «учет» для меня ,

Я понимаю, что мне, вероятно, потребуется предоставить дополнительную информацию, чтобы другие могли ответить на этот вопрос. Проблема в том, что я точно не знаю то, что информация будет полезна. Итак, если вы чувствуете, что можете помочь мне с этим, но вам нужна дополнительная информация - пожалуйста, дайте мне знать в комментарии, и я обновлю вопрос.

ответ

1

Вот пример a custom sampler in PyMC2:

class BDSTMetropolis(mc.Metropolis): 
    def __init__(self, stochastic): 
     mc.Metropolis.__init__(self, stochastic, scale=1., proposal_sd='custom', 
      proposal_distribution='custom', verbose=None, tally=False) 

    def propose(self): 
     T = self.stochastic.value 

     T.u_new, T.v_new = T.edges()[0] 
     while T.has_edge(T.u_new, T.v_new): 
      T.u_new, T.v_new = random.choice(T.base_graph.edges()) 

     T.path = nx.shortest_path(T, T.u_new, T.v_new) 
     i = random.randrange(len(T.path)-1) 
     T.u_old, T.v_old = T.path[i], T.path[i+1] 

     T.remove_edge(T.u_old, T.v_old) 
     T.add_edge(T.u_new, T.v_new) 
     self.stochastic.value = T 

    def reject(self): 
     T = self.stochastic.value 
     T.add_edge(T.u_old, T.v_old) 
     T.remove_edge(T.u_new, T.v_new) 
     self.stochastic.value = T 

Это очень отличается от модели, но он должен продемонстрировать все детали. Это дает вам достаточно возможностей для продолжения?

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

  • Нет связанных вопросов^_^