Как генерировать обновленные апостериорные данные в каждый новый момент времени в JAGS/BUGS

У меня возникли проблемы с поиском учебника / примера этого, поэтому я хотел спросить: у меня есть переменная Xi, которая измеряется i раз, я хотел показать, что с каждым дополнительным измерением прогноз распределения X становится более точным. Конечно, я мог бы просто перезапустить модель с 1:2, 1:3, 1:4 и т. д. Но это утомительно. Я надеялся, что есть какое-то пошаговое кодирование, о котором я не знал.

#----------------------------------------------------------------------
#THE JAGS MODEL FOR X.
#----------------------------------------------------------------------
modelstring="
model {
#prior
#------------------------------------------------------------------------------

mu_x ~ dnorm(0,1E-12)

sd ~ dunif(0,50)
tau <- sd*sd
prec_x <- 1/tau

#LIKELIHOOD
#------------------------------------------------------------------------------
for (i in 1:total) {
x[i] ~ dnorm(mu_x,prec_x)
}
pred.x ~ dnorm(mu_x,prec_x)
}
"

Кто-нибудь знает способ указать модель для оценки pred.x в каждый момент времени на основе данных, доступных в этот момент?


person KevinM    schedule 14.08.2013    source источник


Ответы (2)


Чтобы сделать это с одним файлом модели, вам придется использовать разные mu_x и prec_x для каждого прогноза, потому что они будут иметь разные (более размытые) апостериорные распределения, если они основаны на меньшем количестве данных. Итак, заверните все это в цикл над j, используйте что-то вроде

for (i in 1:j) { 
  x[i,j] ~ dnorm(mu_x[j],prec_x[j]) 

и поместите индексы j на все остальное. Наконец, вам нужно будет предоставить x как матрицу копий исходного x. Вы можете использовать блок data{ } для облегчения этого (см. раздел 7.0.4 руководства).

person Chris Jackson    schedule 15.08.2013

Крис, твой ответ сработал отлично. Я просто хотел опубликовать свой код для справки:

Сначала я создал матрицу для Xi, где i — это количество измерений.

set up data into matrix:
xmat<-matrix(nrow=#,ncol=#)
for (j in 1:#) {
 for (i in 1:j) {
  xmat[i,j] <- x[i]
 }
}
DataList = list( #create datalist for JAGS
  x=xmat
)
#JAGS MODEL
model {
#LIKELIHOOD
for (j in 1:#) {
  for (i in 1:j) {
    x[i,j]       ~ dnorm(mu_x[j],prec_x[j])
  }
pred.x[j]    ~ dnorm(mu_x[j],prec_x[j])

#prior
sd[j] ~ dunif(0,50)
tau[j] <- sd[j]*sd[j]
prec_ic[j] <- 1/tau[j]
mu_x[j]  ~ dnorm(0,1E-12)
 }
}
person KevinM    schedule 15.08.2013