Domanda

Sto cercando di modellare l'osservazione "TIME" come variabile casuale con OpenBugs tramite R (R2openbugs).Se tutti i tempi di osservazione sono disponibili (no na's) tutto funziona, ma se ho impostato uno dei tempi per na, non succede nulla.Ho provato lo stesso codice con WinBugs, e ottengo l'errore trappolo 'Nil Dereference (leggi)'.Quindi la mia domanda è che c'è qualcosa di davvero sbagliato nel mio codice, o è il mio modello troppo strano per i bug?

Il mio modello è così:

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

E il codice R sembra questo:

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

È stato utile?

Soluzione

Se capisco bene la tua domanda, stai chiedendo se questa espressione

obs[i] ~ dbern(p)
.

è strano per Win / OpenBugs in modo che non gestirà il valore mancante.No, non la penso così;Bugs è in grado di gestire i valori mancanti in questo modo e imputa persino loro - con la distribuzione posteriore.

Ma ho un forte sospetto che

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

è davvero strano!Ciò potrebbe causare problemi ai bug mentre forzati per calcolare l'indice usando l'osservazione obs[i] che è nullo.Questo è davvero strano, dovresti cercare di trovare un altro modo per farlo.Prima prova a semplificare il modello per saltare questa regola e scommetterei che il problema scompare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top