Pregunta

Estoy tratando de modelar la observación "Tiempo" como variable aleatoria con OpenBugs a través de R (R2OPENBUGS).Si todos los tiempos de observación están disponibles (no hay NA), todo funciona, pero si configuro una de las veces a NA, no pasa nada.Probé el mismo código con Winbugs, y obtuve el error de la trampa 'Nil Dereference (Leer)'.Entonces, mi pregunta es que hay algo realmente equivocado en mi código, ¿o es mi modelo demasiado raro para los errores?

Mi modelo es así:

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) 
}

y el código r se ve así:

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)

¿Fue útil?

Solución

Si entiendo bien su pregunta, está preguntando si esta expresión

obs[i] ~ dbern(p)

es raro para ganar / openbugs para que no maneje el valor faltante.No, no lo creo;Los errores pueden manejar los valores faltantes de esta manera e incluso los imputa, con la distribución posterior.

pero tengo una fuerte sospecha de que

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

es realmente raro!Esto podría causar problemas a los errores a medida que obliga a calcular el índice utilizando la observación obs[i], que es nula.Esto es realmente raro, debes tratar de encontrar otra forma de hacerlo.Primero intente simplificar el modelo para omitir esta regla y apostaría a que desaparece el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top