OpenBUGS: отсутствует значение в распределении Бернулли - PullRequest
4 голосов
/ 27 февраля 2012

Я пытаюсь смоделировать время наблюдения как случайную переменную с помощью OpenBUGS через R (R2OpenBUGS). Если все время наблюдения доступно (нет NA), все работает, но если я установлю одно из значений NA, ничего не произойдет. Я протестировал тот же код с WinBUGS, и я получаю сообщение об ошибке «Разыменование NIL (чтение)». Поэтому мой вопрос в том, что в моем коде что-то действительно не так или моя модель слишком странная для ошибок?

Моя модель такая:

model{
 for(i in 1:k){
  obs[i] ~ dbern(p) #is the observation done at time 1 or 2?
  y[(i-1)*2 + obs[i]+1] <- x[i]
 }    
 for(i in 1:n){    
   y[i] ~ dnorm(mu,tau) 
 }    
 mu ~ dnorm(0,0.0001)
 tau~ dgamma(0.001,0.001)  
 p ~ dunif(0,1) 
}

И код R выглядит так:

library(R2OpenBUGS)
x<-obs<-rep(NA,5)
for(i in 1:k)
{
  obs[i]<-sample(c(0,1),1) #observation time of ith observation
  x[i]<-rnorm(1) #observed values
}

obs[2]<-NA #one of the sampling times is missing
INITS <- list(list(tau=1,mu=0,p=0.5))
DATA  <- list(x=x,n=n,k=k,obs=obs)

ob <- bugs(
  data=DATA,
  inits=INITS,
  parameters.to.save=c("tau","mu","p","y"),
  model.file="BUGSModel.R",
  n.chains=1,
  n.iter=50,
  n.burnin=10,
  n.thin=1,    
  DIC=FALSE)

1 Ответ

4 голосов
/ 28 февраля 2012

Если я хорошо понимаю ваш вопрос, вы спрашиваете, есть ли это выражение

obs[i] ~ dbern(p)

странно для Win / OpenBUGS, так что он не будет обрабатывать пропущенное значение. Нет, я так не думаю; Bugs способен обрабатывать пропущенные значения таким образом и даже вменяет их - с последующим распространением.

Но у меня есть сильное подозрение, что

y[(i-1)*2 + obs[i]+1] <- x[i]

действительно странно! Это может вызвать проблемы с ошибками, поскольку вы заставляете вычислять индекс, используя наблюдение obs[i], которое является нулевым. Это действительно странно, вы должны попытаться найти другой способ сделать это. Сначала попробуйте упростить модель, чтобы пропустить это правило, и я готов поспорить, что проблема исчезнет.

...