Подтвердить что ты не робот

PyMC: использование разреженной структуры модели в Adaptive Metropolis MCMC

У меня есть модель, которая структурирована, как на этой диаграмме:

Model diagram

У меня есть население нескольких человек (с индексом 1... 5 на этой картинке). Параметры популяции (A и B, но их может быть больше) определить распределения для каждой отдельной скрытой переменной L[i]. Скрытая переменная L[i] определяет вероятностное наблюдение X[i]. Эта модель является "редкой" в том смысле, что большинство узлов не имеют ребер, напрямую связанных с ними.

Я пытаюсь использовать PyMC для вывода параметров населения, а также каждой отдельной скрытой переменной. (Связанный с этим вопрос, который описывает мой конкретный сценарий более подробно, здесь.) Мой вопрос: должен ли я использовать Adaptive Metropolis вместо другого метода, и если да, есть ли "трюк" для правильной группировки стохастических переменных?

Если я правильно подхожу к выборке Adaptive Metropolis (и я не могу...), этот алгоритм предлагает новые значения для неизвестных (A, B и всех L[i]), учитывая, как эти переменные коррелированы в заднем распределении, построенном в прогоне до сих пор. Если A и B отрицательно коррелированы, то предложение, которое увеличивает A, будет уменьшаться B и наоборот, чтобы увеличить вероятность того, что предложение будет принято.

Дело в том, что в этой модели каждый L[i] является независимой ничьей из основного распределения популяции, определяемого A и B. Поэтому, пока они будут замечены в корреляции в заднем, эти корреляции действительно связаны только с A и B, и поэтому они каким-то образом "смешиваются". Поэтому, когда я вызываю функцию,

M.use_step_method(pymc.AdaptiveMetropolis, stochastics)

должны ли все L[i] быть вместе в списке стохастик? Или мне нужно многократно называть use_step_method, каждый раз с stochastics=[A, B, L[i]] только для одного из L[i]? Моя мысль заключалась в том, что вызов функции несколько раз для разных групп стохастик структурировал бы проблему и упростил бы PyMC, сказав ей сосредоточиться только на корреляциях, которые имеют значение. Правильно ли это?

4b9b3361

Ответ 1

Это может быть неудовлетворительный ответ, но похоже, что PyMC3 имеет пример для очень похожей иерархической модели: https://pymc-devs.github.io/pymc3/GLM-hierarchical/ Миграция кода к PyMC3 предоставит вам доступ к более новым образцам, таким как Sampler No-U-Turn (NUTS)