2016-08-01 7 views
0

Я чувствую себя очень смущен со следующим синтаксисом в зазубринах, например,Как интерпретировать некоторый синтаксис (n.adapt, update ..) в jags?

n.iter=100,000 
thin=100 
n.adapt=100 
update(model,1000,progress.bar = "none") 

В настоящее время я думаю

n.adapt=100 означает, что вы установите первые 100 рисуют, как выжигания,

n.iter=100,000 означает Цепочка MCMC имеет 100 000 итераций, включая ожог,

Я проверил объяснение этого вопроса много времени, но все еще не уверен, что моя интерпретация около n.iter и n.adapt является правильным и как понимать update() и thinning.

Может ли кто-нибудь объяснить мне?

+0

@colin Привет, любая идея для этого? – user5802211

+0

Просьба не быть жадным с вашими тегами. Это, похоже, мало связано с 'r' и не имеет никакого отношения к редактору кода RStudio. – Gregor

+0

@Gregor Это действительно относится к Rstudio. Это всего лишь пакет в R – user5802211

ответ

2

Этот ответ основан на пакете rjags, который принимает аргумент n.adapt. Сначала я расскажу о значениях адаптации, ожога и истончения, а затем я расскажу о синтаксисе (я чувствую, что вы хорошо понимаете смысл ожога и истончения, но не адаптации, полное объяснение может сделайте этот ответ более полезным для будущих читателей).

прожигание Как вы, наверное, поняли из предисловия к выборкам MCMC, некоторое число итераций из цепочки MCMC должно быть отброшено, как выжигания. Это связано с тем, что перед установкой модели вы не знаете, инициализировали ли вы цепь MCMC в наборе характеристик , области разумной задней вероятности. Цепочки, инициализированные вне этой области, принимают конечное (иногда большое) количество итераций, чтобы найти область и начать ее изучать. Образцы MCMC из этого периода исследования не являются случайными ничьями из заднего распределения. Поэтому стандартно отбрасывать первую часть каждой цепи MCMC как «ожог». Существует несколько методов пост-hoc для определения того, какая часть цепи должна быть отброшена.

Разбавление отдельная проблема возникает потому, что во всех, кроме самых простых моделей, алгоритмы выборки MCMC производства цепей, в которых последовательные дро существенно автокоррелированы. Таким образом, подведение итогов на основе всех итераций цепи MCMC (post burn-in) может быть нецелесообразным, так как эффективный размер задних выборок может быть намного меньше, чем аналитик осознает (обратите внимание, что реализация STAN гамильтоновой модели Монте-Карло резко уменьшает эта проблема в некоторых ситуациях). Поэтому стандартно делать вывод о «разбавленных» цепях, где в выводе используется только часть итераций MCMC (например, только каждая пятая, десятая или сотая итерация в зависимости от серьезности автокорреляции).

Адаптация пробоотборников MCMC, что JAGS использует для образца кзади регулируется настраиваемыми параметрами, которые влияют на их точное поведение. Правильная настройка этих параметров может привести к увеличению скорости или де-корреляции выборки. JAGS содержит машины для автоматической настройки этих параметров и делает это, когда он рисует задние образцы. Этот процесс называется адаптация, но немарковский; полученные образцы не являются цепью Маркова. Поэтому необходимо выполнить обжиг по отдельности после адаптации. Неправильно подставлять период адаптации для ожога. Однако иногда требуется сравнительно короткое ожог после адаптации.

Синтаксис Давайте посмотрим на очень конкретном примере (код в OP фактически не показывают, где параметры, такие как n.adapt или thin привыкаешь). Мы попросим rjags подобрать модель таким образом, чтобы каждый шаг был ясен.

n.chains = 3 
n.adapt = 1000 
n.burn = 10000 
n.iter = 20000 
thin = 50 
my.model <- jags.model(mymodel.txt, data=X, inits=Y, n.adapt=n.adapt) # X is a list pointing JAGS to where the data are, Y is a vector or function giving initial values 
update(my.model, n.burn) 
my.samples <- coda.samples(my.model, params, n.iter=n.iter, thin=thin) # params is a list of parameters for which to set trace monitors (i.e. we want posterior inference on these parameters) 

jags.model() строит ориентированный ациклический граф, а затем выполняет этап адаптации для числа итераций, заданных n.adapt. update() выполняет ожог на каждой цепи, запустив MCMC для итераций n.burn без сохранения каких-либо задних образцов (пропустите этот шаг, если вы хотите изучить целые цепи и отказаться от периода ожога после штока). coda.samples() (из пакета coda) запускает каждую цепочку MCMC для количества итераций, указанных n.iter, , но не сохраняет каждую итерацию. Вместо этого он сохраняет только когда-либо n-ю итерацию, где n задается thin. Опять же, если вы хотите определить свой интервал утончения после штока, на данном этапе не нужно тонко стираться. Одно из преимуществ прореживания на этом этапе состоит в том, что синтаксис кода упрощает это; вам не нужно понимать структуру объекта MCMC, возвращенную coda.samples(), и тонкой ее. Большее преимущество прореживания на этом этапе реализуется, если n.iter очень большой. Например, если автокорреляция действительно плохая, вы можете запустить 2 миллиона итераций и сохранить только каждую тысячную (thin=1000). Если вы на этом этапе не похудели, вам (и вашей ОЗУ) нужно будет манипулировать объектом тремя целями по два миллиона чисел. Но, прореживаясь, когда вы идете, у конечного объекта всего две тысячи чисел в каждой цепочке.

+0

Большое спасибо !!! – user5802211

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

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